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有时可能会被服务器阻止
因此,我想知道用于提取项目的原始请求是否可以通过管道访问
这是可能的还是其他建议?这里有两种方法:
process\u spider\u output
方法中,您可以访问响应和spider输出以下是两种方法:
process\u spider\u output
方法中,您可以访问响应和spider输出