Python爬虫框架Scrapy之管道文件pipeline介绍(三)
laoyan 2017-09-14 11:31:05
分 享


背景简介


当Item在Spider中被收集之后,它将会被传递到Item Pipeline,这些Item Pipeline组件按定义的顺序处理Item。每个Item Pipeline都是实现了简单方法的Python类,比如决定此Item是丢弃而存储。以下是Item Pipeline的一些典型应用:


(1)验证爬取的数据(检查Item包含某些字段,比如说name字段)
(2)查重复(并丢弃)
(3)将爬取结果保存到文件或者数据库中


编写item pipeline规范


# -*- coding: utf-8 -*-
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html
import json
class LybbnspiderPipeline(object):
    def __init__(self):
    #可选方法,用于做参数初始化等操作,常用于保存item到文件中穿件文件并打开时用到
        #doing someting
    def process_item(self, item, spider):
        #参数item---被爬取的item
        #参数spider--爬取该item的spider
        #该方法process_item是必须的方法
        return item
    def open_spider(self,spider):
        #参数spider---被开启的spider
        #当spider被开启时,该方法open_spider会被调用
        #该方法open_spider为可选方法
    def close_spider(self,spider):
        #参数spider---被开启的spider
        #当spider爬虫被关闭时,close_spider方法会被调用
        #该方法open_spider为可选方法



注意:


默认在settings.py文件中中默认是关闭pipeline管到的。因此如果要使用自定义的管道文件,还需要在settings.py文件中启用pipeline,如果你在pipeline定义了多个管道的类,在settings.py中可以写多个pipeline的类,通过后面的数字优先级类区分哪个先执行。优先级的取值范围为0到1000。数值越小优先级越高。例如:


# Configure item pipelines
# See http://scrapy.readthedocs.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
    'lybbnspider.pipelines.LybbnspiderPipeline': 300,
    'lybbnspider.pipelines.LybbnspiderPipeline02': 100,
}


如上例子则LybbnspiderPipeline02管道先执行


案例:把item写入json文件


#pipeline.py
# -*- coding: utf-8 -*-
import json
class LybbnspiderPipeline(object):
    def __init__(self):
    #可选方法,用于做参数初始化等操作,常用于保存item到文件中穿件文件并打开时用到
        self.file=open('lybbn.json','wb')#初始化管道时穿件一个文件
    def process_item(self, item, spider):
        #参数item---被爬取的item
        #参数spider--爬取该item的spider
        #该方法process_item是必须的方法
        content=json.dumps(dict(item),ensure_ascii=False)+"\n"#因为scrapy默认是ascii码的编码,中文要变成unicode编码
        self.file.write(content.encode('utf-8'))#把获取的item转换成utf-8编码
        return item
    def open_spider(self,spider):
        #参数spider---被开启的spider
        #当spider被开启时,该方法open_spider会被调用
        #该方法open_spider为可选方法
    def close_spider(self,spider):
        #参数spider---被开启的spider
        #当spider爬虫被关闭时,close_spider方法会被调用
        #该方法open_spider为可选方法
        self.file.close()#spider爬虫结束关闭json文件


说明:需要在settings.py文件中启用管道配置,接下来你只需要执行scrapy crawl lybbnspider就可以执行保存爬下来的数据到执行的文件中了。 


传送门


Python爬虫框架Scrapy介绍(一)


http://www.lybbn.cn/data/datas.php?yw=260


Python爬虫框架Scrapy之爬取下一页网页的方法(二)


http://www.lybbn.cn/data/datas.php?yw=261


Python爬虫框架Scrapy爬虫文件之spider介绍(四)


http://www.lybbn.cn/data/datas.php?yw=267


相关连接


官方网站:http://scrapy.org/
开源地址:https://github.com/scrapy/scrapy
中文文档:http://scrapy-chs.readthedocs.io/zh_CN/latest/intro/overview.html


转载请注明来自Lybbn(lybbn.cn)

我要小额支持下

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

取消
吐槽一下

游客

所有吐槽
  • 暂时还没有吐槽,赶紧来吐槽!