1. 如遇到提示 cannnot import Iterable from collections ,只需去 venv/lib/site_packges/scrapy-redis/spider 文件中把
from collections import Iterable
改成
from collections.abc import Iterable
即可
2.如遇到提示爬虫文件里的类没有 make_requests_from_url 这个属性,则只需要在爬虫文件的类中加入实例方法
def make_requests_from_url(self, url): return scrapy.Request(url, dont_filter=True)
即可
ps:这种方法有点小问题,就是redis数据库不会有 爬虫文件名:requests 这个键,我也不知道原因,但应该不影响
3.在网页中提取到的数据会保存在redis 数据库的 爬虫文件名:items 这个键中,但问题是中文数据会是16进制代码,比如:
b'{"title": "\\u5168\\u804c\\u6cd5\\u5e08", "author": "\\u4e71"}'
我们可以在redis数据库客户端用指令 type 爬虫文件名:items 发现这是一个列表,也就是说我们用分布式爬取的数据是保存在一个包含许多个字典的的列表里,提到字典,是不是应该条件反射想起json?没错,解决方法就是使用json库
假设 con 是我们用python代码从redis拿到的存放数据的列表
import json
for i in range(len(con):
con[i]=json.loads(con[i])
这样我们就能得到中文数据了
哈哈!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)