做网络测试、爬虫开发或者服务器部署时,经常需要一批能用的IP地址。比如你在公司做自动化脚本调试,本地跑起来没问题,一上生产环境就被封IP,这时候就得靠批量获取可用IP来轮换使用。
从公开代理网站抓取
网上有不少免费代理网站,像西刺、快代理、无忧代理都提供实时更新的IP列表。可以直接手动复制,也可以写个简单脚本自动抓。
比如用Python配合requests和BeautifulSoup抓西刺的高匿代理:
import requests
from bs4 import BeautifulSoup
url = "https://www.xicidaili.com/nn/"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, 'html.parser')
trs = soup.find_all('tr')[1:]
for tr in trs:
tds = tr.find_all('td')
if len(tds) > 5:
ip = tds[1].text.strip()
port = tds[2].text.strip()
print(f"{ip}:{port}")
抓下来的数据得验证是否真能用。可以加个检测函数,访问一个简单网页看通不通:
def check_ip(ip, port):
try:
proxies = {
"http": f"http://{ip}:{port}",
"https": f"https://{ip}:{port}"
}
resp = requests.get("http://httpbin.org/ip", proxies=proxies, timeout=5)
if resp.status_code == 200:
return True
except Exception as e:
return False
return False
利用云服务商API动态生成
如果你有预算,更稳定的方式是用云服务器搭代理池。比如阿里云、腾讯云支持通过API批量创建ECS实例,每个实例分配独立公网IP。
开通几个轻量服务器,装上Squid或者用SSH反向代理,再写个脚本统一管理这些IP出口。虽然成本比免费代理高,但稳定性和速度强太多,适合关键任务。
使用第三方代理平台接口
很多商业代理服务提供API直连,比如芝麻代理、讯代理、阿布云。注册后拿到key,发个请求就能返回一批可用IP,几分钟换一次。
import requests
api_url = "http://api.zhimaruanjian.com/getproxy"
params = {
"apikey": "your_api_key_here",
"num": "10"
}
resp = requests.get(api_url, params=params)
if resp.status_code == 200:
proxy_list = resp.json().get("proxies")
for p in proxy_list:
print(p) # 格式通常是 ip:port
这类服务按流量或时间计费,单价不高,适合中小规模项目。而且他们自己维护IP池,坏掉的会自动剔除,省心不少。
自己搭建IP池服务
进阶玩法是把上面几种方式整合成一个自动化的IP池系统。可以用Redis存IP列表,加个定时任务去抓取+检测,再对外提供HTTP接口取可用IP。
这样你的爬虫或者其他程序只需要调用本地接口,就能拿到最新可用的IP,不用每次都重新筛选。
实际用的时候,别一股脑全发请求,容易被识别为攻击。加点随机延时,搭配User-Agent轮换,效果更好。