Python 爬虫实战:8 大反爬与健壮性技巧详解
Python 爬虫实战8 大反爬与健壮性技巧详解前言在爬虫开发中如何做到不被封 IP、断点续爬、应对页面结构变化是每个爬虫工程师的必修课。本文基于一个真实的高校新闻爬虫项目系统梳理其中用到的 8 大爬虫技巧涵盖请求伪装、频率控制、异常退避、断点续爬、多路径回退、数据清洗与持久化等内容。技术栈requestslxmlrepandascsv1. User-Agent 随机化UA 池是反反爬的第一道防线。每次请求从 UA 列表中随机选取一个避免固定 UA 被服务端识别为爬虫。importrandom user_agents[Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36,Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36 Edg/144.0.0.0,Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:126.0) Gecko/20100101 Firefox/126.0,Mozilla/5.0 (Macintosh; Intel Mac OS X 14_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Safari/605.1.15]header{User-Agent:random.choice(user_agents),}技巧要点UA 列表应常更新覆盖 Chrome / Edge / Firefox / Safari 主流浏览器且版本号不宜过旧。2. 请求头完整伪装除了 UA还需要模拟完整浏览器请求头尤其是Referer让请求看起来像站内跳转。header{User-Agent:random.choice(user_agents),Referer:https://www.xyu.edu.cn/,# 伪装来源Accept:text/html,application/xhtmlxml,application/xml;q0.9,*/*;q0.8,Accept-Language:zh-CN,zh;q0.9,Connection:keep-alive}技巧要点Accept、Accept-Language、Connection三个字段建议一并设置让你的请求看起来更像正常浏览器行为。3. 随机延时 分段长休息固定频率请求是触发反爬的常见原因。通过随机延时 分段长休息模拟人类浏览节奏。# 每次请求后随机休眠 2-6 秒waitrandom.uniform(2,6)time.sleep(wait)# 每爬取 50 条额外休息 30-60 秒ifid%500:restrandom.uniform(30,60)time.sleep(rest)策略间隔目的单次延时2~6s 随机避免固定间隔被检测分段休息每 50 条休息 30~60s模拟人类阅读间歇降低服务器压力技巧要点使用random.uniform()而非固定整数让间隔无法被简单统计规律识别。4. 反爬状态码自动退避当服务端返回限流/封禁状态码时立即进入长时间休眠避免持续冲击触发更严厉封锁。ifresp.status_codein(429,403,503):time.sleep(600)# 休眠 10 分钟状态码含义应对策略429Too Many Requests请求频率过高等待 10 分钟再继续403Forbidden拒绝访问等待 10 分钟IP 可能被暂时封禁503Service Unavailable服务不可用等待 10 分钟服务恢复后再试技巧要点根据实际反爬强度可调整休眠时间600s / 1200s激进场景可配合 IP 代理池使用。5. 断点续爬访问记录持久化大规模爬取不可避免会遇到中断网络波动、程序异常、IP 被封。断点续爬机制保证不重复爬取已访问页面程序重新运行时从断点继续。visited_filevisited_ids.txt# 1. 启动时加载已访问 ID 集合try:withopen(visited_file,r,encodingutf-8)asf:visited_idsset(line.strip()forlineinfifline.strip())exceptFileNotFoundError:visited_idsset()# 2. 遍历时跳过已访问 IDforidinrange(23900,40000):ifstr(id)invisited_ids:continue# ... 爬取逻辑 ...# 3. 每条爬取后立即写入记录文件withopen(visited_file,a,encodingutf-8)asf_visited:f_visited.write(str(id)\n)visited_ids.add(str(id))设计要点使用set做 O(1) 查找避免大文件线性扫描每条爬完后立即追写文件a模式而非等全部结束再写启动时从文件重建visited_ids实现真正的断点续爬技巧要点visited_ids同时存在于内存set和磁盘txt内存用于快速判重磁盘用于持久化恢复。6. 多路径 XPath 回退目标网站的 HTML 结构可能存在多种模板单一 XPath 容易漏数据。通过多路径回退策略依次尝试不同模板提高数据覆盖率。# 第一优先级idvsb_content_4 的模板contenthtml.xpath(//div[idvsb_content_4]//div[classv_news_content]//p//text())# 回退路径 1idvsb_content 的模板ifnotcontent:contenthtml.xpath(//div[idvsb_content]//div[classv_news_content]//p//text())# 回退路径 2不分段落直接取所有文本ifnotcontent:contenthtml.xpath(//div[idvsb_content]//div[classv_news_content]//text())技巧要点回退路径按优先级排列——先精确再宽松最后兜底。确保不同版本的页面模板都能正确提取正文。7. 正则数据清洗爬取的原始文本常包含\xa0不间断空格、多余换行、HTML 实体等脏数据需要用正则统一清洗。importre# 删除浏览量后缀如 浏览123conttimere.sub(r 浏览.*$,,conttime)# 去除 \xa0、\n、\rcontentcontent.replace(\xa0,).replace(\n,).replace(\r,)# 合并连续空白为单个空格contentre.sub(r\s, ,content)# 审核信息的多字段拼接与清洗sssx .join([part.strip().replace(\r,).replace(\n,).replace(\xa0,)forpartinsssxifpart.strip()])清洗目标方法说明浏览量信息re.sub(r 浏览.*$, , conttime)删除时间后的浏览量尾巴不间断空格.replace(\xa0, )网页中常见的特殊空白字符多余换行.replace(\n, ).replace(\r, )去除 HTML 排版带来的换行连续空白re.sub(r\s, , content)多个空白合并为一个技巧要点优先用str.replace()处理已知字符再用re.sub()处理通用模式性能更好。8. 实时刷盘 去重数据安全是爬虫的底线——爬了 2 万条然后崩溃没存盘等于白干。每条写入后立即flush()到磁盘爬取完成后用 Pandas 去重。withopen(../data/output.csv,a,newline,encodingutf-8)asf:writercsv.writer(f)# 空文件先写入表头iff.tell()0:writer.writerow([标题,发行信息,正文,审核信息])foridinrange(start,end):# ... 爬取逻辑 ...writer.writerow([title,conttime,content,sssx])f.flush()# ← 每条写入立即刷盘# 爬取完毕后基于多列去重dfpd.read_csv(../data/output.csv,encodingutf-8)df_dedupdf.drop_duplicates([标题,发行信息,正文,审核信息])df_dedup.to_csv(../data/final.csv,indexFalse,encodingutf-8)设计要点f.tell() 0判断文件是否为空仅在空文件时写入表头f.flush()保证每一条数据都实时落盘程序崩溃也不丢数据drop_duplicates()基于多列组合去重比单列更安全整体架构总结启动 ──→ 加载 visited_ids断点恢复 │ ▼ 遍历 ID 范围 ──→ 已在 visited_ids──→ 跳过 │ 否 ▼ │ 发送请求 ◄──────────────┘ │ ├─ UA 随机化 │ ├─ 完整请求头伪装 │ └─ 429/403/503 退避休眠 ▼ XPath 解析多路径回退──→ 正则清洗 │ ▼ 写入 CSV flush() 记录 visited_id │ ├─ 每次请求后 sleep(2~6s) └─ 每 50 条 sleep(30~60s) ▼ 全部完成 ──→ Pandas 去重 ──→ 最终输出进阶建议本文介绍的策略适合轻量级礼貌爬虫场景。如果你面对更强的反爬如 Cloudflare 5 秒盾、滑块验证码、动态渲染页面还需要补充以下能力场景进阶方案IP 被封频繁引入代理池付费/免费 IP 代理动态渲染页面使用 Selenium / Playwright 模拟浏览器验证码拦截OCR 识别ddddocr / tesseract或打码平台Cookie/登录态requests.Session 维持会话保持登录态大规模采集改用 Scrapy 框架支持并发、中间件、分布式本文代码均来自真实项目核心思想用最小的代价换取最大的数据采集成功率。希望这些技巧对你的爬虫开发有所帮助

相关新闻

Android Handler机制详解:线程通信与消息处理

Android Handler机制详解:线程通信与消息处理

1. Handler基础概念解析Handler是Android系统中用于线程间通信的核心组件,它构成了Android消息机制的基础架构。作为Looper和MessageQueue的桥梁,Handler使得开发者能够轻松实现跨线程的任务调度。在Android的UI框架中,主线程(UI线…

2026/7/23 11:55:57 阅读更多 →
Web开发中Maven介绍和使用

Web开发中Maven介绍和使用

什么是Maven Maven是一款用于管理和构建Java项目的工具,是apache旗下的一个开源项目。 Apache 软件基金会,成立于1999年7月,是目前世界上最大的最受欢迎的开源软件基金会,也是一个专门为支持开源项目而生的非盈利组织。 开源项…

2026/7/22 19:59:40 阅读更多 →
Transformer模型核心原理与实现详解

Transformer模型核心原理与实现详解

1. Transformer模型基础回顾在深入探讨Transformer的工作流程之前,我们需要先明确几个基本概念。Transformer是一种基于自注意力机制的神经网络架构,最初由Vaswani等人在2017年的论文《Attention Is All You Need》中提出。它彻底改变了传统序列建模依赖…

2026/7/21 18:22:43 阅读更多 →

最新新闻

Wan2.2-T2V-A5B:多模态AI文本转视频生成技术解析

Wan2.2-T2V-A5B:多模态AI文本转视频生成技术解析

1. 项目概述:Wan2.2-T2V-A5B的技术定位与核心价值Wan2.2-T2V-A5B是当前多模态AI领域最具突破性的文本转视频生成模型之一。作为Wan-AI系列的最新迭代产品,它在视频连贯性、细节还原和动态表现三个维度实现了显著提升。不同于早期版本(如Wan2.…

2026/7/23 23:15:50 阅读更多 →
鸿蒙多功能工具箱开发实战(三)-分类页面与工具卡片组件

鸿蒙多功能工具箱开发实战(三)-分类页面与工具卡片组件

鸿蒙多功能工具箱开发实战(三)-分类页面与工具卡片组件 前言 工具卡片是应用的核心UI组件,承载着工具的展示和入口功能。本文将详细讲解如何设计一个美观、交互友好的工具卡片组件,以及如何使用Grid网格布局实现分类页面的展示。 一、工具卡片设计分析 1…

2026/7/23 23:15:50 阅读更多 →
Free CAD 软件

Free CAD 软件

Free CAD 软件下载 给有需要的人 下载链接 windows选择Windows即可 也有mac的安装包 https://mirror.tuna.tsinghua.edu.cn/github-release/FreeCAD/FreeCAD/LatestRelease/

2026/7/23 23:14:49 阅读更多 →
双碳背景下中国环保企业参展的优势与价值探析

双碳背景下中国环保企业参展的优势与价值探析

随着全球“双碳”目标稳步落地、全球环境治理需求持续扩容,环保展会已然成为行业技术比拼、供需精准对接、品牌全球化布局的核心阵地。相较于海外同行,中国环保企业参展具备产业、产品、渠道、政策四大维度的独特优势,综合竞争力突出&#xf…

2026/7/23 23:14:49 阅读更多 →
Cadence打开会有当前页面脚本错误

Cadence打开会有当前页面脚本错误

解决:找到安装目录: D:\Cadence\Cadence_SPB_16.6-2015\tools\capture\tclscripts\capStartPage 找到文件 capStartPage.tcl ⚠️ 安全操作:不要直接删除,重命名,例如改成 capStartPage.tcl.bak 重启 OrCAD&#xff0c…

2026/7/23 23:14:49 阅读更多 →
(二十二)一些概念的总结

(二十二)一些概念的总结

对公钥密码体制安全证明中使用的概念进行重新梳理和分类。充分理解这些概念,掌握它们在哪里/如何应用于安全证明是很重要的。需要注意的是,一些概念,如优势和有效密文,在文献中的其他地方可能有不同的解释。 与证明相关的概念 与证明相关的各种概念,出于不同的目的,有不…

2026/7/23 23:14:49 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/23 17:49:47 阅读更多 →

月新闻