很多刚接触工业数据采集的新手最常遇到的问题就是代码逻辑看起来没问题跑起来却要么返回403要么IP直接被临时封禁换个浏览器手动访问又一切正常。本质上是对目标站点的反爬防护机制没有概念踩了最基础的规则红线。本文整理了行业内最普遍的10种反爬策略从入门级的请求头校验到进阶的行为检测逐一对应Python环境下的落地解决方案附核心实现代码新手可以直接对照排查问题。前置准备本文所有方案基于Python 3.9环境提前安装相关依赖库pipinstallrequests ddddocr fonttools execjs undetected-chromedriver playwright其中playwright需要额外安装Chromium内核playwrightinstallchromium1. User-Agent身份校验这是最基础、应用最广的反爬机制几乎所有站点都会校验。服务端通过请求头中的User-Agent字段识别客户端类型如果检测到是Python requests默认的UA标识会直接拒绝访问。识别特征第一次请求就返回403或空内容用浏览器直接访问相同地址可以正常获取数据。Python应对方案手动添加合法的浏览器UA进阶场景可以维护UA池每次请求随机切换避免单一UA被标记。核心代码importrequestsimportrandom# 可自行扩充不同浏览器、不同版本的UAua_pool[Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36,Mozilla/5.0 (Macintosh; Intel Mac OS X 14_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Safari/605.1.15,Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:130.0) Gecko/20100101 Firefox/130.0]headers{User-Agent:random.choice(ua_pool)}responserequests.get([https://example.com](https://example.com),headersheaders)2. Referer来源校验很多站点会校验请求头中的Referer字段判断请求是否从本站页面跳转而来防止接口被盗链直接调用。常见于图片、视频资源接口以及部分后端Ajax接口。识别特征直接访问接口返回403或非法请求从网页内正常点击跳转可以获取数据。Python应对方案在请求头中补充对应页面的Referer地址一般是目标数据所在的上级列表页或详情页地址。核心代码headers{User-Agent:random.choice(ua_pool),Referer:[https://example.com/goods/list](https://example.com/goods/list)}responserequests.get([https://example.com/api/goods/detail](https://example.com/api/goods/detail),headersheaders)3. IP访问频率限制这是新手最容易踩的坑。短时间内发送大量请求服务端检测到单IP请求频率超过阈值就会临时封禁IP时长从几分钟到几小时不等。识别特征前几次请求正常之后突然全部返回403或429状态码切换网络或等待一段时间后恢复正常。Python应对方案基础场景控制请求频率每次请求增加随机延时高频采集场景对接代理IP池轮换IP发送请求基础延时方案importtime url_list[...]# 待采集地址列表forurlinurl_list:responserequests.get(url,headersheaders)# 随机延时1-3秒模拟人类操作间隔time.sleep(1random.random()*2)代理IP核心逻辑proxies{http:http://代理地址:端口,https:http://代理地址:端口}responserequests.get(url,headersheaders,proxiesproxies)实际项目建议对接商用代理池通过接口动态获取可用IP定期清理失效节点。4. Cookie与会话跟踪多数站点会通过Cookie跟踪用户会话要求先访问页面获取合法Cookie再请求数据接口同时会校验Cookie的完整性和生成路径缺失或异常的Cookie会被直接拦截。识别特征直接请求接口失败浏览器正常访问页面后再请求接口就可以成功。Python应对方案使用requests的Session对象自动维护Cookie先访问首页或列表页获取初始Cookie再请求数据接口模拟正常用户访问流程。核心代码sessionrequests.Session()# 先访问首页获取初始Cookiesession.get([https://example.com](https://example.com),headersheaders)# 后续请求Session会自动携带和更新Cookieresponsesession.get([https://example.com/api/data](https://example.com/api/data),headersheaders)5. 动态JS渲染Ajax异步加载现代网站大多采用前后端分离架构数据通过Ajax异步加载页面初始HTML中没有实际数据需要JS执行完成后才会渲染到页面上。直接用requests请求只能拿到空的页面框架。识别特征浏览器中能看到完整数据requests返回的源码里找不到对应内容。Python应对方案优先方案抓包分析Ajax接口直接请求接口获取JSON数据效率最高备选方案使用无头浏览器渲染完整页面适用于接口加密复杂的场景Playwright无头渲染示例fromplaywright.sync_apiimportsync_playwrightwithsync_playwright()asp:browserp.chromium.launch(headlessTrue)pagebrowser.new_page(user_agentrandom.choice(ua_pool))page.goto([https://example.com](https://example.com))# 等待目标元素加载完成page.wait_for_selector(.data-item)page_contentpage.content()browser.close()6. 图形与交互验证码当系统检测到请求行为异常时会弹出验证码进行人机校验。常见类型包括图形数字验证码、滑块验证码、点选验证码等是新手进阶的第一道门槛。识别特征请求返回验证码页面或接口返回需要验证的状态码。Python应对方案简单图形验证码使用OCR识别库直接识别滑块/点选验证码通过算法计算轨迹模拟拖拽操作复杂场景可对接第三方打码服务图形验证码识别核心代码importddddocr ocrddddocr.DdddOcr(show_adFalse)# 获取验证码图片img_bytesrequests.get([https://example.com/captcha](https://example.com/captcha),headersheaders).content# 识别验证码文本codeocr.classification(img_bytes)滑块验证码需要结合无头浏览器模拟鼠标拖拽注意轨迹要加入加速减速和微小抖动不能匀速直线运动。7. 自定义字体加密部分站点会对关键数据价格、评分、手机号等使用自定义字体页面上显示正常数字但源码中是特殊的Unicode字符直接提取会得到乱码。常见于电商、房产、影评类站点。识别特征页面显示正常数字代码提取到的文本是乱码或特殊符号。Python应对方案下载站点的自定义字体文件woff/ttf格式解析字形映射关系将加密字符对应回真实内容。核心处理逻辑fromfontTools.ttLibimportTTFont# 加载自定义字体文件fontTTFont(custom_font.woff)# 获取字符与字形的映射关系cmapfont.getBestCmap()# 对比字形轮廓建立加密字符到真实字符的映射char_mapbuild_mapping(cmap,font)# 解密文本resultdecrypt_text(raw_text,char_map)部分站点会动态更换字体文件每次请求都需要重新下载解析映射关系。8. 接口参数签名校验很多后端接口会对请求参数进行签名校验生成sign、token等校验参数服务端校验签名合法性防止参数被篡改和接口被盗用。签名算法通常封装在前端JS代码中。识别特征接口带有sign、timestamp等参数修改参数或直接重放请求会返回签名错误。Python应对方案通过浏览器调试定位签名生成的JS函数抠出核心算法用Python复现或通过execjs执行JS代码生成签名每次请求按照规则生成对应签名核心示例importexecjsimporttime# 加载从前端抠出的签名算法withopen(sign.js,r,encodingutf-8)asf:js_ctxexecjs.compile(f.read())params{page:1,timestamp:int(time.time()*1000)}# 调用JS函数生成签名params[sign]js_ctx.call(getSign,params)responserequests.get([https://example.com/api/list](https://example.com/api/list),paramsparams,headersheaders)9. 浏览器设备指纹检测进阶的反爬系统会收集浏览器的各类特征包括Canvas渲染结果、WebGL信息、屏幕分辨率、时区、插件列表等生成唯一的设备指纹识别自动化工具。识别特征使用普通无头浏览器访问仍然被拦截返回人机验证页面普通浏览器访问正常。Python应对方案使用反检测工具修复无头浏览器的特征指纹比如undetected-chromedriver、playwright-stealth插件绕过大部分基础指纹检测。undetected-chromedriver示例importundetected_chromedriverasuc driveruc.Chrome()driver.get([https://example.com](https://example.com))这类工具会自动修复navigator、webdriver等自动化特征模拟真实浏览器的指纹表现。10. 用户行为生物检测高端反爬系统会分析用户的页面操作行为包括鼠标移动轨迹、点击间隔、滚动速度、页面停留时间等通过机器学习模型判断是真人还是机器。识别特征页面能正常打开但操作几步之后就触发验证或封禁机械模拟点击无效。Python应对方案模拟人类操作节奏鼠标移动加入缓动曲线和微小抖动避免匀速运动增加随机停留时间模拟真实浏览行为操作路径符合正常用户的浏览逻辑减少无意义的操作鼠标轨迹拟人化核心逻辑defhuman_move_to(page,target_x,target_y):current_x,current_ypage.mouse.position steps25random.randint(0,15)foriinrange(steps):ti/steps# 缓动曲线先加速后减速ease_tt*t*(3-2*t)# 叠加微小随机抖动xcurrent_x(target_x-current_x)*ease_trandom.uniform(-1.5,1.5)ycurrent_y(target_y-current_y)*ease_trandom.uniform(-1.5,1.5)page.mouse.move(x,y)time.sleep(random.uniform(0.008,0.015))常见问题排查思路新手遇到采集失败可以按照从易到难的顺序逐步排查检查请求头是否完整UA、Referer等字段是否符合要求确认Cookie是否正常携带会话是否有效降低请求频率增加延时判断是否为频率限制对比浏览器和代码的返回差异确认是否存在动态渲染检查返回内容是否有验证码、字体加密等特殊处理最后排查是否存在设备指纹检测和行为检测合规提示工业数据采集行为必须严格遵守《网络安全法》《数据安全法》《个人信息保护法》等相关法律法规不得恶意绕过技术防护措施不得非法获取个人信息和敏感数据不得对目标站点的正常服务造成影响。本文所有技术仅用于合法授权范围内的数据采集与安全技术研究。总结反爬与数据采集的对抗是一个持续升级的过程新手不用追求一开始就搞定所有防护机制从最基础的请求头、频率控制开始逐步深入理解每一种机制的原理对应学习解决方案。实际项目中优先选择效率最高的方案能抓接口就不用无头浏览器能简单处理就不用复杂逆向。同时一定要守住合规底线在合法范围内开展技术实践。
企业数字化 ERP 产品动态
相关推荐
【Tools】UltraEdit 使用技巧汇总:用 TaoToken 统一 Key 打通 AI 辅助编辑配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 18:43:46
Agent部署为何转向云电脑?从Web集群到Docker持久化环境的架构演进 最近在圈子里看到不少人在讨论同一件事:像 Muse、Grok Bot 这一类的智能体应用,官方和玩家社区都开始尝试一种新的部署方式——给每个 Agent 分配一台云电脑,让它 7x24 小时不关机的跑着。有人直接开喷:以前我们千辛万苦从单机演进… · 2026/9/26 18:43:46
Jev模型API接入实战:从密钥配置到SDK封装完整指南 1. 这个模型为什么突然刷屏了Jev 模型最近在技术圈的热度确实有点夸张,朋友圈、技术群、社区首页几乎都能刷到相关讨论。我第一时间拿到访问权限跑了一轮实测,从 API 调用到 SDK 接入都走了一遍,这篇文章就把我的完整踩坑记录和实操方案摊开来… · 2026/9/26 18:43:46
室内人头检测YOLOv8数据集927张图训练实践与避坑指南 简介:面向yolo系列目标检测算法学习者与室内监控场景开发者,该数据集包含927张室内人头检测图像及完整标注,可直接用于yolov5、yolov7、yolov8、yolov9、yolov10、yolo11等主流模型的训练与验证测试。压缩包共2000个文件,包含927个… · 2026/9/26 20:03:03
退款承诺何时算数、何时不算?2026 逐条对照兑现条件边界,平台保障一次讲清 平台的退款承诺,是一份带条件的约定,而非一句笼统的保证。它写清了三件事:触发指标只认重复比例与 AIGC 检出比例,判断依据必须来自官方检测通道,审核周期为退款审核1-3个工作日。把这三件事看透,你才能判断… · 2026/9/26 20:02:55
Atlas 300V 24G上部署YOLO:从硬件认知到工程化落地全流程 我拿到这台服务器时,里面插着的正是Atlas 300V 24G。当时项目要求在这张卡上把YOLO跑起来,我在搜索引擎里也看到不少人问“atlas 300v 24g 是运算加速卡吗”。这里统一回答:它确实是运算加速卡,而且是一张专职干AI推理的加速卡&am… · 2026/9/26 20:02:55
用AI重构个人工作流:我如何把每天2小时的信息筛选压缩到10分钟 每天早上9点,我的第一件事不是写代码,而是——刷信息。打开浏览器,依次访问5个招标公告网站,手动翻找与团队业务相关的政策动态和项目机会。然后打开3个行业资讯站,筛选有价值的技术趋势。最后,把认为“可能… · 2026/9/26 20:02:55
侧动式跳汰机|中粗粒重选核心装备,脉动分层提升重矿物回收效率 侧动式跳汰机|中粗粒重选核心装备,脉动分层提升重矿物回收效率在重力选矿体系中,跳汰选矿依托矿物间比重差异实现分选,是应用历史久、经济性突出的重选工艺。侧动式跳汰机作为跳汰设备主流机型之一,依靠独特的侧部脉动… · 2026/9/26 20:02:55
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46