当出现以下情况时,我正在尽力搜索Scrapy蜘蛛的设置。
1、在我的刮水活动中,如果我停电了
1.我的ISP坏了
我期待的行为是Scrapy不应该放弃。而是无限地等待电源恢复,并在短暂的暂停或10秒的间隔后重试请求,继续进行刮取。
这是我在互联网关闭时收到的错误消息。
https://example.com/1.html
2022-10-21 17:44:14 [scrapy.downloadermiddlewares.retry] DEBUG: Retrying
<GET https://www.example.com/1.html
(failed 1 times): An error occurred while connecting: 10065: A socket operation was attempted to an unreachable host..
信息会重复。
我担心的是,当blip被恢复时,scrapy会放弃尝试1.html,而可能会转到另一个名为99.html的url。
我的问题是,当对无法访问的主机进行错误套接字操作时,如何使scrapy等待并重试相同的url https://www.example.com/1.html
提前谢谢。
1条答案
按热度按时间rhfm7lfc1#
没有内置设置可以做到这一点,但是这仍然可以很容易地实现。
在我看来,最直接的方法是在你的spider中捕捉
response_received
信号,并在你的ISP故障时检查你收到的特定错误代码。当这种情况发生时,您可以暂停scrapy引擎并等待任意时间,然后再次重试相同的请求,直到成功。例如:
使现代化
因为它不是http错误代码,所以下一个最好的解决方案是创建一个自定义
DownloaderMiddleware
来捕获异常,然后执行与第一个示例中相同的操作。在
middlewares.py
文件中:然后在你的
settings.py
中