Scrapy_ItemPipeline的使用
当数据在Spider中被收集之后,可以传递到Item Pipeline中统一进行处理
1 特点
每个item pipeline就是一个普通的python类,包含的方法名如下:
方法名 | 含义 | 是否必须实现 |
---|---|---|
process_item(self,item,spider) | 用于处理接收到的item | 是 |
open_spider(self,spider) | 表示当spider被开启的时候调用这个方法 | 否 |
close_spider(self,spider) | 当spider关闭时候这个方法被调用 | 否 |
2 功能
-
接收item
在
process_item
方法中保存 -
是否要保存数据
取决于是否编写代码用于保存数据
-
决定此Item是否进入下一个pipeline
- return item 数据进入下一个pipeline
- drop item 抛弃数据
3 案例代码
class SaveFilePipeline:
def open_spider(self,spider):
self.file = open('douban5.txt','w')
def process_item(self, item, spider):
self.file.write(f'name:{item.get("name")} score:{item.get("score")}\n')
def close_spider(self,spider):
self.file.close()
from scrapy.exceptions import DropItem
class XSPipeline:
def open_spider(self,spider):
self.file = open('xs.txt','w',encoding='utf-8')
def process_item(self, item, spider):
if item.get('title'):
self.file.write(item.get('title'))
self.file.write('\n')
return item
else:
raise DropItem(f"Missing title in {item}")
def close_spider(self,spider):
self.file.close()