
爬虫UA和IP被识别?别慌,一步步教你搞定
做数据采集的朋友,最头疼的就是遇到网站反爬。明明代码没问题,怎么刚抓一会儿就被封了?这多半是你的Agent utilisateur (UA)répondre en chantantAdresse IP暴露了。网站通过检查这两样东西,很容易判断出你是真人还是机器。今天,我们就从代理IP的角度,手把手教你如何设置,让爬虫“隐身”。
第一步:理解UA和IP如何暴露你
想象一下,你每次访问网站,都会留下两个关键脚印:UA字符串répondre en chantantAdresse IP.
- UA:告诉网站你用的什么浏览器、什么系统。如果你一直用同一个默认的UA(比如Python的requests库),网站一看就知道是爬虫。
- IP:你的网络门牌号。短时间内从一个IP发起大量请求,就像同一个人疯狂敲门,不被封才怪。
我们的目标就是:让每次请求看起来都像来自不同地方、不同设备的真实用户。这就需要用到代理IP服务。
第二步:核心武器——高质量代理IP的选择与配置
代理IP是你的“隐身衣”和“换装术”。它用另一个IP代替你的真实IP去访问目标网站,从而隐藏你的真实地址。但代理IP质量参差不齐,选错了反而更容易被封。
对于爬虫业务,我们推荐使用Proxy résidentiel IP。这类IP来自真实的家庭宽带,是网站最信任的IP类型之一,识别率极低。这里以专业服务商ipipgo为例,它的动态住宅代理IP池非常庞大,覆盖220多个国家,IP数量超过9000万,非常适合需要频繁更换IP的爬虫场景。
配置代理IP到你的爬虫代码里很简单。以Python的requests库为例:
import requests
假设你从ipipgo获取到的代理IP是:123.123.123.123,端口是8080
格式通常是:http://用户名:密码@IP:端口 或 http://IP:端口(如果使用白名单验证)
proxy = {
'http': 'http://123.123.123.123:8080',
'https': 'http://123.123.123.123:8080'
}
设置一个随机的UA,可以从列表中随机选
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'
}
try:
response = requests.get('https://你要抓取的网站.com', headers=headers, proxies=proxy, timeout=10)
print(response.text[:500]) 打印前500字符看看效果
except Exception as e:
print(f"请求失败: {e}")
这只是基础用法。在实际项目中,你需要一个IP池,并管理它们的调用频率和生命周期。
第三步:实战进阶——构建IP池与UA池的轮换策略
单打独斗不行,我们要搞“军团作战”。
1. 建立IP池: 从ipipgo这类服务商获取大量代理IP,并定期检测其可用性和速度,剔除失效的IP。ipipgo的动态住宅代理支持按流量计费和轮换会话,你可以设置IP在请求一次或一段时间后自动更换,完美模拟不同用户。
2. 建立UA池: 收集几十上百个常见的浏览器UA字符串,放在一个列表里。每次发起请求前,随机从中选取一个。
3. 制定轮换规则: 这是关键。不要死板地“一个请求换一次IP”,那样成本高且不自然。可以结合以下策略:
- Rotation par nombre de demandes:每抓取N个页面(比如5-10个)更换一次IP和UA。
- 按时间轮换:每隔M分钟更换一次。
- 按目标网站响应轮换:一旦收到封禁信号(如状态码403、出现验证码),立即丢弃当前IP,更换新IP重试。
一个简单的轮换逻辑框架:
import random
import time
class SpiderWithProxy:
def __init__(self, ip_list, ua_list):
self.ip_pool = ip_list 你的IP池列表
self.ua_pool = ua_list 你的UA池列表
self.current_ip_index = 0
self.request_count = 0
def get_random_ua(self):
return random.choice(self.ua_pool)
def get_next_ip(self):
简单轮询获取IP,实际应用可以更复杂,如随机、加权等
ip = self.ip_pool[self.current_ip_index]
self.current_ip_index = (self.current_ip_index + 1) % len(self.ip_pool)
return ip
def make_request(self, url):
headers = {'User-Agent': self.get_random_ua()}
proxy = {'http': self.get_next_ip(), 'https': self.get_next_ip()}
self.request_count += 1
模拟每3次请求后强制休息一下,更拟人化
if self.request_count % 3 == 0:
time.sleep(random.uniform(1, 3))
response = requests.get(url, headers=headers, proxies=proxy, timeout=15)
return response
初始化爬虫(IP列表需要你从ipipgo后台获取并格式化)
spider = SpiderWithProxy(ip_list=['http://ip1:端口', 'http://ip2:端口'], ua_list=['UA1', 'UA2', 'UA3'])
开始爬取...
第四步:针对高难度网站的特别技巧
有些网站防护非常严密,除了IP和UA,还会检查Cookie、JavaScript指纹甚至浏览器行为。这时就需要更专业的工具和策略。
可以考虑:
- 使用ipipgo的静态住宅代理:对于需要保持会话(如登录状态)的爬虫,动态IP频繁更换会导致掉线。ipipgo的静态住宅代理IP纯净、稳定,可用性高达99.9%,可以长期持有同一个IP进行复杂操作,适合需要高稳定性的业务场景。
- 结合自动化浏览器工具:如Selenium、Playwright。它们能控制真实浏览器,生成完全真实的指纹和行为。再配合ipipgo的代理IP(支持HTTP(S)和SOCKS5协议),可以极大提升绕过能力。
- Fixer des intervalles de demande raisonnables:加入随机延迟(time.sleep(random.uniform(1, 5))),模仿人类阅读和点击的停顿。
Foire aux questions QA
Q1:我用了代理IP,为什么还是被封?
A:可能原因有:1)代理IP质量差,是数据中心IP,已被目标网站标记。2)UA没有更换或过于单一。3)请求频率太高,即使换IP,但行为模式不像真人。4)目标网站有其他高级反爬措施。建议使用像ipipgo这样的高质量住宅代理,并完善你的UA池和行为模拟。
Q2:动态代理和静态代理怎么选?
A :agent dynamique(如ipipgo动态住宅代理)适合大规模、匿名数据采集,IP不断变化,不易被追踪。proxy statique(如ipipgo静态住宅代理)适合需要维持登录状态、长时间会话的业务,比如社交媒体管理、电商账号运营等。你可以根据业务场景混合使用。
Q3:从ipipgo获取的代理IP如何应用到我的爬虫项目?
A:在ipipgo后台购买套餐后,你会获得API接口或代理服务器地址、端口、用户名密码(或IP白名单)。将这些信息按照上面代码示例中的格式,填入你的爬虫代理设置中即可。他们支持HTTP和SOCKS5协议,兼容性很好。具体接入文档在官网有详细说明。
résumés
搞定爬虫的UA和IP识别,核心思路就是“模拟真人”和“分散风险”。选择像ipipgo这样提供海量、纯净住宅IP资源的服务商是基础。然后,通过构建IP池、UA池,并设计合理的轮换与延迟策略,你的爬虫隐形能力将大大提升。记住,没有一劳永逸的方案,需要根据目标网站的反爬强度灵活调整你的策略。现在,就去优化你的爬虫吧!

