ReadTimeout: HTTPSConnectionPool(host='', port=443):读取超时。(读取超时=10)

JB_*_*JB_ 8 python beautifulsoup web-scraping python-3.x python-requests

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

ReadTimeout: HTTPSConnectionPool(host='...', port=443): Read timed out. (read timeout=10)
Run Code Online (Sandbox Code Playgroud)

我的代码:

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())
Run Code Online (Sandbox Code Playgroud)

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

chi*_*n88 5

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

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

  • 我相信设置超时总是更好,服务器可以将请求挂起相当长一段时间,特别是如果它怀疑机器人,因此存储链接并稍后请求它或使用代理再次询问可能会解决它。 (16认同)

小智 5

通过增加超时时间,我得到了帮助,立即设置为 120 秒。结果是来自服务器的响应在 40 秒内到达。