为什么你的爬虫总被封IP?
很多新手在用Python写爬虫时,经常遇到访问几十次就被网站封IP的情况。这是因为网站服务器会通过请求频率监测和IP行为分析来识别爬虫行为。比如当同一个IP在1分钟内连续请求50次页面,服务器就会自动将该IP拉入黑名单。
这时候就需要使用代理IP来分散请求压力。通过切换不同的IP地址,让服务器认为是多个普通用户在访问。但市面上的免费代理普遍存在响应慢、存活时间短、匿名性差的问题,这正是我们需要专业代理服务的原因。
实战必备:代理IP服务选择
选择代理服务时要重点关注三个指标:IP质量、响应速度、协议支持。以天启代理为例,他们的企业级服务采用自建机房+运营商合作模式,提供原生住宅IP资源,支持HTTP/HTTPS/SOCKS5三种协议,特别适合需要高匿爬虫的场景。
这里有个对比表格更直观:
指标 | 免费代理 | 天启代理 |
---|---|---|
IP存活时间 | 5-30分钟 | 24小时 |
响应速度 | >2秒 | ≤10ms |
请求成功率 | <30% | ≥99% |
Python设置代理的三种姿势
以最常用的requests库为例,演示代理配置方法:
import requests 单次请求设置 proxies = { 'http': 'http://用户名:密码@ip:端口', 'https': 'http://用户名:密码@ip:端口' } response = requests.get(url, proxies=proxies) 会话级设置 session = requests.Session() session.proxies = proxies 第三方库支持 from requests.auth import HTTPProxyAuth auth = HTTPProxyAuth('用户名', '密码')
天启代理提供的API动态获取接口可以直接生成这样的代理字符串,建议将IP池维护成列表进行轮询使用。
新手必看的防封技巧
除了使用代理IP,还需要注意:
- 设置随机延迟(0.5-3秒)模拟真人操作
- 定期更换User-Agent避免特征固定
- 使用异常重试机制处理429/503状态码
- 对重点网站进行请求频率控制
这里给出一个结合天启代理的完整示例:
import random import time from fake_useragent import UserAgent ua = UserAgent() proxy_pool = [] 从天启代理API获取的IP列表 for page in range(1, 100): try: proxy = random.choice(proxy_pool) headers = {'User-Agent': ua.random} response = requests.get( url=f"https://example.com/page/{page}", proxies={"https": proxy}, headers=headers, timeout=10 ) 处理响应数据... time.sleep(random.uniform(1, 3)) except Exception as e: print(f"请求失败: {e}") proxy_pool.remove(proxy) 自动剔除失效IP
常见问题QA
Q:代理IP用几次就失效怎么办?
A:建议使用天启代理这类高可用服务,他们的IP可用率≥99%,同时要设置自动更换机制,当遇到请求失败时立即切换新IP。
Q:SOCKS5和HTTP协议怎么选?
A:普通网页抓取用HTTP即可,需要传输敏感数据时建议使用天启代理支持的SOCKS5协议,加密性更好。
Q:如何检测代理是否匿名?
A:访问http://httpbin.org/ip,如果返回的origin字段显示的是代理IP而不是真实IP,说明是高匿名代理。天启代理默认提供的就是这种匿名级别。
通过合理使用代理IP服务,配合基础的防封策略,新手也能快速搭建稳定的爬虫系统。建议在实际开发中多测试不同策略的组合效果,找到最适合目标网站的采集方案。