Python构建代理池,突破IP的封锁爬取海量数据

今天带大家使用爬虫来获取免费的ip 。

1. 打开网站首页 , 可以看到总共有十页数据 , 总共100条ip记录 。咱们的目的很简单 , 就是要这100条ip和对应端口号 。完了我们再去筛选那些ip是可用的 。

Python构建代理池,突破IP的封锁爬取海量数据

文章插图
 
http://www.ip3366.net/?stype=1&page=1
2. 我们打开浏览器模式模式分析页面看到这些ip信息都位于tr标签内 , 所以我么可以使用xpath来获取这些信息 。
 
Python构建代理池,突破IP的封锁爬取海量数据

文章插图
 
#获取当前页面10个ip数据ips = selector.xpath('//*[@id="list"]/table/tbody/tr')print(len(ips))'''10'''
3. 获取到当前页面所有ip信息之后我们就可以使用for循环获取tr标签内部具体的ip和端口号 。
# 获取端口和IPfor ip in ips: ip_num = ip.xpath('td[1]/text()').get() # ip port_num = ip.xpath('td[2]/text()').get() # port print(ip_num, port_num)'''49.70.151.180 325649.87.44.221 999942.177.142.239 999942.177.141.141 999942.176.134.43 999942.176.134.212 999949.71.142.114 999949.87.221.46 999949.87.221.120 999949.87.221.61 9999'''
4. 接下来就使用for循环获取十个页面的100条数据 。
for page in range(1, 10+1): print(f'-------正在爬取第{page}页数据-------') url = f'http://www.ip3366.net/?stype=1&page={page}'
Python构建代理池,突破IP的封锁爬取海量数据

文章插图
 
5. 测试可用性 , 现在所有的ip都已经获取到了 , 能不能用还是未知数 , 所以我们试着有这些ip登陆一下百度页面 , 检测其可用性 。
for ip in ip_list: try: response = requests.get(url='https://www.baidu.com', proxies=ip, timeout=2) if response.status_code == 200: use_proxy.Append(ip) except Exception as e: print(f'当前为第{count}个代理ip:', ip, '请求超时, 检测不合格!!!') else: print(f'当前为第{count}个代理ip:', ip, '检测通过')
检测结果如下:

Python构建代理池,突破IP的封锁爬取海量数据

文章插图
【Python构建代理池,突破IP的封锁爬取海量数据】 
因为这些代理每小时都在更新 , 所以没事多跑两遍程序 , 总会获取到你想的ip的 。




    推荐阅读