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

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

本篇博客将采集互联网中公开代理 IP并通过 IP 检测站点检测代理的可用性。
未来该内容将会被集成到 爬虫训练场 中。

💰学习目录💰

Python 采集免费代理 IP

模块准备与目标站点说明

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

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

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

实战采集

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

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 列表中进行返回。

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

代理 IP 可用性检测

对接站点

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

  • https://ipv4.icanhazip.com/
  • http://httpbin.org/ip

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

Python 采集免费代理并检测其是否可用
我们接下来通过 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。

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

实战中会出现下述问题。

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

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

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

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

📢📢📢📢📢📢
💗 你正在阅读 【梦想橡皮擦】 的博客
👍 阅读完毕可以点点小手赞一下
🌻 发现错误直接评论区中指正吧
📆 橡皮擦的第 849 篇原创博客

全网 6000+人正在学习的 爬虫专栏 👇👇👇👇

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