采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
通过调试时发现,所有的 字段:url_object_id都是一样的,这是个什么情况啊,bobby老师
url_object_id
你把上面两端测试代码和数据贴一下 我本地运行试试呢? 理论上不会出现这种情况
每个回复只能到1200字符,所以只能分多段了,无法上传文件
blogpark.py import re import json import scrapy from urllib import parse from scrapy import Request from selenium import webdriver from ArticleSpider.items import BlogParkItem, BlogParkItemLoader item_loader = BlogParkItemLoader(item=BlogParkItem(), response=response) # add_css(内容, 提取规则) # 1.标题 item_loader.add_css('title', '#news_title a::text') # 2.发布时间 item_loader.add_css('create_date', '#news_info span.time::text') # 3.内容 item_loader.add_css('content', '#news_content') # 4.标签 item_loader.add_css('tags', '.news_tags a::text') # 5.url item_loader.add_value('url', response.url) # 6.图片 if response.meta.get("front_image_url", []) : item_loader.add_value("front_image_url",response.meta.get( "front_image_url", [])) article_item = item_loader.load_item() yield Request(parse.urljoin(response.url, f'/NewsAjax/GetAjaxNewsInfo?contentId={post_id}'), meta={'article_item' : item_loader}, callback=self.parse_nums)
def parse_nums(self, response) : json_data = json.loads(response.text) item_loader = response.meta.get('article_item', '') ''' 第二种 ''' item_loader.add_value('praise_nums', json_data['DiggCount']) item_loader.add_value('comment_nums', json_data['CommentCount']) item_loader.add_value('fav_nums', json_data['TotalView']) item_loader.add_value('bury_nums', json_data['BuryCount']) item_loader.add_value('url_object_id',aes_encrypt(response.meta.get('url', ''), KEY)) # item_loader.add_value('url_object_id', generator_md5(response.meta.get('url', ''))) article_item = item_loader.load_item() yield article_item
经过测试,我的 md5 生成的 "url_object_id"字段都是一样的,不是到是什么原因导致的;不知其他同学是怎样的,所以我换成了 aes 下列是 aes 的 加密方法如果没有 安装 crypto库的可以使用下列命令安装:pip install -i https://douban.com/pypi/simple/ 加密:from Crypto.Cipher import AES from Crypto.Util.Padding import pad, unpad from Crypto.Random import get_random_bytes # 密钥生成 import base64 ''' AES加密 ''' def aes_encrypt(plaintext, key): ''' :param plaintext: 待加密的明文 :param key: 密钥 :return: 加密后的密文 ''' cipher = AES.new(key, AES.MODE_CBC) ciphertext = cipher.encrypt(pad(plaintext.encode('utf-8'), AES.block_size)) return base64.b64encode(cipher.iv + ciphertext).decode('utf-8')需要在 爬虫文件中 引入 加密 方法 与 生成密钥的方法 看:③和④然后将 md5生成方法替换为 aes生成的方法即可成功特别要提醒的是:使用 aes 加密时 一定要 引入 密钥,不然无法使用生成且会报错
经过测试,我的 md5 生成的 "url_object_id"字段都是一样的,不是到是什么原因导致的;不知其他同学是怎样的,所以我换成了 aes
下列是 aes 的 加密方法
如果没有 安装 crypto库的可以使用下列命令安装:
pip install -i https://douban.com/pypi/simple/
加密:
from Crypto.Cipher import AES from Crypto.Util.Padding import pad, unpad from Crypto.Random import get_random_bytes # 密钥生成 import base64 ''' AES加密 ''' def aes_encrypt(plaintext, key): ''' :param plaintext: 待加密的明文 :param key: 密钥 :return: 加密后的密文 ''' cipher = AES.new(key, AES.MODE_CBC) ciphertext = cipher.encrypt(pad(plaintext.encode('utf-8'), AES.block_size)) return base64.b64encode(cipher.iv + ciphertext).decode('utf-8')
需要在 爬虫文件中 引入 加密 方法 与 生成密钥的方法 看:③和④
然后将 md5生成方法替换为 aes生成的方法即可成功
特别要提醒的是:
使用 aes 加密时 一定要 引入 密钥,不然无法使用生成且会报错
问题已解决
登录后可查看更多问答,登录/注册
带你彻底掌握Scrapy,用Django+Elasticsearch搭建搜索引擎
5.5k 30
2.9k 18
1.6k 18
1.8k 15
3.4k 15
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号