之前我们在scrapy入门使用一节中学习了管道的基本使用,接下来我们深入的学习scrapy管道的使用
继续完善wangyi爬虫,在pipelines.py代码中完善
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html
# useful for handling different item types with a single interface
import json
from itemadapter import ItemAdapter
class MyspiderPipeline:
def __init__(self):
self.file = open('lianjia.json','w')
# 爬虫文件中提取数据的方法每yield一次item,就会运行一次
# 该方法为固定名称函数
def process_item(self, item, spider):
# 参数item默认是一个 <class 'mySpider.items.MyspiderItem'>类信息,需要处理成字典
dict_data = dict(item)
print(type(item), type(dict_data))
# 将返回的字典数据转为JSON数据
json_data = json.dumps(dict_data,ensure_ascii=False)+',\n'
# 写入JSON数据
self.file.write(json_data)
# 参数item:是爬虫文件中yield的返回的数据对象(引擎会把这个交给管道中的这个item参数)
print("建模之后的返回值:",item,)
# 默认使用完管道之后将数据又返回给引擎
return item
def __del__(self):
self.file.close()
在settings.py设置开启pipeline
......
ITEM_PIPELINES = {
'myspider.pipelines.lianjiaPipeline': 400, # 400表示权重
'myspider.pipelines.lianjiaPipeline': 500, # 权重值越小,越优先执行!
}
......
别忘了开启mongodb数据库 sudo service mongodb start
并在mongodb数据库中查看 mongo
思考:在settings中能够开启多个管道,为什么需要开启多个?