Python 代理IP检测 匿名性 有效性

作为一个python小白,到处踩坑是家常便饭,经常为了一个问题,花费几个小时,到处百度,谷歌找解决方案。有些问题对很多IT高手来说是小儿科的事儿,不屑去写,所以每次翻看了几十篇文章才终于找到自己想要的答案,运行成功的那一刹那,真的泪流满面啊。次数多了,也就有了想把遇到的坑写下来,留个纪念的想法。

Python一大功能就是写爬虫,使用代理IP,是绕不过的坑,代理IP除了使用有效性以外,最重要的一点就是匿名性,碰到透明代理,把你的信息全部转发出去,就一点意义都没有了。

以下这个检测方法原理是通过代理连接http://icanhazip.com/这个网站,通过网站返回的值与使用的代理IP做比较来确定是否匿名。

连接icanhazip网站,返回IP地址,如图所示:


Python 代理IP检测 匿名性 有效性_第1张图片
微信图片_20190324191432.png

此处的坑是:网站返回的信息除了代理IP,还有一行空行,需要使用strip()函数去除空行

写法一
代理IP来源:自建IP代理池
数据格式:TXT格式
每次提取数量:随机提取1个
代码如下:

def confirm(self):
    url = "http://XXX.XXX.XXX.XXX:5010/get/" #自建代理IP池提取的IP,可以替换成自己的。
    r = requests.get(url).text  #获得代理IP
    print(r)
    proxy_info = r.split(':') #把IP和PORT拆分,生成列表
    print(proxy_info)
    proxy_ip = proxy_info[0] #从列表中,取第一个值作为IP
    proxy_port = proxy_info[1] #从列表中,取第二个值作为PORT
    thisProxy = "http://" + proxy_ip + ':' + str(proxy_port)
    # 使用取出的IP和PORT,重组成完整的代理
    print(thisProxy)
    requests.adapters.DEFAULT_RETRIES = 2 #设置请求数
    nnn=requests.get(url="http://icanhazip.com/",timeout=8,proxies={"http":thisProxy}).text
    #通过代理IP发出连接请求
    return_info=nnn.strip()
    #网站返回具体信息(IP),此处有坑!ICANHAZIP网站返回的信息除了IP,还会多一行空行,需要strip()函数去除空行
    print(return_info)
    if proxy_ip == return_info:
    #用代理IP(不含PORT)和返回的IP做比较,一致为有效,否则为无效
        print("代理IP:'" + thisProxy + "'有效!")
    else:
        print("代理IP无效!")

执行结果如下:


Python 代理IP检测 匿名性 有效性_第2张图片
微信截图_20190324193722.png

写法二:
代理IP来源:某收费代理
数据格式:JSON格式
每次提取数量:随机提取1个
代码如下:

def confirm(self):
    url = "http://XXX.XXXXX.XXXXXX.com/proxy/api/get_ip_bs?appKey=14737f96f82b4f4b94c0876f0f922262&count=1&expiryDate=0&format=1&newLine=2"
    r = requests.get(url)
    print(r.text)
    proxy_ip = r.json()['msg'][0]['ip']
    print(proxy_ip)
    proxy_port = r.json()['msg'][0]['port']
    thisProxy = "http://" + proxy_ip + ':'+ str(proxy_port)
    print(thisProxy)
    requests.adapters.DEFAULT_RETRIES = 3
    nnn=requests.get(url="http://icanhazip.com/",timeout=8,proxies={"http":thisProxy}).text
    return_info=nnn.strip()
    print(return_info)
    if proxy_ip == return_info:
        print("代理IP:'" + thisProxy + "'有效!")
    else:
        print("代理IP无效!")

为了查看每步代码的正确性,多处使用print()打印结果,代码也未优化,只提供了思路,实际使用可以自行调整优化,希望能给大家带来帮助。

你可能感兴趣的:(Python 代理IP检测 匿名性 有效性)