[英]How to get request object in scrapy pipeline
我知道,当调用管道时,这意味着请求已停止,通常我们应该基于提取的项目进行一些验证,持久化工作,似乎没有任何意义在管道中获取请求。
但是我发现它在某些情况下可能有用,在我的应用程序中,我使用了两个管道: FilesPipeline
和MysqlStorePipeline
。
提取项目后, FilesPipeline
将尝试发送请求以获取该项目的图像,并在完成后将其保存到数据库。
但是,我同时使用了一个下载中间件RandomProxy
,它将从数据库中随机获取一个代理记录,并将其设置为请求元。 但是不被授予代理权可以一直使用。
因此,可能会发生以下情况:
检索项目时,将使用代理http://proxy1
,但不能使用它,由于重试了中间件,scrapy将再次尝试,如果可以的话,将从数据库中获取另一个代理http://proxy2
使用时,将生成一个项目,然后FilesPipeline
将尝试通过发送图像请求来尝试下载该项目的图像,该图像请求将填充一个代理,称其为http://proxy3
,一旦proxy3无法使用,scrapy将重试太。 但是在所有重试过程中,都有可能出现不良代理的情况。 然后,由于没有获取必须为空的绑定图像,该项目将被丢弃。
此外,图像请求不包含可能会被服务器阻止的引用程序。
因此,我想知道是否可以通过管道访问用于提取项目的原始请求。
这可能还是其他建议?
这是两种方法:
在项目中添加一个虚拟字段,以存储所需的Spider代码中的任何内容。 然后,在项目管道中检索值(并弹出字段)。
代替使用项目管道,而使用蜘蛛中间件 。 在其process_spider_output
方法中,您可以访问响应和Spider输出。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.