Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在scrapy管道中获取请求对象_Python_Scrapy - Fatal编程技术网

Python 如何在scrapy管道中获取请求对象

Python 如何在scrapy管道中获取请求对象,python,scrapy,Python,Scrapy,我知道当调用管道时,这意味着请求已经停止,通常我们应该根据提取的项目进行一些验证、持久化作业,似乎在管道中获取请求是没有意义的 然而,我发现它在某些情况下可能有用,在我的应用程序中,我使用了两个管道:FilesPipeline和MysqlStorePipeline 提取项目时,文件管道将尝试发送请求以获取项目的图像,并在完成后将其保存到数据库 然而,我同时使用了一个下载中间件RandomProxy,它将从数据库中随机获取一个代理记录,并将其设置为请求元。但该代理未被授权,可以随时使用 因此,可能

我知道当调用管道时,这意味着请求已经停止,通常我们应该根据提取的项目进行一些验证、持久化作业,似乎在管道中获取请求是没有意义的

然而,我发现它在某些情况下可能有用,在我的应用程序中,我使用了两个管道:
FilesPipeline
MysqlStorePipeline

提取项目时,
文件管道
将尝试发送请求以获取项目的图像,并在完成后将其保存到数据库

然而,我同时使用了一个下载中间件
RandomProxy
,它将从数据库中随机获取一个代理记录,并将其设置为请求元。但该代理未被授权,可以随时使用

因此,可能会发生以下情况:

检索项目时,代理
http://proxy1
已使用,但无法使用,多亏了重试中间件,scrapy将重试,并使用另一个代理
http://proxy2
从数据库中获取,如果可以使用,则生成一个项,然后,
FilesPipeline
将尝试通过发送一个图像请求来下载该项目的图像,该请求将填充一个代理,比如说它是
http://proxy3
,一旦proxy3无法使用,scrapy也将重试。但在所有重试过程中,都有可能得到错误的代理。然后该项目将被删除,因为未获取绑定图像,该图像不能为空

此外,映像请求不包含referer,该referer有时可能会被服务器阻止

因此,我想知道用于提取项目的原始请求是否可以通过管道访问


这是可能的还是其他建议?

这里有两种方法:

  • 向项添加一个虚拟字段,以在spider代码中存储所需的内容。然后检索项目管道中的值(并弹出字段)

  • 不要使用项目管道,而是使用。在其
    process\u spider\u output
    方法中,您可以访问响应和spider输出


  • 以下是两种方法:

  • 向项添加一个虚拟字段,以在spider代码中存储所需的内容。然后检索项目管道中的值(并弹出字段)

  • 不要使用项目管道,而是使用。在其
    process\u spider\u output
    方法中,您可以访问响应和spider输出