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

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'

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐