如何批量获取可用IP 详细教程与注意事项说明(进阶教程)

做网络测试、爬虫开发或者服务器部署时,经常需要一批能用的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轮换,效果更好。