scrapy pipelines.py

1.概念

1)process_item(self,item,spider):
pipeline中process_item的方法必须有,否则item没有办法接受和处理
process_item方法接受item和spider,其中spider表示当前传递item过来的spider
有多个pipeline的时候,process_item的方法必须return item,否则后一个pipeline取到的数据为None值
2)open_spider(self, spider): 在爬虫开启的时候仅执行一次,比如打开数据库
3)close_spider(self, spider): 在爬虫关闭的时候仅执行一次,比如关闭数据库

settings中能够开启多个管道
1)不同的pipeline可以处理不同爬虫的数据,通过spider.name属性来区分
2)不同的pipeline能够对一个或多个爬虫进行不同的数据处理的操作,比如一个进行数据清洗,一个进行数据的保存
3)同一个管道类也可以处理不同爬虫的数据,通过spider.name属性来区分

2.应用

1)设置管道

import json
class WangyiFilePipeline(object):
    def open_spider(self, spider):  # 在爬虫开启的时候仅执行一次
        if spider.name == 'itcast':
            self.f = open('json.txt', 'a', encoding='utf-8')
    def close_spider(self, spider):  # 在爬虫关闭的时候仅执行一次
        if spider.name == 'itcast':
            self.f.close()
    def process_item(self, item, spider):
        if spider.name == 'itcast':
            self.f.write(json.dumps(dict(item), ensure_ascii=False, indent=2) + ',\n')
        # 不return的情况下,另一个权重较低的pipeline将不会获得item
        return item  

2)开启管道

ITEM_PIPELINES = {
    'myspider.pipelines.ItcastFilePipeline': 400, # 400表示权重
}

你可能感兴趣的:(scrapy pipelines.py)