【问题标题】:Scrapy - Set TCP Connect TimeoutScrapy - 设置 TCP 连接超时
【发布时间】:2017-09-05 12:43:18
【问题描述】:

我正在尝试通过 Scrapy 抓取网站。但是,该网站有时非常慢,浏览器中的第一次请求响应需要将近 15-20 秒。无论如何,有时,当我尝试使用 Scrapy 抓取网站时,我不断收到 TCP 超时错误。即使该网站在我的浏览器上打开得很好。这是消息:

2017-09-05 17:34:41 [scrapy.downloadermiddlewares.retry] DEBUG: Gave up retrying <GET http://www.hosane.com/result/spec
ialList> (failed 16 times): TCP connection timed out: 10060: A connection attempt failed because the connected party di
d not properly respond after a period of time, or established connection failed because connected host has failed to re
spond..

我什至覆盖了USER_AGENT 设置进行测试。 我认为DOWNLOAD_TIMEOUT 设置在这种情况下不起作用,因为它默认为 180 秒,而 Scrapy 甚至不需要 20-30 秒就给出 TCP 超时错误。

知道是什么导致了这个问题吗?有没有办法在 Scrapy 中设置 TCP 超时?

【问题讨论】:

    标签: web-scraping scrapy


    【解决方案1】:

    TCP connection timed out 可能发生在 Scrapy 指定的 DOWNLOAD_TIMEOUT 之前,因为实际的初始 TCP 连接超时由操作系统定义,通常根据 TCP SYN 数据包重新传输。

    默认情况下,在我的 Linux 机器上,我有 6 次重传:

    cat /proc/sys/net/ipv4/tcp_syn_retries
    6
    

    在实践中,对于 Scrapy 来说,这也意味着 0 + 1 + 2 + 4 + 8 + 16 + 32 (+64) = 127 seconds 在收到 Twisted 的 twisted.internet.error.TCPTimedOutError: TCP connection timed out: 110: Connection timed out. 之前。 (这是最初的尝试,然后在每次重试之间进行指数退避,并且在第 6 次重试后没有收到回复。)

    例如,如果我将 /proc/sys/net/ipv4/tcp_syn_retries 设置为 8,我可以验证我是否收到了这个:

    User timeout caused connection failure: Getting http://www.hosane.com/result/specialList took longer than 180.0 seconds.
    

    那是因为0+1+2+4+8+16+32+64+128(+256) &gt; 180

    10060: A connection attempt failed... 似乎是 Windows 套接字错误代码。如果要将 TCP 连接超时更改为至少 DOWNLOAD_TIMEOUT,则需要更改 TCP SYN 重试计数。 (我不知道如何在您的系统上执行此操作,但 Google 是您的朋友。)

    【讨论】:

    • 非常感谢!这似乎是正确的答案。试用后我会回复你的! :)
    • 请注意,对我来说,即使超时时间非常长,该网站也不会每次都响应,而且大多数情况下都不会。
    • 但是我可以在我的浏览器中访问该网站...那为什么它与 Scrapy 的行为不同,即使使用用户代理...
    • 我可以观察到 TCP 连接大部分时间都没有建立。这发生在任何用户代理字符串作为 HTTP 请求的一部分发送之前。然后我想你需要比较一下 Scrapy/Twisted 和你的浏览器在 TCP 级别上所做的事情(我为此使用了 Wireshark。)
    • 所以我又看了看,看起来网站服务于 2 个 IP 地址:139.224.19.196 和 61.129.78.163。前者经常响应(一直?),而另一个很少响应(从不?)。您可以使用工作地址而不是域名,或者您可以强制 www.hosane.com 的 DNS 条目指向 139.224.19.196。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-02
    • 2017-03-24
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多