• Python获取免费代理IP,并全部测试一遍,结果大失所望


    前言

    为什么要IP代理:当采集数据, 批量采集数据, 请求速度过快, 网站可能会把你IP封掉 <你的网络进不去这个网站>
    IP代理换一个IP, 再去采集请求数据

    一. 抓包分析数据来源

    1. 明确需求:
    • 确定采集网站以及采集数据是什么
    • 获取IP代理, 检测IP代理是否可用
    dit = {
        'http': 'http://' + IP:端口
    }
    
    • 1
    • 2
    • 3
    2. 分析IP和端口号 这两个数据, 请求那个网站可以得到?
    • F12 或者 右键点击检查选择network 刷新网页
    • 分析数据在哪里 --> 通过关键字<我们想要数据>搜索数据来源

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

    二. 代码实现步骤过程

    1. 发送请求, 模拟浏览器对于url地址发送请求
    2. 解析数据, 提取我们想要数据内容
    3. 保存数据, 把可用IP代理保存本地,IP代理检测
    4. 检测可用之后, 保存IP代理

    代码的实现

    发送请求

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

    # 请求链接
    url = f'https://www.kuaidaili.com/free/inha/1/'
    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    解析数据

    三种解析方法

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

    • re.findall(‘匹配什么数据’, ‘什么地方匹配’) 找到我们想要数据内容
      从什么地方去匹配什么数据
      从 response.text 里面去匹配 (.?) 其中 (.?) 这段内容就是我们要的数据
    • () 表示你要的数据, .*? 匹配规则 可以匹配任意字符(除了换行符\n)
    IP_list = re.findall('(.*?)', response.text)
    PORT_list = re.findall('(.*?)', response.text)
    
    • 1
    • 2

    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()
    
    • 1
    • 2

    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()
    
    • 1
    • 2

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

    for IP, PORT in zip(IP_list, PORT_list):
        dit = {
            'http': 'http://' + IP + ':' + PORT,
            'https': 'https://' + IP + ':' + PORT,
        }
    
    print(dit)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

    try:
        # 携带IP代理发送请求
        response_1 = requests.get(url='https://www.baidu.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~ 用不了')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    保存

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

    因为只是示范,所以一共获只取了45个,然后没一个是可以用的

    👇问题解答 · 源码获取 · 技术交流 · 抱团学习请联系👇
  • 相关阅读:
    数据结构编写程序出现syntax error before '&' token怎么修改
    汽车网络安全渗透测试概述
    干货,分布式数据库在金融核心场景的落地实践|腾讯云数据库
    0817(033天 线程/进程04 线程安全)
    Spring Cloud Alibaba组件Nacos
    时序预测 | MATLAB实现TCN-LSTM时间卷积长短期记忆神经网络时间序列预测
    基于微信小程序和安卓的多功能备忘录管理系统APP
    SpringBoot+Vue实现前后端分离的大学生志愿者管理系统
    python tkinter Text文本框显示行数且同步滚动
    【C#】Redis在net core下使用教程
  • 原文地址:https://blog.csdn.net/m0_48405781/article/details/127808339