最近刚得到一个爬取网络数据的源代码,刚开始爬取少量数据的时候,一切顺利。可是随着爬取的数据越来越庞大,问题也就越来越多了。遇到的一个比较头疼的问题就是连接错误。具体错误信息如下:
Traceback (most recent call last):
File "new_request2.py", line 82, in
result = requests.put(page_url, headers=headers, data=json.dumps(info_payload))
File "C:\Users\12611\AppData\Local\Programs\Python\Python36-32\lib\site-packages\requests\api.py", line 126, in put
return request('put', url, data=data, **kwargs)
File "C:\Users\12611\AppData\Local\Programs\Python\Python36-32\lib\site-packages\requests\api.py", line 58, in request
return session.request(method=method, url=url, **kwargs)
File "C:\Users\12611\AppData\Local\Programs\Python\Python36-32\lib\site-packages\requests\sessions.py", line 508, in request
resp = self.send(prep, **send_kwargs)
File "C:\Users\12611\AppData\Local\Programs\Python\Python36-32\lib\site-packages\requests\sessions.py", line 618, in send
r = adapter.send(request, **kwargs)
File "C:\Users\12611\AppData\Local\Programs\Python\Python36-32\lib\site-packages\requests\adapters.py", line 508, in send
raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='106.120.181.197', port=80): Max retries exceeded with url: /cpad_new/api/common/doQuery
(Caused by NewConnectionError('
由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。',))
网上查阅了很多资料,但是没有十分符合自己情况的。但是无意间看到一个帖子就是说自己的访问次数太过频繁,被ban了。那么,解决方法就来了。
如果我们使用except requests.exceptions.ConnectionError来进行捕捉这个异常,并在这个except异常处理语句中硬怼行不行?
具体思路如下:
try:
#你的爬取语句
except XXX:
time_sleep = 0
while True:
time.sleep(1)#自己随便定义多少秒
try:
#再次执行这次爬取语句
except XXX:
time_sleep = time_sleep + 1
if(tiem_sleep == 100)#自己随便定义多少次
print("你的网络可能的确出现问题了!!")
break
continue
#最后可以在这里再打印下出现连接异常时的信息,最后可以用来校验。我就是这么做的!
算是一个简单的分享。第一次写,以后还会锻炼自己的写作能力。望帮助到各位。不喜勿喷,谢谢