当爬虫撞上IP封锁?试试这招绝地求生
老铁们做爬虫最怕啥?不是反爬机制,不是验证码,最要命的是突然蹦出来的IP被封提示!我有个朋友做电商比价,连续三天被某平台封了二十多个IP,急得直薅头发。后来用了个绝招——代理IP轮换,硬是把数据给薅下来了。
import requests
from itertools import cycle
ip_pool = [
'123.123.123.123:8888',
'124.124.124.124:9999',
...更多ipipgo提供的代理IP
]
proxy_cycler = cycle(ip_pool)
for page in range(1, 101):
current_proxy = next(proxy_cycler)
proxies = {
'http': f'http://{current_proxy}',
'https': f'https://{current_proxy}'
}
response = requests.get(url, proxies=proxies)
处理返回的JSON数据...
代理IP的正确打开姿势
很多新手容易犯的错就是把代理当万能钥匙。这里给大伙儿说个诀窍:IP质量比数量重要。之前用免费代理踩过坑,十个IP九个超时,剩下那个还被目标网站拉黑。
推荐用ipipgo的动态住宅代理,他们家IP池每天更新,实测成功率能到95%往上。关键是要学会智能切换策略,别傻乎乎地每个请求都换IP,得根据响应状态码动态调整。
JSON数据处理的三大玄机
拿到数据别急着解析,先看这三个地方:
- 响应头里的Content-Type是不是application/json
- 数据有没有被gzip压缩(遇到过返回乱码的惨案)
- 关键字段有没有动态加密(比如价格变成Base64编码)
import json
from json.decoder import JSONDecodeError
try:
data = response.json()
except JSONDecodeError:
处理异常情况
if 'gzip' in response.headers.get('Content-Encoding',''):
data = json.loads(response.content.decode('utf-8'))
实战中的骚操作
说个真实案例:某旅游网站的反爬会检测IP的地理位置。用ipipgo的城市级定位代理,把请求IP和请求参数里的城市ID匹配,成功率直接从40%飙升到90%!
场景 | 推荐代理类型 | 切换频率 |
---|---|---|
普通数据采集 | 数据中心代理 | 每5分钟 |
高防网站 | 住宅动态代理 | 每次请求 |
常见问题排雷指南
Q:代理IP用着用着就失效?
A:八成是用了劣质代理,选ipipgo的实时验证代理池,每次请求前自动检测IP活性
Q:返回的数据总是不完整?
A:检查请求头里的Accept-Encoding,有些网站会根据这个返回不同格式数据
Q:代理速度慢到怀疑人生?
A:别用免费代理!ipipgo的独享高速通道实测延迟在200ms以内
最后给个忠告:做爬虫就像打游击战,别硬刚,要智取。合理搭配代理IP和请求策略,配合ipipgo的智能调度系统,你会发现很多看似铜墙铁壁的网站,其实漏洞比筛子还多…