Python 来自scrapy项目管道中spider的访问响应

Python 来自scrapy项目管道中spider的访问响应,python,scrapy,Python,Scrapy,我有一只蜘蛛 class ProductsSpider(scrapy.Spider): name = "products" allowed_domains = ["example.com"] start_urls = [ 'http://example.com/url' ] def parse(self, response): 我有这样一个管道类 class ProductsDataPipeline(object): """ I

我有一只蜘蛛

class ProductsSpider(scrapy.Spider):
    name = "products"
    allowed_domains = ["example.com"]
    start_urls = [
        'http://example.com/url'
    ]

    def parse(self, response):
我有这样一个管道类

class ProductsDataPipeline(object):
    """ Item pipeline for products data crawler """

    def process_item(self, item, spider):   
        return item
但是我想在parse_item函数中获取parse函数的响应参数,而不将其设置为item对象的属性,是否可能

不可能

响应不会转发到管道。您必须将响应存储在项中,或者使用一些外部存储来存储响应并在管道中获取它。第二个选项要好得多,避免了将响应存储在项中可能导致的许多问题(例如内存问题)。例如,您将响应保存到解析回调中的某种形式的存储中,将对此存储的引用保存到项字段中,并从管道中的存储中获取响应

但这实际上取决于您试图做什么,响应在中可用,所以您可能可以使用它而不是处理管道中的项目。

不,这是不可能的

响应不会转发到管道。您必须将响应存储在项中,或者使用一些外部存储来存储响应并在管道中获取它。第二个选项要好得多,避免了将响应存储在项中可能导致的许多问题(例如内存问题)。例如,您将响应保存到解析回调中的某种形式的存储中,将对此存储的引用保存到项字段中,并从管道中的存储中获取响应


但这实际上取决于您要做什么,响应在中可用,所以您可能可以使用它而不是在管道中处理项目。

我认为您需要的是一个中间件,而不是管道。中间件可以访问请求和响应,请阅读:我认为您需要的是中间件,而不是管道。中间件可以访问请求和响应,请阅读以下内容:我只想将响应保存在一个平面文件中,直接从spider的解析函数中执行该操作好吗?这取决于具体情况。如果你只需要一只蜘蛛就可以了。如果您需要对项目中的所有spider执行此操作,请使用中间件。我只想将响应保存在一个平面文件中。直接从spider的解析函数执行此操作好吗?这取决于具体情况。如果你只需要一只蜘蛛就可以了。如果需要对项目中的所有spider执行此操作,请使用中间件。