繁体   English   中英

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

[英]How to get request object in scrapy pipeline

我知道,当调用管道时,这意味着请求已停止,通常我们应该基于提取的项目进行一些验证,持久化工作,似乎没有任何意义在管道中获取请求。

但是我发现它在某些情况下可能有用,在我的应用程序中,我使用了两个管道: FilesPipelineMysqlStorePipeline

提取项目后, FilesPipeline将尝试发送请求以获取该项目的图像,并在完成后将其保存到数据库。

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

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

检索项目时,将使用代理http://proxy1 ,但不能使用它,由于重试了中间件,scrapy将再次尝试,如果可以的话,将从数据库中获取另一个代理http://proxy2使用时,将生成一个项目,然后FilesPipeline将尝试通过发送图像请求来尝试下载该项目的图像,该图像请求将填充一个代理,称其为http://proxy3 ,一旦proxy3无法使用,scrapy将重试太。 但是在所有重试过程中,都有可能出现不良代理的情况。 然后,由于没有获取必须为空的绑定图像,该项目将被丢弃。

此外,图像请求不包含可能会被服务器阻止的引用程序。

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

这可能还是其他建议?

这是两种方法:

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

  2. 代替使用项目管道,而使用蜘蛛中间件 在其process_spider_output方法中,您可以访问响应和Spider输出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM