当爬虫遇上封IP?试试这些保命操作
搞爬虫的老铁们应该都懂,网站反爬机制越来越狠。有时候刚跑两分钟,IP就被拉黑了。这时候代理IP就是你的续命神器,今天手把手教你怎么用requests库玩转代理配置。
代理IP为什么能救命?
简单说就是金蝉脱壳。当网站封了你当前IP,通过代理IP切换新身份继续访问。好比打游戏被ban号就换小号,但要注意别用劣质代理,否则就像开挂被封得更快。
requests基础代理配置
直接上硬菜,最基础的代理配置长这样:
import requests
proxies = {
'http': 'http://用户名:密码@ipipgo代理地址:端口',
'https': 'http://用户名:密码@ipipgo代理地址:端口'
}
response = requests.get('目标网址', proxies=proxies)
注意这里要替换成ipipgo提供的真实代理信息。很多人栽在格式错误上,特别是密码含特殊符号时记得用urllib.parse.quote处理。
动态IP池才是王道
单IP反复用等于找死,这里推荐ipipgo的动态IP池服务。他们的API能实时获取最新代理,搭配这个代码模板:
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry
获取ipipgo的动态代理
def get_ipipgo_proxy():
api_url = "https://api.ipipgo.com/getproxy"
return requests.get(api_url).json()['proxy']
session = requests.Session()
retries = Retry(total=5, backoff_factor=1)
session.mount('http://', HTTPAdapter(max_retries=retries))
for _ in range(10):
try:
proxy = get_ipipgo_proxy()
response = session.get('目标网址', proxies={'http': proxy}, timeout=10)
print("成功请求:", response.status_code)
break
except Exception as e:
print("请求失败,自动切换IP...")
这个模板做了三件大事:自动重试、超时控制、异常处理。用ipipgo的轮换IP池,成功率能提升80%以上。
防封实战技巧
光有代理还不够,这些细节要注意:
坑点 | 解决方案 |
---|---|
请求头太假 | 用fake_useragent库随机生成 |
请求频率固定 | 随机延迟0.5-3秒 |
Cookie残留 | 每次请求清空cookies |
QA急救包
Q:代理IP用几次就失效?
A:这种情况八成是用了低质量代理,建议换成ipipgo的独享高匿代理,他们每个IP都有存活时间保障。
Q:明明用了代理还是被封?
A:检查是不是没关本地IP!在requests里加这个参数:proxies={'http': proxy, 'https': proxy}, verify=False
(开发环境用,生产环境建议配置证书)
Q:代理速度太慢怎么破?
A:ipipgo有专门的高速机房线路,选对应地区的节点。比如爬国内网站就选北京、上海机房,延迟能控制在200ms内。
终极建议
代理IP不是万能药,要配合伪装策略使用。就像玩吃鸡,光换衣服不够,还得注意走位和枪法。ipipgo的代理稳定性确实能打,但具体配置参数要根据目标网站灵活调整。遇到难搞的反爬,可以试试他们的定制代理方案,技术客服响应速度贼快。