帮助中心 > 行业资讯 > 如何检测代理IP有效性?(附代码)
发布时间: 2021-05-24

提供免费代理 IP 的网页有很多,但并不是所有的免费代理 IP 都是有效的,甚至更不是匿名IP(即获取远程访问用户的 IP 地址是代理服务器的 IP 地址,不是用户本地真实的 IP 地址)。所以在使用IP前,我们需要对这个 IP 进行检测。

具体该如何实现呢?检测免费代理 IP 是否可用时,首先需要读取保存代理 IP 的文件,然后对代理 IP 进行遍历并使用免费的代理 IP 发送网络请求,而请求地址可以使用查询 IP 位置的网页。如果网络请求成功说明代理 IP 可以使用,并且还会返回当前代理 IP 的匿名地址。代码如下:


# -*- coding: UTF-8 -*-

"""


import requests  # 导入网络请求模块

import pandas as pd  # 导入pandas模块

from lxml import etree  # 导入HTML解析模块


ip_table = pd.read_excel("ip.xlsx")  # 读取代理IP文件内容

ip_list = ip_table["ip"]  # 获取代理IP信息

# 头部信息

headers = {

    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.193 Safari/537.36"

}

# 循环遍历代理IP并通过代理发送网络请求

for ip in ip_list:

    # 这里添加了http和https两个代理,这样写是因为有些网页采用 http协议,有的则采用https协议,

    # 为了在这两类网页上都能顺利使用代理,所以一般都同时写上。当然,如果确定了某网页的请求类型,可以只写一种

    proxies = {'http': 'http://{ip}'.format(ip=ip),

               'https': 'https://{ip}'.format(ip=ip)}

    try:

        response = requests.get("https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=1&tn=baidu&wd=ip%E5%9C%B0%E5%9D%80",

                                headers=headers, timeout=3, proxies=proxies)

        if response.status_code == 200:  # 判断是否请求成功,请求成功说明代理IP可用

            response.encoding = "utf8"  # 进行编码

            html = etree.HTML(response.text)  # 解析HTML

            info = html.xpath('//*[@id="1"]/div[1]/div[1]/div[2]/table//tr/td//text()')[1:]

            info = " ".join(info).replace("\xa0", "").strip().replace("本机IP:", "本机IP: ")

            print(info)  # 输出当前IP匿名信息

    except Exception as e:

        # print(e)  # 打印异常信息

        pass

天启HTTP代理提供专业爬虫代理IP,高度匿名安全稳定,还有专业技术人员在线指导,欢迎大家免费测试!

3000IP注册就送

在线咨询

专属客户经理

电话:13260755168

微信二维码

商务合作

关注微信公众号

各种优惠活动,最先获取

公众号

置顶