
立即暂停爬虫并检查封禁程度
当发现代理IP被封,第一反应不是急着换IP,而是立即停止所有爬虫请求。继续发送请求只会让封禁更严重。先通过简单的测试判断封禁类型:是完全无法连接,还是返回特定的错误码(如403、429),或是返回验证页面。不同的封禁程度需要不同的应对策略。
你可以用curl命令快速测试当前IP的状态:
curl -I --connect-timeout 10 -x http://[代理IP]:[端口] http://目标网站.com
如果返回403或直接超时,说明IP可能被彻底封禁。如果返回200但实际访问时出现验证码,说明触发了频率限制,IP还有救。
快速切换优质代理IP池
确认IP被封后,最直接的解决方案就是更换IP。但随便找几个免费代理往往解决不了问题,因为这些IP可能早已被标记。这时候需要一个高质量、大规模的代理IP服务。
以ipipgo的动态住宅代理为例,其IP资源总量超过9000万,覆盖220多个国家和地区。这种规模的IP池意味着:
- 单个IP被封后可以立即切换到池中其他IP
- IP来自真实家庭网络,被识别为代理的风险更低
- 支持按需设置IP更换频率,避免频繁访问触发警报
在代码层面,你需要实现智能的IP轮换机制。以下是一个简单的Python示例:
import requests
from itertools import cycle
ipipgo代理列表(示例)
proxies_list = [
'http://user:pass@proxy1.ipipgo.com:port',
'http://user:pass@proxy2.ipipgo.com:port',
...更多代理
]
proxy_pool = cycle(proxies_list)
def make_request(url):
proxy = next(proxy_pool)
try:
response = requests.get(url, proxies={"http": proxy, "https": proxy}, timeout=10)
return response
except:
当前代理失败,自动切换下一个
return make_request(url)
调整请求策略降低被封风险
单纯更换IP不够,必须调整爬虫行为模式。目标网站通常通过以下特征识别爬虫:
- 请求频率过高且规律
- User-Agent单一
- 不执行JavaScript
- 忽略Cookie和会话状态
建议实施以下策略:
- Intervalle de demande de randomisation:不要在固定时间间隔发送请求,加入随机延迟
- 轮换User-Agent:模拟不同浏览器和设备
- Simuler le comportement d'un utilisateur réel:包括页面停留时间、滚动操作等
- 控制并发数量:避免同时发起过多请求
对于需要高匿名的场景,ipipgo的静态住宅代理可能更适合,因为它们是长期稳定的真实住宅IP,更难被识别为代理。
建立IP健康监控体系
预防胜于治疗。建立一个简单的IP健康检查系统,可以提前发现问题:
- 定期测试代理IP的连通性和响应速度
- 记录每个IP的成功请求率和错误类型
- 设置阈值,自动淘汰表现不佳的IP
这样可以在IP完全被封前就进行更换,保证爬虫任务的连续性。
Foire aux questions QA
问:为什么换了IP还是很快被封?
答:可能原因有:1)新IP质量不高,早已被标记;2)爬虫行为模式没有改变,依然容易被识别;3)目标网站加强了防护。建议使用ipipgo这类高质量住宅IP,并优化请求策略。
问:静态住宅代理和动态住宅代理哪个更适合爬虫?
答:动态住宅代理适合需要频繁更换IP的大规模采集,ipipgo的动态住宅IP池庞大,自动轮换方便。静态住宅代理适合需要稳定会话的长期任务,如监控类应用。根据具体需求选择。
问:如何判断代理IP是否真的来自住宅网络?
答:真正的住宅IP在IP数据库中被标记为ISP或住宅类型。ipipgo的所有住宅代理都来自真实的家庭网络资源,可以通过第三方IP查询工具验证。
问:除了换IP,还有什么方法可以恢复被封的爬虫?
答:可以尝试:1)降低请求频率,模拟人类操作间隔;2)完善请求头信息,包括Referer、Accept-Language等;3)使用会话保持,模拟完整用户访问流程。但这些方法通常需要配合IP更换使用。

