绝大多数电子书爬虫失败是因为平台采用请求头校验、JavaScript渲染、Token参数和Referer白名单等防护手段;仅无登录、无JS渲染、URL规律明确的静态资源站可用requests+BeautifulSoup爬取。

直接下载在线文档或电子书通常违反服务条款,且多数平台(如豆瓣阅读、微信读书、知网)有反爬机制和访问控制,requests + BeautifulSoup 基本无效;真能跑通的场景非常有限,集中在无登录、无 JavaScript 渲染、URL 规律明确的静态资源站(如某些大学公开课 PDF、政府白皮书页面)。
为什么绝大多数“电子书爬虫”一运行就 403 或跳登录页?
现代文档平台普遍采用以下防护手段:
- 请求头校验:缺少
User-Agent、Referer或Cookie直接返回 403 - JavaScript 渲染内容:真实 PDF 链接藏在
fetch()请求或动态生成的data-url属性里,BeautifulSoup解析 HTML 拿不到 - Token 或时间戳参数:URL 中含
token=xxx或ts=171xxxxx,过期即失效 - Referer 白名单限制:只允许从特定域名(如
https://book.example.com/)发起请求
怎样判断一个页面是否适合用 Python 爬取 PDF?
打开浏览器开发者工具(F12),切换到 Network 标签页,刷新页面后按 Ctrl+F 搜索 .pdf:
- 如果搜索结果里有完整 URL(如
https://example.com/docs/guide.pdf),且点击该请求能看到响应状态码是200,Headers 中Content-Type是application/pdf,说明资源可直链访问 - 如果 PDF 请求是 XHR 类型、带大量 query 参数(如
?id=123&sign=abc&expires=171xxxxx),且请求头含Authorization或临时Cookie,基本不可复现 - 右键“在新标签页打开”该 PDF 链接——若跳转到登录页或报错,说明服务端做了 Referer 或 Session 校验
真能跑通的最小可行代码长什么样?
仅适用于静态 PDF 列表页,例如某开源项目文档站的 /docs/ 目录下全是裸链接:
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
import requests
from bs4 import BeautifulSoup
url = "https://example-docs.com/v2.1/"
resp = requests.get(url, headers={"User-Agent": "Mozilla/5.0"})
soup = BeautifulSoup(resp.text, "html.parser")
for link in soup.find_all("a", href=True):
if link["href"].endswith(".pdf"):
pdf_url = url.rstrip("/") + "/" + link["href"]
r = requests.get(pdf_url, headers={"User-Agent": "Mozilla/5.0", "Referer": url})
with open(link["href"].split("/")[-1], "wb") as f:
f.write(r.content)
注意三点:Referer 必须设为来源页地址;pdf_url 要手动拼接,不能直接用相对路径;每次请求都要带 User-Agent,否则多数服务器直接拒绝。
PDF 下载后打不开或只有几 KB?
常见原因不是代码写错,而是响应体被截断或返回了 HTML 错误页:
- 检查
r.status_code是否为200,不是就打印r.text[:200]看返回的是不是登录 HTML - 用
r.headers.get("Content-Type")确认是不是application/pdf,否则大概率是重定向页或 404 HTML - 有些站点对请求频率敏感,加
time.sleep(1)反而更安全,但别用random.uniform(0.5, 2.0)——规则越简单越不容易触发风控
真正稳定的文档获取方式从来不是爬虫,而是看平台是否提供官方 API(如 GitHub Pages 的 raw 链接)、RSS 订阅源,或者确认其许可证是否允许镜像(如 Creative Commons BY-NC-SA 的电子书,联系作者获取授权后批量存档才是合规做法)。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










