本脚本使用了 烂笔头 - j_hao104 提供的API接口
原作者官网:烂笔头 - j_hao104的博客 (spiderpy.cn)
本次脚本改良了以下:
- 避免重复测试已经核验代理有效性的代理(减少对测试请求网站的服务器压力);
- 增加循环次数,防止api返回代理重复(作者的API接口太容易出现大量雷同的);
- 增加双重检验程序:通过状态码(status_code == 200)+ IP请求地址确认(只要返回IP不是我本地就行);
- 优化代码,毕竟现在大部分网站都是https,很少会有http了(用http肯定能访问https,防止部分以为成功代理,但其实并不是真实代理);
- UA随机模拟部分代码可以删除,不影响代码整体;
运行结果:
本地IP:117.***.***.102
ipCallback({ip:"81.68.254.55"})
代理 81.68.254.55:3128 请求成功
ipCallback({ip:"139.9.64.238"})
代理 139.9.64.238:443 请求成功
====================
全部检索完毕!
可用IP代理如下:
['81.68.254.55:3128', '139.9.64.238:443']
====================
>>>
脚本代码:
import requests
from sqlalchemy import all_
from fake_useragent import UserAgent
def get_proxy():
return requests.get("http://demo.spiderpy.cn/get/").json()
def confirm_proxy():
ip = requests.get('http://httpbin.org/ip')
my_ip = (ip.json())["origin"]
print("本地IP:{}".format(my_ip))
retry_count = 100
proxies_list = []
false_list = []
while retry_count > 0:
retry_count -= 1
proxy = get_proxy().get("proxy")
#print(proxy)
if proxy in proxies_list or proxy in false_list:
#print("该代理 {} 已经在列表中,跳过!".format(proxy))
continue
try:
headers= {'User-Agent':str(UserAgent(verify_ssl=False).random)}
html = requests.get('https://www.taobao.com/help/getip.php', proxies={"https": "https://{}".format(proxy)}, headers=headers, timeout=30)
print(html.text)
if html.status_code == 200:
if (proxy.split(":")[0] in html.text) != my_ip:
print("代理 {} 请求成功".format(proxy))
proxies_list.append(proxy)
except Exception:
false_list.append(proxy)
#print("代理 {} 请求失败".format(proxy))
return proxies_list
sumlist = confirm_proxy()
print("="*20)
print("全部检索完毕!\n可用IP代理如下:")
print(sumlist)
print("="*20)