使用requests模块请求
连接超时
连接超时指的是在你的客户端实现到远端机器端口的连接时(对应的是connect()),Request 等待的秒数。
requests.get(url, timeout=10)
读取超时
读取超时指的就是客户端等待服务器发送请求的时间。(特定地,它指的是客户端要等待服务器发送字节之间的时间。在 99.9% 的情况下这指的是服务器发送第一个字节之前的时间)。
简单的说,连接超时就是发起请求连接到连接建立之间的最大时长,读取超时就是连接成功开始到服务器返回响应之间等待的最大时长。
requests
模块中读取超时是没有默认值,如果不设置程序一直处于等待状态,我们的爬虫就处于卡死的状态,而且还不会报错。
设置读取超时:
- timeout值将分别做为connect、read超时时间。
requests.get(url, timeout=10)
- 如果要分别定制就传入一个元组
requests.get(url, timeout=5,6)
重试
import time
import requests
from requests.adapters import HTTPAdapter
s = 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:
r = s.get('http://www.google.com.hk', timeout=5)
return r.text
except requests.exceptions.RequestException as e:
print(e)
print(time.strftime('%Y-%m-%d %H:%M:%S'))
参考:https://www.cnblogs.com/gl1573/p/10129382.html
scrapy Request
下载超时
下载程序在超时前等待的时间(以秒计),默认180秒。
DOWNLOAD_TIMEOUT = 120
限制爬行速度
下载者从同一网站下载连续页面之前应等待的时间(以秒计)。这可以用来限制爬行速度,以避免对服务器造成太大的冲击。支持十进制数。
DOWNLOAD_DELAY = 5
其他问题导致爬虫卡住
正则re模块
有的正则表达式不是很规范,在使用re模块进行正则匹配时进入死循环,程序卡住且不报错。
解决方法: