【问题标题】:ReadTimeout: HTTPSConnectionPool(host='', port=443): Read timed out. (read timeout=10)ReadTimeout: HTTPSConnectionPool(host='', port=443): 读取超时。 (读取超时=10)
【发布时间】:2020-01-19 12:25:15
【问题描述】:

我正在网站上进行网页抓取,有时在运行脚本时出现此错误:

ReadTimeout: HTTPSConnectionPool(host='...', port=443): Read timed out. (read timeout=10)

我的代码:

url = 'mysite.com'
all_links_page = []
page_one = requests.get(url, headers=getHeaders(), timeout=10)
sleep(2)
if page_one.status_code == requests.codes.ok:
    soup_one = BeautifulSoup(page_one.content.decode('utf-8'), 'lxml')
    page_links_one = soup_one.select("ul.product_list") 

    for links_one in page_links_one:
        for li in links_one.select("li"):
            all_links_page.append(li.a.get("href").strip())

我找到的答案并不令人满意

【问题讨论】:

  • 除了增加通话超时外,别无他法。网站具有反报废保护机制,如果标记为报废,您的请求会挂起。尝试其他的东西,比如代理
  • 即使我发送了标头,我怎么仍然被标记为报废?
  • 如果您不共享 url,则很难调试问题。可以通过api访问吗?
  • 您可能会根据时间和/或时间被标记为报废者。如果服务器在设定的时间内看到来自同一 IP 的太多请求,它可能会将您视为机器人,或者如果请求以精确的时间间隔发出,等等......任何可能表明非人类使用的情况。

标签: python python-3.x web-scraping beautifulsoup python-requests


【解决方案1】:

由于超时或可用内存可能会发生此异常:

  • 来自服务器的响应时间超过了指定的超时时间。因此,要解决它,您需要设置更高的超时时间。
  • 您试图读取的文件很大,并且套接字缓冲区不足以处理它。因此,您可以尝试根据机器的容量增加缓冲区大小。
        import urllib3, socket
        from urllib3.connection import HTTPConnection
    
        HTTPConnection.default_socket_options = ( 
            HTTPConnection.default_socket_options + [
            (socket.SOL_SOCKET, socket.SO_SNDBUF, 1000000), #1MB in byte
            (socket.SOL_SOCKET, socket.SO_RCVBUF, 1000000)
        ])

【讨论】:

    【解决方案2】:

    我得到了增加超时的帮助,立即设置为 120 秒。原来服务器的响应在 40 秒内就来了。

    【讨论】:

      【解决方案3】:

      为什么里面有超时参数?我只想消除超时参数。您收到该错误的原因是因为您将其设置为 10,这表示如果您在 10 秒内未收到来自服务器的响应,则引发并出错。所以不一定是服务器叫你出去。如果没有明确指定超时,则请求不会超时(至少在您端)。

      page_one = requests.get(url, headers=headers)  #< --- don't use the timeout parameter
      

      【讨论】:

      • 我是在使用这个参数来防止网站被屏蔽,还是我错了?
      • 我相信设置超时总是更好的,如果服务器怀疑有机器人,服务器可以将请求挂起一段时间,从而存储链接并稍后请求或使用代理再次请求可能会解决它。
      猜你喜欢
      • 2021-08-30
      • 2021-01-01
      • 2021-04-26
      • 1970-01-01
      • 2020-05-09
      • 1970-01-01
      • 2020-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多