
爬虫被反爬的常见原因
当你写好的爬虫程序突然大量报错或者返回奇怪数据时,大概率是触发了目标网站的反爬机制。常见的反爬检测包括:IP Access Frequency(同一IP短时间内请求过多)、Request header characteristics(缺失或使用非常规的User-Agent)、behavioral model(如固定时间间隔访问)等。其中IP被封是最直接的问题——网站发现某个IP的访问行为异常,直接将其拉入黑名单。
代理IP为什么能解决反爬问题
代理IP的核心作用是Hide real IPs and enable IP rotation。当你的请求通过代理服务器转发时,目标网站看到的是代理IP而非你的本机IP。即使某个代理IP被封,只需更换新IP即可继续采集。以ipipgo的动态住宅代理为例,其9000万+IP池能有效分散请求压力,避免单一IP触发频率限制。
请求头伪装的关键细节
仅更换IP还不够,请求头(Headers)的合理性直接影响反爬判断。需重点注意:
- User-Agent:需模拟真实浏览器(如Chrome、Firefox最新版),避免使用爬虫库默认值
- Accept-Language:根据目标网站地区设置语言(如英文站点用”en-US”)
- Referer:模拟从站内页面跳转而来的请求
示例代码展示如何设置完整请求头:
import requests
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"Accept-Language": "en-US,en;q=0.9",
"Referer": "https://example.com/list"
}
结合ipipgo代理使用(以SOCKS5为例)
proxy = "socks5://user:pass@proxy.ipipgo.com:1080"
response = requests.get("https://target-site.com/data", headers=headers, proxies={"https": proxy})
代理IP与请求头伪装的组合策略
两者结合能最大化规避反爬:
- Dynamic IP Rotation:每N次请求或遇到封禁时自动切换IP。ipipgo支持按流量计费及轮换会话,可直接通过API获取新IP
- Request header randomization:准备多个常用浏览器的User-Agent列表,每次请求随机选取
- Access frequency control:即使使用代理IP,也需模拟人类操作间隔(如2-5秒)
以下为组合策略的实践示例:
import time
import random
from itertools import cycle
模拟多个User-Agent
USER_AGENTS = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36...",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15...",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36..."
]
从ipipgo获取的代理IP列表(示例)
PROXIES = cycle(["ip1:port", "ip2:port", "ip3:port"])
for page in range(1, 100):
proxy = next(PROXIES)
headers = {"User-Agent": random.choice(USER_AGENTS)}
发送请求(此处需根据ipipgo提供的认证方式配置)
response = requests.get(f"https://site.com/page/{page}", headers=headers, proxies={"https": proxy})
随机延迟1-3秒
time.sleep(random.uniform(1, 3))
ipipgo代理IP的实战配置
以ipipgo静态住宅代理为例,其50万+纯净住宅IP适合需要长期稳定IP的场景(如账号管理)。配置时注意:
- Authentication Methods:通常为用户名+密码白名单认证
- Protocol Selection:HTTP(S)或SOCKS5可根据目标网站协议灵活切换
- geographic positioning:支持指定国家/城市,尤其适合需要本地化内容的采集
静态代理配置示例(需替换为实际参数):
静态住宅代理(以HTTP为例)
proxy_url = "http://user:pass@static-proxy.ipipgo.com:8080"
proxies = {
"http": proxy_url,
"https": proxy_url
}
带认证的请求
response = requests.get("https://target.com", proxies=proxies, timeout=10)
Frequently Asked Questions QA
Q1:代理IP生效但仍被封,可能是什么原因?
A:可能是行为特征异常。即使IP和请求头正确,过于规律的访问间隔(如精确每秒1次)也会被识别。建议加入随机延迟,并模拟点击、滚动等操作。
Q2:ipipgo动态住宅和静态住宅代理如何选择?
A:动态IP适用于大规模数据采集,IP不断更换避免关联;静态IP适合需要固定IP身份的场景(如维持登录状态)。可根据业务周期灵活选择。
Q3:遇到高级反爬(如验证码)怎么办?
A:组合策略可降低验证码触发概率,若仍需处理,可集成第三方打码服务。同时ipipgo的SERP API已内置反爬应对机制,可直接调用接口获取数据。
Q4:代理IP速度慢如何优化?
A:优先选择地理位置上靠近目标服务器的代理节点。ipipgo支持城市级定位,可指定目标网站所在地区的IP,减少网络延迟。

