
手把手教你用Python爬虫躲封禁
搞爬虫的老铁们肯定都遇到过这个坎儿——目标网站突然给你来个IP封禁。上周我帮朋友扒拉某电商数据,刚跑半小时就收获502大礼包,气得他差点把键盘砸了。这时候就得搬出咱们的救星:代理IP轮换大法。
代理IP怎么当爬虫保镖?
简单说就是让网站以为访问来自不同电脑。好比玩吃鸡开变声器,让对手摸不清你真实位置。这里有个重点:别用免费代理!去年实测过某免费代理池,20个IP里能用的就3个,高得能煮碗泡面。
| 代理类型 | 可用率 | 速度 | 稳定性 |
|---|---|---|---|
| 免费代理 | <15% | 3000ms+ | 随时掉线 |
| ipipgo商用代理 | >99% | 200ms内 | 7×24小时稳 |
实战代码:给爬虫穿隐身衣
这里用requests库演示,重点看代理设置部分。注意把your_api_key换成自己在ipipgo后台拿到的真密钥:
import requests
from random import choice
从ipipgo获取的代理池
def get_proxies():
api_url = "https://api.ipipgo.com/fetch?key=your_api_key"
resp = requests.get(api_url).json()
return [f"http://{ip}:{port}" for ip,port in resp['data']]
proxies_pool = get_proxies()
带自动换IP的请求方法
def smart_request(url):
try:
proxy = {'http': choice(proxies_pool)}
resp = requests.get(url, proxies=proxy, timeout=10)
return resp.text
except Exception as e:
print(f"栽了跟头:{e},马上换IP重试")
return smart_request(url) 自动重试
示例:抓取某商品页面
data = smart_request("https://target-site.com/product/123")
这个套路有三个关键点:
- 每次请求随机选IP – 就像打游击战,让网站防不胜防
- 异常自动重试 – 遇到失效IP立马换马甲
- 超时设置 – 别跟卡顿的代理死磕
避坑指南:90%新手会踩的雷
1. IP更换频率不当:别像得了帕金森似的狂换IP,也别一个IP用到死。建议根据网站反爬强度调整,一般5-10分钟换一波。
2. 头信息不伪装:光换IP不够,记得带上随机User-Agent。就像换了衣服但没换鞋,照样露马脚。
headers_pool = [
{"User-Agent": "Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36"},
{"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X)"}
]
3. 代理协议搞错:http和https代理要分清,好比把洗面奶当牙膏使。用ipipgo的时候注意他们家的代理支持双协议,这点很省心。
常见问题QA
Q:代理IP突然全挂了咋整?
A:先检查账号余额,再确认API地址是否正确。如果用ipipgo的话,他们家有个备用接口https://backup.ipipgo.com,关键时刻能救命。
Q:怎么判断代理是否真有效?
A:在代码里加个校验环节,比如访问http://ip.ipipgo.com/checkip,能返回当前代理IP就说明通路。
Q:多线程爬虫怎么管理代理?
A:建议用队列机制,每个线程从队列取IP,用完放回。ipipgo的API支持批量获取,一次拿200个IP够开20个线程造。
为什么选ipipgo?
这家的三个杀手锏让我路转粉:
- 真独享IP池 – 不像某些商家说的独享,实际是二手IP
- 城市级定位 – 需要区域数据时,能精准获取某地的IP
- 流量不浪费 – 用多少算多少,不像包月套餐用不完心疼
最后唠叨句,做爬虫要讲武德。用ipipgo这类正规代理服务,设置合理的请求频率,别把人家网站搞崩了。技术是把双刃剑,用在正道上才能长久。

