我正在网站上进行网络爬虫,有时在运行脚本时出现此错误:
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())
我发现的答案并不令人满意
答案 0 :(得分:4)
我通过增加超时得到了帮助,立即设置了 120 秒。原来服务器的响应是在 40 秒内到达的。
答案 1 :(得分:1)
为什么在那里有timeout参数?我只是消除超时参数。收到该错误的原因是,将其设置为10表示如果在10秒钟内未收到服务器的响应,请加薪并出错。因此,不一定是服务器将您召唤出去。如果未明确指定任何超时,则请求不会超时(至少在您端而言)。
page_one = requests.get(url, headers=headers) #< --- don't use the timeout parameter
答案 2 :(得分:0)
此异常可能是由于超时或可用内存:
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)
])