手把手教你用代理IP绕过反爬机制
搞网络爬虫的兄弟们都懂,最头疼的就是目标网站的反爬系统。上周我爬某电商平台数据时,刚跑半小时IP就被封了。这时候就需要代理IP来救场,原理就像戴面具参加化妆舞会——网站看到的都是不同面孔。
推荐用ipipgo动态住宅代理,他们家IP池子够大,我实测连续采集6小时没触发封锁。重点说下怎么在Requests里配置代理:
import requests
proxies = {
'http': 'http://username:password@gateway.ipipgo.com:9020',
'https': 'http://username:password@gateway.ipipgo.com:9020'
}
response = requests.get('https://target-site.com', proxies=proxies, timeout=10)
注意这里要用用户名密码认证方式,比白名单验证更灵活。ipipgo后台能自助生成API提取链接,建议每次请求随机选不同出口IP。
代理IP实战避坑手册
新手常见三个坑:①没处理SSL证书验证 ②超时设置不合理 ③IP切换频率不当。这里分享我的配置文件:
from requests.adapters import HTTPAdapter
session = requests.Session()
adapter = HTTPAdapter(max_retries=3, pool_connections=100)
session.mount('http://', adapter)
session.mount('https://', adapter)
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36',
'Accept-Language': 'zh-CN,zh;q=0.9'
}
搭配ipipgo的按量计费套餐,记得在代码里加响应状态检测。遇到403状态码自动切换代理,像这样:
if response.status_code == 403:
print("触发反爬!正在更换IP...")
调用ipipgo的API更换新IP
reset_proxy()
采集效率翻倍技巧
单线程爬虫太浪费代理IP资源,上多线程才能榨干带宽。但要注意线程数别超过ipipgo套餐的最大并发数,不然会被限流。
这里有个参数对照表:
套餐类型 | 建议线程数 | 每秒请求量 |
---|---|---|
体验版 | 5 | 3 |
企业版 | 50 | 20 |
定制版 | 200+ | 需协商 |
推荐用concurrent.futures模块做线程池,记得给每个线程分配独立代理:
from concurrent.futures import ThreadPoolExecutor
def worker(url):
proxy = get_proxy() 从ipipgo获取新IP
return requests.get(url, proxies=proxy)
with ThreadPoolExecutor(max_workers=20) as executor:
results = executor.map(worker, url_list)
常见问题急救包
Q:代理IP突然连不上怎么办?
A:先检查账号配额是否用完,再测试本地网络。ipipgo后台有实时使用统计,建议开启余量预警
Q:遇到Cloudflare防护怎么破?
A:换用ipipgo的高匿住宅代理,配合随机UA和鼠标移动轨迹模拟
Q:采集速度忽快忽慢正常吗?
A:不同地区代理节点速度有差异,建议在代码里记录各IP响应时间,优先选用快速节点
最后提醒,使用代理IP要遵守网站robots协议。ipipgo提供合规使用指南,新用户注册送1G流量测试,足够小规模数据采集需求。遇到技术问题他们客服响应挺快,上次我凌晨两点提交工单,十分钟就收到解决方案了。