完美解决爬虫过程中的 TimeoutError: [WinError 10060]问题,在爬虫代理这一块我们经常会遇到请求超时的问题,代码就卡在哪里,不报错也没有requests请求的响应。
注意:此方法是用于解决某些请求持续等待造成卡顿的问题,通过设置超时时间及时结束无效请求,避免盲目等待,并根据返回结果自行做出处理(例如如果没有得到预期请求结果,决定放弃请求或者使用一些反反爬策略再次请求等)。至于该请求超时的原因可能是由于被请求服务器的反爬机制导致的,也可能是你的请求格式直接不被接受的,需要根据情况进一步采取相应的处理措施。
解决方法:
req = requests.get(url, headers=headers, proxies=proxies, timeout=5)
如上,在request.get()函数中加个timeout参数就行了,下面详细介绍下该参数。
timeout 是用作设置响应时间(单位:秒)的,可以设置一个float或者一个tuple参数,响应时间分为连接时间和读取时间,timeout(3,7)表示的连接时间是3秒,响应时间是7秒。
源码:
:param timeout: (optional) How many seconds to wait for the server to send data
before giving up, as a float, or a :ref:`(connect timeout, read
timeout) <timeouts>` tuple.
:type timeout: float or tuple
超时(timeout)
为防止服务器不能及时响应,大部分发至外部服务器的请求都应该带着 timeout 参数。在默认情况下,除非显式指定了 timeout 值,requests 是不会自动进行超时处理的。如果没有 timeout,你的代码可能会挂起若干分钟甚至更长时间。
连接超时指的是在你的客户端实现到远端机器端口的连接时(对应的是 connect() ),Request 会等待的秒数。一个很好的实践方法是把连接超时设为比 3 的倍数略大的一个数值,因为 TCP 数据包重传窗口 (TCP packet retransmission window) 的默认大小是 3。
在爬虫代理这一块我们经常会遇到请求超时的问题,代码就卡在哪里,不报错也没有requests请求的响应。
通常的处理是在requests.get()语句中加入timeout限制请求时间
req = requests.get(url, headers=headers, proxies=proxies, timeout=5)
- 如果发现设置timeout=5后长时间不响应问题依然存在,可以将timeout里的参数细化
作出如下修改后,问题就消失了
req = requests.get(url, headers=headers, proxies=proxies, timeout=(3,7))
- 如果在使用timeout过程中遇到ValueError错误提示(类似:ValueError: Timeout value connect was Timeout(connect=2.0, read=2.0, total=None), but it must be an int or float. ),这是python-requests version 2.4.3-4版本的一个bug需要我们更新一下requests
pip install -U requests
-
参考链接:
-
1.知识点讲解二:关于requests里的timeout()
-
2.python 在爬虫中timeout设置超时有什么作用
- 3.Python爬虫爬资源时由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。怎么破
今天的文章failed to start openssh server_python爬虫可以爬哪些网站分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/75276.html