Python爬虫的User-Agent轮换与浏览器指纹模拟实战

简介: 本文介绍日本代购爬虫的反爬策略:通过User-Agent池(随机/轮询/平台适配)、浏览器指纹模拟(多维度请求头)、随机化请求间隔及智能重试机制,构建高拟真度请求,有效绕过网站反爬检测,提升数据采集成功率。(239字)

一、业务背景
在日本代购数据采集中,User-Agent是反爬虫的第一道防线。很多网站会检查请求的User-Agent,如果看起来不像真实浏览器,就会拒绝响应或返回验证码。
二、User-Agent池的实现
python
import randomclass UserAgentPool: def init(self): self.agents = [ # Chrome (Windows) 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/120.0.0.0 Safari/537.36', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/119.0.0.0 Safari/537.36', # Chrome (Mac) 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 Chrome/120.0.0.0 Safari/537.36', # Firefox 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/121.0', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/121.0', # Safari 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 KHTML, like Gecko Version/17.1 Safari/605.1.15', # Edge 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Edge/120.0.0.0 Safari/537.36', ] self.current_index = 0 def get_random(self): """随机获取一个User-Agent""" return random.choice(self.agents) def get_round_robin(self): """轮询获取User-Agent""" agent = self.agents[self.current_index] self.current_index = (self.current_index + 1) % len(self.agents) return agent def get_for_platform(self, platform): """根据目标平台选择不同的User-Agent""" if platform == 'yahoo': # 雅虎拍卖偏好Chrome return self.agents[0] elif platform == 'mercari': # 煤炉偏好移动端 return 'Mozilla/5.0 (iPhone; CPU iPhone OS 17_0 like Mac OS X) AppleWebKit/605.1.15' else: return self.get_random()
三、浏览器指纹模拟
除了User-Agent,网站还会检测其他特征:
python
class BrowserFingerprint: def init(self): self.fingerprints = [ { 'user_agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/120.0.0.0', 'accept_language': 'zh-CN,zh;q=0.9,en;q=0.8,ja;q=0.7', 'accept_encoding': 'gzip, deflate, br', 'sec_ch_ua': '"Not_A Brand";v="8", "Chromium";v="120"', 'sec_ch_ua_platform': '"Windows"', }, # 更多指纹... ] def get_headers(self, platform=None): fingerprint = random.choice(self.fingerprints) return { 'User-Agent': fingerprint['user_agent'], 'Accept-Language': fingerprint['accept_language'], 'Accept-Encoding': fingerprint['accept_encoding'], 'Sec-Ch-Ua': fingerprint.get('sec_ch_ua', ''), 'Sec-Ch-Ua-Platform': fingerprint.get('sec_ch_ua_platform', ''), 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,/;q=0.8', 'Connection': 'keep-alive', 'Upgrade-Insecure-Requests': '1', }
四、请求间隔的随机化
固定间隔的请求容易被识别为爬虫:
python
import randomimport timeclass RequestDelayer: def init(self, min_delay=1, max_delay=3): self.min_delay = min_delay self.max_delay = max_delay def wait(self): """随机等待,模拟人类行为""" delay = random.uniform(self.min_delay, self.max_delay) time.sleep(delay) def wait_with_jitter(self, base_delay=2): """带抖动的等待""" # 正态分布,大部分在base_delay附近,偶尔有长间隔 jitter = random.gauss(0, base_delay 0.3) delay = max(0.5, base_delay + jitter) time.sleep(delay)
五、完整的请求封装
python
import requestsfrom requests.adapters import HTTPAdapterfrom urllib3.util.retry import Retryclass SmartRequester: def init(self): self.session = requests.Session() self.ua_pool = UserAgentPool() self.fingerprint = BrowserFingerprint() self.delayer = RequestDelayer() # 配置重试 retry = Retry( total=3, backoff_factor=1, status_forcelist=[429, 500, 502, 503, 504] ) adapter = HTTPAdapter(max_retries=retry) self.session.mount('http://', adapter) self.session.mount('https://', adapter) def get(self, url, platform=None, kwargs): """带反爬策略的GET请求""" # 随机等待 self.delayer.wait() # 设置请求头 headers = self.fingerprint.get_headers(platform) headers['User-Agent'] = self.ua_pool.get_for_platform(platform) # 发送请求 response = self.session.get(url, headers=headers, timeout=10, kwargs) # 检查是否被限制 if response.status_code == 429: # 被限流,等待更长时间 time.sleep(30) return self.get(url, platform, *
kwargs) return response
六、总结
User-Agent轮换和浏览器指纹模拟是反爬对抗的基础手段。核心原则:让每个请求看起来都像来自不同的真实用户——不同的UA、不同的请求头、不同的间隔时间。

目录
相关文章
|
1月前
|
人工智能 运维 数据可视化
CC Switch本地路由方案全解:Codex CLI无缝接入DeepSeek模型实操教程
在代码开发、自动化智能体两大主流AI应用场景中,开发者常会遇到跨模型协议不兼容的核心难题。Codex CLI作为面向代码生成、批量工程处理的命令行工具,原生仅支持OpenAI Responses协议,但DeepSeek、Kimi、MiniMax等主流第三方大模型统一采用Chat Completions交互标准,二者请求体、流式返回、响应结构完全不互通,直接调用会持续抛出400、404解析异常,无法正常完成代码推理、长任务拆解。CC Switch作为轻量化本地路由与协议转换中间件,可在本机搭建透明代理层,自动完成双向协议翻译,无需修改Codex CLI底层源码,即可兼容市面上绝大多数第三方开源、
259 0
|
29天前
|
存储 人工智能 安全
2026年阿里云优惠活动参考:优惠券、云服务器、AI大模型与应用活动汇总
本文梳理了阿里云在2026年推出的各类优惠活动,首先介绍了五大类优惠券活动,包括覆盖广泛的新用户满减券、可叠加使用的通用优惠券、针对AI服务的百炼“先用后返”券、高达5亿元的企业迁云补贴以及学生专享的300元无门槛券。随后,汇总了云服务器特惠活动,如长期有效的“99计划”、轻量应用服务器秒杀以及通用算力型与第九代实例的专项折扣。此外,还重点解读了AI与大模型相关优惠,涵盖通义千问Qwen3.7-Max模型的限时折扣、灵活的Token Plan订阅方案及AI产品组合购。
|
1月前
|
jenkins 持续交付 开发工具
手摸手教你玩 Jenkins,一次搞懂 CI/CD!(第一章:部署)
Jenkins 是开源CI/CD自动化工具,支持代码拉取、构建、测试、部署全流程。本文详解Docker一键部署(含国内镜像加速)、初始配置及必备插件(Git Parameter、Publish Over SSH),助开发者告别手动运维,实现高效持续集成与交付。(239字)
281 1
手摸手教你玩 Jenkins,一次搞懂 CI/CD!(第一章:部署)
|
1月前
|
监控 NoSQL API
Flask + Celery实现异步任务处理:从同步阻塞到异步非阻塞的改造实战
本文介绍如何用Celery+Redis对Flask跨境电商接口进行异步优化:将邮件发送、物流API调用、PDF生成等耗时操作解耦为后台任务,接口响应从1850ms降至100ms内;并涵盖任务状态查询、自动重试、定时调度及监控告警等完整实践。
115 1
|
30天前
|
传感器 运维 监控
AR眼镜频繁死机?排查这3个隐藏硬件故障点
随着增强现实(AR)技术在工业运维、远程协作及复杂装配场景中的深度渗透,AR智能眼镜已从概念验证阶段走向规模化部署。然而,在实际生产环境中,设备稳定性往往是决定项目成败的关键因素。许多技术团队在面对AR眼镜“频繁死机”、“画面卡顿”或“意外重启”等问题时,往往首先归咎于软件Bug或网络延迟,却忽视了底层硬件在极端工况下的物理极限与潜在故障。
|
1月前
|
JSON 前端开发 数据格式
图片占位与骨架屏实战:LQIP 与 CLS 防抖
从纯色与主色占位、LQIP、BlurHash 到 SVG 骨架屏与 aspect-ratio 宽高比锁定,系统梳理图片加载占位方案的实现方式、体积取舍与对 CLS 布局抖动的影响,帮你把首屏图片加载体验做得更稳。
185 2
|
1月前
|
存储 运维 安全
告别无效出差:AR远程协作如何重塑企业运维效率
在数字化转型的深水区,传统工业与大型基础设施的运维模式正面临严峻挑战。高昂的差旅成本、专家资源的地域分布不均、以及现场故障处理的时效性压力,构成了制约企业运营效率的“铁三角”。随着5G网络的高带宽低时延特性普及,以及边缘计算能力的提升,增强现实(Augmented Reality, AR)远程协作系统已从概念验证走向规模化落地。本文旨在从技术架构、功能模块设计及最佳实践角度,深入探讨AR远程协作系统如何通过数字化手段重构运维流程,实现从“被动响应”到“主动智能”的转变。
|
1月前
|
监控 安全 Java
基于 Spring Cloud 微服务架构的集团级智慧工地管控平台
建筑智能化工程(智慧工地)融合云计算、物联网等技术,实现人员、车辆、设备、环境、进度等全要素智能管理。通过AI识别、实时监控与BI大屏,提升施工安全、效率与精细化管理水平。
119 1
|
1月前
|
人工智能 安全 BI
# 从一次性提问到持续监测:企业如何建立面向通义千问的可观测体系
GEO(生成式引擎优化)不仅是内容优化,更是品牌认知的可观测性工程。企业需摒弃单次提问判断,转而构建覆盖多意图、多角色的问题库,持续监测品牌提及率、有效率、场景覆盖率、定位准确度及竞品共现等维度,将大模型回答转化为可落地的内容治理行动。
|
29天前
|
数据采集 运维 监控
日志监控与告警系统在爬虫运维中的实践:从ELK到自研轻量方案
针对中小爬虫系统“静默崩溃”痛点,本文提出轻量级监控方案:基于Redis实现结构化日志收集、关键指标(请求成功率/采集量)聚合、规则驱动告警(如成功率<80%自动钉钉通知),无需ELK,部署简单、响应及时。(239字)
90 0