python采集IP代理数据,防止数据采集IP被封情况

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

前言

嗨喽大家好呀~这里是爱看美女的茜茜呐

又到了学Python时刻~

为什么要IP代理

当采集数据, 批量采集数据, 请求速度过快, 网站可能会把你IP封掉 <你的网络进不去这个网站>

IP代理换一个IP, 再去采集请求数据

一. 抓包分析数据来源

1. 明确需求:

确定采集网站以及采集数据是什么

获取IP代理, 检测IP代理是否可用

dit = {
‘http’: ‘http://’ + IP:端口
}

2. 分析IP和端口号 这两个数据, 请求那个网站可以得到?

F12 或者 右键点击检查选择network 刷新网页

分析数据在哪里 --> 通过关键字<我们想要数据>搜索数据来源

请求 https://www.*****.com/free/ 获取 response 就可以得到我们想要IP和端口的数据

二. 代码实现步骤过程

  1. 发送请求, 模拟浏览器对于url地址发送请求

  2. 解析数据, 提取我们想要数据内容

  3. 保存数据, 把可用IP代理保存本地,IP代理检测

  4. 检测可用之后, 保存IP代理

代码展示

( 完整源码点击此处跳转跳转文末名片加入君羊找管理员小姐姐领取呀~ )

发送请求

请求链接

url = f'https://www.******.com/free/inha/1/'

模拟伪装 --> headers 请求头 字典数据类型

headers = {
    # User-Agent 用户代理 表示浏览器基本身份信息
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}
response = requests.get(url=url, headers=headers)

解析数据

三种解析方法

re直接对于字符串数据提取

re.findall(‘匹配什么数据’, ‘什么地方匹配’) 找到我们想要数据内容

从什么地方去匹配什么数据

response.text 里面去匹配 (.?) 其中 (.?) 这段内容就是我们要的数据

() 表示你要的数据, .*? 匹配规则 可以匹配任意字符(除了换行符\n)

IP_list = re.findall('<td data-title="IP">(.*?)</td>', response.text)
PORT_list = re.findall('<td data-title="PORT">(.*?)</td>', response.text)

css根据标签属性提取数据

list tbody tr td:nth-child(1) 定位标签元素

td:nth-child(1) 表示第一个td标签

td:nth-child(1)::text 表示提取第一个td标签里面文本数据

getall() 表示获取所有

IP_list = selector.css('#list tbody tr td:nth-child(1)::text').getall()
PORT_list = selector.css('#list tbody tr td:nth-child(2)::text').getall()

xpath根据标签节点提取数据

IP_list = selector.xpath('//*[@id="list"]//tbody/tr/td[1]/text()').getall()
PORT_list = selector.xpath('//*[@id="list"]//tbody/tr/td[2]/text()').getall()

for循环遍历提取数据 把列表里面元素 一个一个提取出来

for IP, PORT in zip(IP_list, PORT_list):
    dit = {
        'http': 'http://' + IP + ':' + PORT,
        'https': 'https://' + IP + ':' + PORT,
    }

print(dit)

检测IP代理是否可用, 请求一个网站携带上IP代理

try:
    # 携带IP代理发送请求
    response_1 = requests.get(url='https://www.*****.com/', headers=headers, proxies=dit, timeout=1)
    # response_1.status_code 获取状态码
    if response_1.status_code == 200:
        print(dit, '这个代理真润')
        use_list.append(dit)
except:
    print(dit, 'He tui~ 用不了')

保存

with open('代理https.txt', mode='w', encoding='utf-8') as f:
    f.write('\n'.join([str(i) for i in use_list]))

尾语

感谢你观看我的文章呐~本次航班到这里就结束啦 🛬

希望本篇文章有对你带来帮助 🎉有学习到一点知识~

躲起来的星星🍥也在努力发光你也要努力加油让我们一起努力叭。

最后宣传一下呀~👇👇👇更多源码、资料、素材、解答、交流皆点击下方名片获取呀👇👇👇

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: python