爬取网页卡住问题记录

使用requests模块请求

连接超时

连接超时指的是在你的客户端实现到远端机器端口的连接时(对应的是connect()),Request 等待的秒数。

requests.get(url, timeout=10)

读取超时

读取超时指的就是客户端等待服务器发送请求的时间。(特定地,它指的是客户端要等待服务器发送字节之间的时间。在 99.9% 的情况下这指的是服务器发送第一个字节之前的时间)。
简单的说,连接超时就是发起请求连接到连接建立之间的最大时长,读取超时就是连接成功开始到服务器返回响应之间等待的最大时长。
requests模块中读取超时是没有默认值,如果不设置程序一直处于等待状态,我们的爬虫就处于卡死的状态,而且还不会报错。
设置读取超时:

  1. timeout值将分别做为connect、read超时时间。
requests.get(url, timeout=10)
  1. 如果要分别定制就传入一个元组
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模块进行正则匹配时进入死循环,程序卡住且不报错。
解决方法:

  1. 修改正则表达式
  2. https://blog.csdn.net/Maan_liaa/article/details/108079968
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。