python程序根据url从互联网上批量获取数据时,设置HTTP或Socket超时,来防止爬虫爬取某个页面时间过长,导致程序卡置不前。
1、socket
全局设置。
import socketsocket.setdefaulttimeout(1)
t:代表经过t秒后,如果还未下载成功,自动跳入下一次操作,此次下载失败 。
2、添加timeout
使用timeout 参数可以设定等待连接的秒数,如果等待超时,Requests会抛出异常。
示例代码1:
import requestsres = requests.get('https://github.com', timeout=0.01)print(res)
运行结果:
示例代码2:
import requestsres = requests.get('https://github.com', timeout=10)print(res)
运行结果:
注意:timeout 仅对连接过程有效,与响应体的下载无关。 timeout 并不是整个下载响应的时间限制,而是如果服务器在 timeout 秒内没有应答,将会引发一个异常(更精确地说,是在 timeout 秒内没有从基础套接字上接收到任何字节的数据时)。
3、HTTPAdapter(max_retries=3)重试
示例代码:
import timeimport requestsfrom requests.adapters import HTTPAdapters = requests.Session()s.mount('http://', HTTPAdapter(max_retries=3))s.mount('https://', HTTPAdapter(max_retries=3))print(time.strftime('%Y-%m-%d %H:%M:%S'))try: res = s.get('https://github.com', timeout=2) print(res)except requests.exceptions.RequestException as e: print(e)print(time.strftime('%Y-%m-%d %H:%M:%S'))
运行结果:
注意:max_retries 为最大重试次数,重试3次,加上最初的一次请求,一共是4次,所以上述代码运行耗时至少是8秒而不是6秒。
4、捕捉异常
示例代码1:
import requestsdef get_html(url, timeout=5): i = 0 while i < 3: try: html = requests.get(url, timeout=timeout) return html.text except requests.exceptions.RequestException as e: i += 1 print(e)res = get_html('https://github.com', timeout=0.1)print(res)
运行结果:
示例代码2: 【试图提大timeout的值】
import requestsdef get_html(url, timeout=5): i = 0 while i < 3: try: html = requests.get(url, timeout=timeout) return html.text except requests.exceptions.RequestException as e: i += 1 print(e)res = get_html('https://github.com', timeout=10)print(res)
运行结果:
来源地址:https://blog.csdn.net/weixin_44799217/article/details/129544451