scrapy-Item Pipeline
程序员文章站
2022-03-02 21:08:43
...
当Item在Spider中被收集之后,它将会被传递到Item Pipeline,这些Item Pipeline组件按定义的顺序处理Item。
每个Item Pipeline都是实现了简单方法的Python类,比如决定此Item是丢弃而存储。以下是item pipeline的一些典型应用:
-
验证爬取的数据(检查item包含某些字段,比如说name字段)
-
查重(并丢弃)
-
将爬取结果保存到文件或者数据库中
编写item pipeline
编写item pipeline很简单,item pipiline组件是一个独立的Python类,其中process_item()方法必须实现:
import something
class SomethingPipeline(object):
def __init__(self):
# 可选实现,做参数初始化等
# doing something
def process_item(self, item, spider):
# item (Item 对象) – 被爬取的item
# spider (Spider 对象) – 爬取该item的spider
# 这个方法必须实现,每个item pipeline组件都需要调用该方法,
# 这个方法必须返回一个 Item 对象,被丢弃的item将不会被之后的pipeline组件所处理。
return item
def open_spider(self, spider):
# spider (Spider 对象) – 被开启的spider
# 可选实现,当spider被开启时,这个方法被调用。
def close_spider(self, spider):
# spider (Spider 对象) – 被关闭的spider
# 可选实现,当spider被关闭时,这个方法被调用
完善之前的案例:
item写入txt文件
以下pipeline将所有(从所有'spider'中)爬取到的item,存储到一个独立地txt文件
class TianyaPipeline(object):
def __init__(self):
self.f = open("tianya.txt", "w", encoding="utf-8")
def process_item(self, item, spider):
self.f.write(str(item))
# return item
def __del__(self):
self.f.close()
启用一个Item Pipeline组件
为了启用Item Pipeline组件,必须将它的类添加到 settings.py文件ITEM_PIPELINES 配置,就像下面这个例子:
ITEM_PIPELINES = {
'tianya.pipelines.TianyaPipeline': 300,
}
分配给每个类的整型值,确定了他们运行的顺序,item按数字从低到高的顺序,通过pipeline,通常将这些数字定义在0-1000范围内(0-1000随意设置,数值越低,组件的优先级越高)
推荐阅读
-
python使用pipeline批量读写redis的方法
-
介绍Python的Django框架中的静态资源管理器django-pipeline
-
.NET客户端实现Redis中的管道(PipeLine)与事物(Transactions)
-
PHP Pipeline 实现中间件的示例代码
-
sklearn使用之Pipeline、FeatureUnion、GridSearchCV代码示例
-
scrapy自定义pipeline类实现将采集数据保存到mongodb的方法
-
爬虫(十六):Scrapy框架(三) Spider Middleware、Item Pipeline、对接Selenium
-
.NET客户端实现Redis中的管道(PipeLine)与事物(Transactions)
-
k8s + docker + Jenkins使用Pipeline部署SpringBoot项目时Jenkins错误集锦
-
高性能Web动画和渲染原理系列(4)“Compositor-Pipeline演讲PPT”学习摘要