初识 Scrapy - Item Pipeline
程序员文章站
2022-05-05 15:02:39
...
1. 前言
在item
被spider
抓取之后,它会被发送到Item Pipeline
,该管道通过几个按顺序执行的组件来处理它。
每一个item pipeline组件
都是Python
的类。它们接收item
,并对它执行操作,还决定该项目是否应继续通过管道,或者是否应删除并不再处理。
item pipeline
的典型用途有:
- 清理
HTML
数据 - 验证抓取的数据(检查项目是否包含某些字段)
- 检查重复项(并删除它们)
- 将爬取的项目存储在数据库中
2. 自定义item pipeline
每个item pipeline组件
都是一个python
类,必须实现以下方法:
process_item(self, item, spider):
# 调用每一个item pipeline组件的此方法。
pass
open_spider(self, spider):
# 当spider打开时调用此方法。
pass
close_spider(self, spider):
# 当spider关闭时调用此方法
pass
from_crawler(cls, crawler):
# 如果存在,从一个crawler创建一个pipeline实例。
pass
3. 示例
- 验证
item
字段和删除不合格的item
- 将
item
写入json
文件 - 将
item
存入MongoDB
详情见 Scrapy 官方文档 - Item Pipeline
4. 重复过滤器
查找并删除已处理的重复item
。假设我们的item
有一个唯一的ID
,但是我们的spider
返回多个ID
相同的item
:
from scrapy.exceptions import DropItem
class DuplicatesPipeline(object):
def __init__(self):
self.ids_seen = set()
def process_item(self, item, spider):
if item['id'] in self.ids_seen:
raise DropItem("Duplicate item found: %s" % item)
else:
self.ids_seen.add(item['id'])
return item
5. **item pipeline组件
若要**项管道组件,必须将其类添加到ITEM_PIPELINES
设置,如以下示例中所示:
ITEM_PIPELINES = {
'myproject.pipelines.PricePipeline': 300,
'myproject.pipelines.JsonWriterPipeline': 800,
}
在此设置中分配给类的整数值决定了它们的运行顺序:item从低到高依次运行。习惯上把这些数字定义在0-1000范围内。
6. 参考文献
上一篇: JAVA时间戳
下一篇: C# DateTIme 转时间戳
推荐阅读
-
爬虫(十四):Scrapy框架(一) 初识Scrapy、第一个案例
-
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
-
爬虫(十六):Scrapy框架(三) Spider Middleware、Item Pipeline、对接Selenium
-
scrapy的一些容易忽视的点(模拟登陆,传递item等)
-
Python:Scrapy框架中Item Pipeline组件使用详解
-
自学python一周,初识Scrapy之再续火影情缘!
-
scrapy item引用时报错
-
python3+Scrapy爬虫使用pipeline数据保存到文本和数据库,数据少或者数据重复问题
-
手把手教你进行Scrapy中item类的实例化操作
-
爬虫(十四):Scrapy框架(一) 初识Scrapy、第一个案例