【Python爬虫】MaxRetryError:报错Failed to establish a new connection: [Errno 11001] getaddrinfo failed‘))

在爬取网易云音乐网页时遇到MaxRetryError,问题源于HTTPSConnectionPool的连接失败。文章提到可以使用requests的HTTPAdapter设置最大重试次数来处理这种情况,同时为了应对反爬策略,还设置了代理IP和在headers中将连接设为关闭。
摘要由CSDN通过智能技术生成

在爬取网易云音乐的网页的时候,没爬完所有的数据,中途就遇到了问题如下: 

MaxRetryError: HTTPSConnectionPool(host='music.163.com', port=443): Max retries exceeded with url: /playlist?id=8308295708 (Caused by NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x0000017E79007A08>: Failed to establish a new connection: [Errno 11001] getaddrinfo failed')) 

有可能第一次获取某url的时候会失败,就需要失败重试(retry),这就跟max_retries有关。

(当然你也不知道会在哪一个url就会卡壳,然后报这个错。)

requests自带了一个传输适配器HTTPAdapter,导入语句如下:

from requests.adapters import HTTPAdapter

这个适配器使用了强大的urllib3,为requests提供了默认的HTTP和HTTPS交互。每当Session被初始化,就会有适配器附着在Session上,其中一个供HTTP使用,另一个供HTTPS使用。

这里截取部分代码如下:

// 反爬虫——设置代理IP
// python3.7+版本需要这个格式,否则报错(Not supported proxy scheme None)
proxy = {'https':'https://ip:port','http':'http://ip:port'}

for i in df['url']:  
    // 为每一个url请求创建一个session
    ses = requests.session()
    // 利用HTTPAdapter设置失败尝试次数max_retries
    ses.mount('http://',HTTPAdapter(max_retries=3))
    ses.mount('https://',HTTPAdapter(max_retries=3))

    time.sleep(1)  
    url = 'https://music.163.com' + i  
    response = ses.get(url=url, headers=headers, proxies=proxy)  

还需要在headers中设置连接“关闭”:

headers = {  
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
    'Connection': 'close'

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值