知识星球内容会消失吗?我用 zsxq-spider 把所有帖子导出成了一本 PDF 电子书
知识星球内容会消失吗?我用 zsxq-spider 把所有帖子导出成了一本 PDF 电子书
【免费下载链接】zsxq-spider爬取知识星球内容,并制作 PDF 电子书。项目地址: https://gitcode.com/gh_mirrors/zs/zsxq-spider
加入知识星球的那一刻,你大概没想过"有一天这些内容会看不到了"这个可能性。但现实是:账号可能被限制、平台可能改版、星球可能停止更新。与其等那一天到来,不如现在就动手把内容抓下来存成 PDF。开源工具 zsxq-spider 正是为此而生——它把知识星球里的帖子、图片和评论整理成排版好的电子书,把配置写好之后,往后每次运行都是几分钟的事。
先从一段真实经历说起
两年前,我花几百块加入了一个技术星球,里面有大量实战笔记和答疑记录。结果上个月到期后才发现,这个星球已经停止更新,连帖子列表都开始加载缓慢。那一刻我意识到:付费买来的不是内容本身,而是一段"随时可能失效的访问权限"。
我试着手动备份,结果很快放弃了:
- 帖子有几百条,逐条截图要按到手酸,图片还容易糊;
- 评论区里的高价值补充内容,截起来更是没完没了;
- 整理出来的文件东一个西一个,根本没法检索,和"电子书"三个字完全不沾边。
我需要的是"一键把整个星球变成一个文件"的方案。搜了一圈,最后留下了 zsxq-spider 这个项目,跑通之后它的产出确实超出了我的预期。
zsxq-spider 到底做了什么
简单说,它是一个纯 Python 脚本:通过知识星球开放的接口按页拉取主题数据,把正文、图片、评论整理成 HTML,最后借助 wkhtmltopdf 渲染成一份完整 PDF。整个过程里不需要手动复制粘贴任何一条内容。
它内部能识别的帖子类型包括提问、发帖、任务、解决方案四类,每一条都会以"序号 + 时间"命名,精华帖还会自动打上标记。如果你留意过知识星球里的各种富文本,会发现 @提及、话题标签、外链这些元素也都被转成了普通文字或可点击链接,不会在 PDF 里显示成一堆乱码。
| 功能点 | 对应开关 | 什么场景下值得调整 |
|---|---|---|
| 图片下载并嵌入 PDF | DOWLOAD_PICS | 开着更完整,关掉则速度明显提升 |
| 评论一并打包 | DOWLOAD_COMMENTS | 问答型星球建议保留,讨论区价值很高 |
| 只导出精华内容 | ONLY_DIGESTS | 内容量大、时间紧时只留精华 |
| 按时间区间截取 | FROM_DATE_TO_DATE | 大批量归档时按年份分批,便于管理 |
还有两个容易被忽视的细节:一是图片会以 base64 编码直接内嵌进 PDF,所以生成的电子书是"自带图片"的,拷到任何设备上都不缺图;二是文件附件不会下载,只会以列表形式提示你"需访问网站下载",这是作者刻意保留的行为,避免过度抓取。
动手前,先把三件东西准备好
环境准备其实只有三件事,每一件都缺一不可:
| 组件 | 它负责什么 | 怎么装 |
|---|---|---|
| Python 3.7+ | 脚本运行环境 | 官网下载安装即可 |
| wkhtmltopdf | 真正把 HTML 渲染成 PDF 的引擎 | 官网下载后,把 bin 目录加入系统 PATH |
| pdfkit / BeautifulSoup4 / requests | 脚本依赖的 Python 库 | 用 pip 一次性安装 |
这里有个值得注意的点:很多人导出失败,不是代码问题,而是 wkhtmltopdf 没装或者没进 PATH。pdfkit 只是"传话筒",真正干活的是 wkhtmltopdf,这一步务必先验证。
git clone https://gitcode.com/gh_mirrors/zs/zsxq-spider cd zsxq-spider pip install pdfkit BeautifulSoup4 requests填写配置:三组参数看懂就够
crawl.py顶部有一块配置区,看着参数很多,其实按用途分成三组就非常清晰。
第一组:告诉脚本"你是谁、要去哪"
访问令牌ZSXQ_ACCESS_TOKEN需要你在浏览器里登录一次知识星球,然后在开发者工具的 Cookie 中找到zsxq_access_token字段复制过来。USER_AGENT必须和你登录时用的浏览器一致,这两者组合相当于你的"门票",对不上就会被接口拒之门外。小组 ID 则可以直接从星球地址栏的网址里抄,就是group/后面那一串数字。
ZSXQ_ACCESS_TOKEN = '粘贴浏览器Cookie里的zsxq_access_token' USER_AGENT = '粘贴你浏览器的User-Agent,必须和登录时一致' GROUP_ID = '452445212848' # 从星球网址里抄下来的那串数字 PDF_FILE_NAME = '我的知识星球备份.pdf'第二组:决定这次导出什么
这一组回答的是"要完整归档,还是只要一部分"。全部打开意味着最完整也最慢,如果只是先试水,可以把图片下载关掉。
DOWLOAD_PICS = True # 图片是否下载进PDF,开着更慢但更完整 DOWLOAD_COMMENTS = True # 评论是否一起打包 ONLY_DIGESTS = False # 只想保留精华内容就改成 True FROM_DATE_TO_DATE = False # 想按时间段分批导出就改成 True EARLY_DATE = '2020-01-01T00:00:00.000+0800' # 区间起点,留空表示不限制 LATE_DATE = '2020-12-31T00:00:00.000+0800' # 区间终点,留空表示不限制第三组:控制节奏和临时文件
爬虫的本质是高频访问别人的服务器,脚本已经内置了"文明模式",保持默认即可。调试用的DEBUG和DEBUG_NUM建议第一次跑时打开,先导出少量内容验证配置。
COUNTS_PER_TIME = 30 # 每页拉取的主题数量,上限 30 SLEEP_FLAG = True # 是否在请求之间休息 SLEEP_SEC = 2 # 每次请求间隔 2 秒,别给服务器添负担 DEBUG = True # 第一次运行建议开 DEBUG 试跑 DEBUG_NUM = 30 # 只先处理 30 条验证效果 DELETE_PICS_WHEN_DONE = True # 跑完后清理下载的图片 DELETE_HTML_WHEN_DONE = True # 跑完后清理中间生成的 HTML运行起来,看看它到底在干什么
配置完成后,在项目目录执行:
python crawl.py脚本的整个处理流水线大致是这样的:
- 拼接接口地址,带上 Cookie 请求第一页主题数据;
- 返回的 JSON 会先落盘到
temp.json,方便你随时查看原始数据排查问题; - 逐条解析主题:识别类型、提取作者与时间、把富文本里的特殊标签转换成可读内容;
- 需要图片时,先下载到本地
images目录,再以 base64 形式塞回 HTML; - 全部主题处理完后,交给 wkhtmltopdf 结合
temp.css一次性渲染成 PDF; - 按配置自动清理临时文件,避免目录越积越乱。
终端会实时打印正在请求的地址,进度透明可见。如果开了DEBUG,处理到设定条数就会停,正好用来确认配置有没有写对。
电子书好不好看,由 temp.css 决定
生成的 PDF 样式完全由根目录的temp.css控制。项目默认的排版考虑到了"手机端阅读"的场景,字号偏大,目录和正文的层次很清晰:
/* 标题居中放大,一眼就能扫到结构 */ h1 { font-size: 40px; color: red; text-align: center; } /* 正文字号拉大,躺着看也不费眼 */ p { font-size: 30px; } /* 图片自适应宽度、居中展示,加一点阴影更有质感 */ img { max-width: 100%; margin: 20px auto; display: block; box-shadow: 1px 4px 16px 8px #5CA2BE; }如果你想追求更素雅的风格,把h1的颜色改成深灰、字号收到 28px 左右,页面数量会明显变少,更适合打印或放进文档管理工具。改完直接重新运行一遍脚本即可,不需要动任何 Python 代码。
三条进阶用法,让导出更顺手
给大体量星球做时间切片。动辄上千条的星球,一次全量导出耗时很长且中途出错不好定位。把FROM_DATE_TO_DATE打开,按年份设好起止时间分多次运行,每次产出一本当年的电子书,出错时也只需重跑对应年份。
用精华模式快速沉淀。需要给团队或朋友分享时,把ONLY_DIGESTS改成True,只导出被标记为精华的内容,生成速度和质量都很理想。
控制频率,做个懂分寸的访客。保持SLEEP_FLAG开启,不要为了赶时间把间隔调成 0。知识星球是很多创作者的付费收入来源,频繁请求既影响服务稳定性,也容易让账号被盯上。
容易被忽略的五个坑
| 现象 | 原因 | 处理办法 |
|---|---|---|
| 请求返回失败或认证错误 | Token 失效,或 UA 与登录时不一致 | 重新登录复制最新 Token,并核对 UA |
| 提示"电子书生成失败" | wkhtmltopdf 缺失或不在 PATH | 安装并配置环境变量,先单独验证它能跑通 |
| 图片下载中断 | 网络波动 | 脚本内部会重试下载,耐心等待即可 |
| 全量导出太久 | 单次请求数据量过大 | 开 DEBUG 试跑,再按时间段分批导出 |
| 内容涉及版权争议 | 随意传播生成的 PDF | 自用归档没问题,转发前先征得作者同意 |
把内容备份成习惯
收藏夹会失效,会员会到期,平台会改版,但一本躺在你自己硬盘里的 PDF,只要你不删它,它就会一直在那里。几百块的星球会员费是小事,真正珍贵的是里面沉淀下来的那些讨论、解答和记录——它们不该只存在于别人的服务器上。
我的建议是:现在就 clone 下这个项目,把 Token 和小组 ID 填好,开 DEBUG 先跑 30 条。几分钟后,你就能拿到第一本属于你自己的电子书。从那天起,把"每月归档一次当月内容"当成例行公事,你会发现,内容的安全感是任何收藏功能都给不了的。
【免费下载链接】zsxq-spider爬取知识星球内容,并制作 PDF 电子书。项目地址: https://gitcode.com/gh_mirrors/zs/zsxq-spider
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考