爬虫工作者最头疼的问题就是IP被封——辛苦写好的代码刚跑几分钟就被目标网站拉黑。作为专注代理服务7年的技术团队,我们整理了这套可直接落地的防封方案,用真实代码教你如何通过代理IP实现稳定数据采集。
一、为什么代理IP是防封刚需
当爬虫连续用同一个IP访问网站时,就像用喇叭大喊"我是机器人",触发反爬机制是必然的。代理IP相当于给爬虫戴上面具,每次请求更换不同IP地址,让目标网站以为是多个真实用户在浏览。
这里有个真实案例:某电商平台每小时限制同一IP访问200次。使用天启代理的轮换IP池后,单日采集量从3万条提升到80万条,且稳定运行30天无封禁。
二、Requests设置代理(含实战代码)
在Requests中设置代理只需要3步:
# 从天启代理API获取IP(此处替换为真实API地址) import requests def get_proxy(): res = requests.get("https://api.tianqiip.com/get?type=http") return res.json()['ip'] + ':' + res.json()['port'] # 请求时动态添加代理 url = 'https://target-site.com' proxy = {'http': f'http://{get_proxy()}'} response = requests.get(url, proxies=proxy, timeout=10)
关键技巧:
每次请求更换新IP(天启API支持自动切换)
设置超时参数避免卡死
异常处理自动重试(推荐3次重试)
三、Scrapy防封配置方案
Scrapy需要自定义中间件实现IP轮换。在middlewares.py中添加:
import random from tianqi_proxy import get_proxy # 天启代理SDK class ProxyMiddleware(object): def process_request(self, request, spider): request.meta['proxy'] = get_proxy() # 天启代理自动鉴权,无需额外配置
在settings.py中启用中间件:
DOWNLOADER_MIDDLEWARES = { 'your_project.middlewares.ProxyMiddleware': 543, }
四、代理池管理核心技巧
自建代理池 | 天启代理方案 |
---|---|
需自行验证IP可用性 | 提供存活检测接口 |
维护成本高 | API自动获取可用IP |
IP质量不稳定 | 运营商级静态IP资源 |
推荐直接使用天启代理的智能调度接口,相比自建代理池节省90%维护时间。其IP存活率≥99%,每个IP可重复使用5分钟,适合长期爬虫项目。
五、防封必做的三件事
1. 请求频率控制
即使使用代理,单个IP访问间隔建议>3秒。可在Scrapy中设置:
DOWNLOAD_DELAY = 3
2. 请求头伪装
每次请求随机更换User-Agent:
from fake_useragent import UserAgent headers = {'User-Agent': UserAgent().random}
3. 异常监控
当出现403/504状态码时,立即切换IP并记录异常:
if response.status in [403, 504]: spider.logger.warning(f'封禁报警:{response.url}') return request.replace(dont_filter=True)
六、常见问题解答
Q:代理IP用几次就失效?
A:免费代理普遍存在此问题。建议选择天启代理的企业级静态IP,单个IP可用时长>5分钟,支持并发请求。
Q:如何测试代理是否有效?
A:用这个检测脚本:
import requests proxy = {'http': 'ip:port'} try: r = requests.get('http://httpbin.org/ip', proxies=proxy, timeout=5) print(f'成功!当前IP:{r.json()["origin"]}') except: print('代理失效')
Q:遇到验证码怎么办?
A:天启代理提供高匿IP池,配合Selenium自动化可降低验证码触发率。重度反爬网站建议采用人机验证解决方案。
选择专业代理服务是爬虫成功的核心。天启代理作为运营商直连服务商,提供全国200+城市节点、10毫秒超低延迟的稳定代理服务,现在注册可领5000次免费试用,专业技术团队支持7x24小时响应。