问题原因:
错误信息”requests.exceptions.ChunkedEncodingError: (“Connection broken: {error message}”, ConnectionResetError(104, ‘Connection reset by peer’))”表示在传输数据时连接出现问题,可能是由于对方主机或本地网络故障导致连接不稳定。在 HTTP 协议传输数据时,请求和响应的流程可以分为发送请求、接收请求、响应请求、接收响应四个阶段,如果某个阶段出现异常或错误,都很可能导致请求或响应中断,引发上述错误。
解决办法:
- 重连
可以使用 retry 去尝试多次请求,直到成功或者达到最大重试次数的结果。可以使用 retrying 库或手动捕获异常来实现重连。
- 设定请求头
为了避免被对方服务器误认为是攻击或非法请求,更换请求头,模拟人类操作,以减少被封禁IP的可能性。
- 减小请求量
减少请求数量,尤其是当爬取的网站存在反爬虫机制时,尽量遵守对方网站的 robots 协议,减小对方服务器的压力,可以有效减小连接中断出现的概率。
- 增加请求间隔
增加两次请求间的间隔时间,可以减小请求过于频繁导致的连接中断。使用 time 库的 sleep 函数可以方便地增加请求间隔时间。
- 更换代理ip
如果已经使用了上面几个方法还是不能解决问题,那么问题就可能是被封 IP 了。此时,需要更换代理 IP 地址,避免使用自己的 IP 连接服务器被封禁的情况。
以上就是解决 “requests.exceptions.ChunkedEncodingError: (“Connection broken: {error message}”, ConnectionResetError(104, ‘Connection reset by peer’)) ” 错误的完整攻略。