前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python构建代理池,突破IP的封锁爬取海量数据

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

作者头像
龙哥
发布2021-08-05 11:28:58
5670
发布2021-08-05 11:28:58
举报
文章被收录于专栏:Python绿色通道
代码语言:javascript
复制

在之前的文章中给大家分享了日常我在爬虫过程中使用的一些技巧。

其中代理ip就是其中技巧之一,那么我们如何快速获得ip呢,今天我就带大家使用爬虫来获取免费的ip。

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

代码语言:javascript
复制
http://www.ip3366.net/?stype=1&page=1

2. 我们打开浏览器模式模式分析页面看到这些ip信息都位于tr标签内,所以我么可以使用xpath来获取这些信息。

代码语言:javascript
复制
#获取当前页面10个ip数据
ips = selector.xpath('//*[@id="list"]/table/tbody/tr')
print(len(ips))
'''
10
'''

3. 获取到当前页面所有ip信息之后我们就可以使用for循环获取tr标签内部具体的ip和端口号。

代码语言:javascript
复制
# 获取端口和IP
for 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 3256
49.87.44.221 9999
42.177.142.239 9999
42.177.141.141 9999
42.176.134.43 9999
42.176.134.212 9999
49.71.142.114 9999
49.87.221.46 9999
49.87.221.120 9999
49.87.221.61 9999
'''

4. 接下来就使用for循环获取十个页面的100条数据。

代码语言:javascript
复制
 for page in range(1, 10+1):
        print(f'-------正在爬取第{page}页数据-------')
        url = f'http://www.ip3366.net/?stype=1&page={page}'

5. 测试可用性,现在所有的ip都已经获取到了,能不能用还是未知数,所以我们试着有这些ip登陆一下百度页面,检测其可用性。

代码语言:javascript
复制
   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, '检测通过')

检测结果如下:

测了两百个,才找到两个能用的

因为这些代理每小时都在更新,所以没事多跑两遍程序,总会获取到你想的ip的。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python绿色通道 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档