pipelines.py发送解析为数据库或文件或json的数据。管道,从scrapy的体系结构概述来看,共有9个步骤,第1-8步构成了一个完整的循环,第9步创建了一个新流程,其中包含其他8个相同流程,如上一个。
在一些示例pipelines.py中,我们经常看到如下代码:
import pymysql.cursors
class MySQLPipeline(object):
def __init__(self):
self.connect = pymysql.connect(
host='127.0.0.1',
port=3306,
db='xxxx',
user='root',
passwd='xxxx',
charset='utf8',
use_unicode=True)
self.cursor = self.connect.cursor()
def process_item(self, item, spider):
self.cursor.execute("sql_insert_command")
self.connect.commit()
return item
pipelines.py
是整个8个过程的最后一步,为什么将项目发送到数据库或其他存储方式后return item
在pipeline.py中呢?
item
已插入数据库中,没有任何再次被scrapy的组件调用item
的用处吗?
我测试过return item
不能省略,想知道为什么吗?
答案 0 :(得分:1)
Scrapy支持同时启用多个管道。
这就是为什么管道向前传递项目很重要的原因,除非它们是专门为丢弃某些项目而设计的管道。
例如,您以后可以决定添加第二条管道,除了将它们存储在数据库中之外,还可以在本地存储项目。
答案 1 :(得分:0)
来自documntation:
每个项目管道组件都调用此方法。 process_item()必须:返回包含数据的字典,返回项目 (或任何后代类)对象,返回Twisted Deferred或提高 DropItem异常。删除的项目将不再进一步处理 管道组件。