为什么有必要在scrapy中返回pipelines.py中的项目?

时间:2019-08-17 11:46:19

标签: python scrapy

pipelines.py发送解析为数据库或文件或json的数据。管道,从scrapy的体系结构概述来看,共有9个步骤,第1-8步构成了一个完整的循环,第9步创建了一个新流程,其中包含其他8个相同流程,如上一个。

enter image description here

在一些示例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不能省略,想知道为什么吗?

2 个答案:

答案 0 :(得分:1)

Scrapy支持同时启用多个管道。

这就是为什么管道向前传递项目很重要的原因,除非它们是专门为丢弃某些项目而设计的管道。

例如,您以后可以决定添加第二条管道,除了将它们存储在数据库中之外,还可以在本地存储项目。

答案 1 :(得分:0)

来自documntation

  

每个项目管道组件都调用此方法。   process_item()必须:返回包含数据的字典,返回项目   (或任何后代类)对象,返回Twisted Deferred或提高   DropItem异常。删除的项目将不再进一步处理   管道组件。