Python 采集免费代理,并检测其是否可用

简介: 本次案例实战用到的 Python 第三方模块是 `requests` 和 `lxml`,从技术难度的角度看属于入门级爬虫。
本篇博客将采集互联网中公开代理 IP,并通过 IP 检测站点检测代理的可用性。
未来该内容将会被集成到 爬虫训练场 中。

Python 采集免费代理 IP

模块准备与目标站点说明

本次案例实战用到的 Python 第三方模块是 requestslxml,从技术难度的角度看属于入门级爬虫。

目标站点为:kuaidaili.com,其每日更新部分高匿名代理,可用于测试。

实战采集

先看一下目标页面代码采集的完整案例,然后再进行分析。

def get_proxy_list(i):
    url = f"https://www.kuaidaili.com/free/inha/{i}/"

    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.100 Safari/537.36"
    }
    response = requests.request("GET", url, headers=headers)
    res = []
    elements = etree.HTML(response.text)
    type_dct = {
        "HTTP": "http://",
        "HTTPS": "https://"
    }
    data_list = elements.xpath("//tbody/tr")
    for data in data_list:
        ip = data.xpath("./td[1]/text()")[0]
        port = data.xpath("./td[2]/text()")[0]
        type = data.xpath("./td[4]/text()")[0]
        res.append(type_dct[type] + ip + ':' + port)
    return res

get_proxy_list() 函数接收页码参数,将其拼接到 url 中,然后使用 requests.request() 方法构造请求,这里直接使用 requests.get() 也是可以的。

得到数据相应之后,直接采用 etree.HTML(response.text) 进行格式化操作,然后通过 xpath 将目标信息提取出来,存放到 res 列表中进行返回。

代理 IP 可用性检测

对接站点

检测代理 IP 是否可以,我们会使用到下述两个站点:

直接访问上述站点,都会得到如下内容,即展示你本地 IP 信息。

我们接下来通过 requests 模块设置代理 IP 访问上述站点,查看代理 I 怕是否可用。

def check(proxy):
    href = 'https://ipv4.icanhazip.com'
    # href = 'http://httpbin.org/ip'
    if 'https' in proxy:
        proxies = {'https': proxy}
    else:
        proxies = {'http': proxy}
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4396.0 Safari/537.36'
    }
    try:
        r = requests.get(href, proxies=proxies, timeout=3, headers=headers)
        print(r.content)
        if r.status_code == 200:
            return True
    except:
        return False

上述代码最核心的是 requests.get(),其中 proxies 参数设置为代理,timeout 设置请求超时时间,最后修改 main 入口函数部分代码。

if __name__ == '__main__':
    for i in range(1, 5):

        proxy_list = get_proxy_list(i)

        print(proxy_list)
        for p in proxy_list:
            print(p, check(p))

再次运行代码,得到代理 IP 的状态。

如何代理 IP 可用,返回 True,否则返回 Flase。

实战中,会出现下述问题。

为何使用代理 IP,依旧展示原 IP

这个其实很好解释,免费代理并不是高匿名的,虽然免费站点会标记 IP 为高匿名代理,但这个不绝对。

如果我们使用的不是【真】高匿代理,那展示的就是你的真实 IP,检测代理 IP 还可以用 httpbin.org/ip ,这个站点没有设置反代理。

如果希望实现绝对的安全,可以使用 VPN 或者代理服务器进行请求,结果就会展示为你的代理 IP。

📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
👍 阅读完毕,可以点点小手赞一下
🌻 发现错误,直接评论区中指正吧
📆 橡皮擦的第 849 篇原创博客
相关文章
|
2月前
|
机器学习/深度学习 监控 TensorFlow
使用Python实现深度学习模型:智能农业病虫害检测与防治
使用Python实现深度学习模型:智能农业病虫害检测与防治
223 65
|
2月前
|
机器学习/深度学习 算法 机器人
使用 Python TorchRL 进行多代理强化学习
本文详细介绍了如何使用TorchRL库解决多代理强化学习(MARL)问题,重点讨论了在多代理环境中应用近端策略优化(PPO)。通过使用VMAS模拟器,该文展示了如何在GPU上并行训练多机器人系统,使其在避免碰撞的同时到达目标。文章涵盖了依赖项安装、PPO原理、策略与评论家网络设计、数据收集及训练循环,并强调了TorchRL在简化开发流程、提升计算效率方面的优势。无论是集中式还是分布式评论家配置,TorchRL均能有效支持复杂的MARL研究与实践。
52 5
使用 Python TorchRL 进行多代理强化学习
|
1月前
|
机器学习/深度学习 数据采集 算法
时间序列结构变化分析:Python实现时间序列变化点检测
在时间序列分析和预测中,准确检测结构变化至关重要。新出现的分布模式往往会导致历史数据失去代表性,进而影响基于这些数据训练的模型的有效性。
96 1
|
9天前
|
机器学习/深度学习 TensorFlow 算法框架/工具
使用Python实现深度学习模型:智能质量检测与控制
使用Python实现深度学习模型:智能质量检测与控制 【10月更文挑战第8天】
102 62
使用Python实现深度学习模型:智能质量检测与控制
|
29天前
|
Docker Python 容器
python检测docker compose文件是否正确
python检测docker compose文件是否正确
|
29天前
|
机器学习/深度学习 数据采集 网络安全
使用Python实现深度学习模型:智能网络安全威胁检测
使用Python实现深度学习模型:智能网络安全威胁检测
108 5
|
1月前
|
编解码 Python Windows
python有没有包 可以检测 这个视频是否可以播放
python有没有包 可以检测 这个视频是否可以播放
|
8天前
|
运维 安全 网络协议
Python 网络编程:端口检测与IP解析
本文介绍了使用Python进行网络编程的两个重要技能:检查端口状态和根据IP地址解析主机名。通过`socket`库实现端口扫描和主机名解析的功能,并提供了详细的示例代码。文章最后还展示了如何整合这两部分代码,实现一个简单的命令行端口扫描器,适用于网络故障排查和安全审计。
14 0
|
10天前
|
数据处理 Python
Python读取大文件的“坑“与内存占用检测
Python读取大文件的“坑“与内存占用检测
25 0
|
11天前
|
安全 Java Python
基于python-django的Java网站全站漏洞检测系统
基于python-django的Java网站全站漏洞检测系统
23 0