Web数据爬虫使用线程池发送大量请求报错:HTTPConnectionPool (host:XX)Max retries exceeded with url

问题:往往在发送大量请求的时候,经常会报出这样一个错误:HTTPConnectionPool (host:XX)Max retries exceeded with url
 
原因:
1、每次数据传输前客户端要和服务器建立TCP连接,为节省传输消耗,默认keep-alive,即连接一次,传输多次。如果连接迟迟不断开的话,连接池满后无法产生新的链接对象,导致请求无法发送。
2、ip被封
3、请求频率太高
 
解决:
1、设置请求头中的Connection的值为close,表示每次请求成功之后断开连接。
2、更换请求ip
3、每次请求之前使用sleep设置等待间隔

修改Connection为close,默认为keep-alive,这个你自己随便找个网址看一下,基本都是keep-alive。我们需要修改为close:

headers={
    "Connection":"close",
    "User-Agent":"Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"
}

发表评论