爬虫写书

提示词:爬取虚幻引擎文档并生成中文 Word 书
目标:爬取 Epic 官方虚幻引擎 5.7 中文版文档,按指定章节合并生成一本 Word(.docx)书,目标 400–500 页。

站点与抓取

站点:https://dev.epicgames.com/documentation/zh-CN/unreal-engine/<slug>?application_version=5.7
单页应用,后端 JSON API 被 Cloudflare 拦截,改用 SSR HTML 递归抓取;正文在 #blocks-renderer,子页面链接从 a.document-list-card 提取(章节根无卡片时回退全文正则)。
每章生成 tree_<slug>.json 目录树;HTML 缓存到 cache/,图片缓存到 img_cache/,带 Cloudflare/403 重试。
子页链接的 href 不带 zh-CN 段,需由 BASE 提供语言前缀;CHILD_RE 语言段设为可选。
标题后缀剥离兼容中/英(| 虚幻引擎 5.7 文档 | Epic Developer Community)。
书本范围(可改)

指定章节合并成一本 docx(非每章一份)。默认前 5 章:新内容 / 理解基础知识 / 管理内容 / 构建虚拟世界 / 设计视觉渲染图形。
封面:书名「虚幻引擎 5.7 文档」+ 自动目录域(TOC);每章根页标题作 Heading 1,子页 H2、孙 H3。
内容精简(去冗余)

去元信息:删除每页「原文: url」链接、封面「来源」行。
删代码块:<pre> 不渲染(内联 <code> 保留)。
保留:正文段落、h2/h3 小标题、表格、列表、引用、图片。
导航卡片 ul.block-document-list:缩略图为装饰,只取标题文本作列表项。
图片处理(下载并放到原位置)

<block-image> 主图、<div class="block-comparison-slider"> 对比滑块双图、<li> 内联图:下载后用 add_picture 插到对应段落位置,居中,超 6 英寸等比缩到页宽。
<block-video>:忽略(不输出占位)。
GIF:取首帧转 PNG(Word 不支持动画,体积大减)。
403/429 限流:短退避(5s)重试 1 次仍失败则跳过,用 [图片: alt] 占位;404/401/410 永久错误立即跳过;相对路径无 scheme 立即跳过;SVG 等无法解码的占位。
成功下图后 sleep 0.3s 轻限速,避免触发 CDN 403。
用 PIL 嗅探格式/尺寸(content-type 常为 octet-stream)。
运行

命令:python ue57_docs.py book(还有 crawl/word/all)。
用 python -u(非 conda run)避免输出缓冲;长任务后台跑。
输出

word/虚幻引擎_5_7_文档.docx,文件尽量小(GIF 已转首帧;大高分辨率 PNG 可再缩到 1500px 进一步压缩)。

posted on 2026-07-09 10:21  张博的博客  阅读(3)  评论(0)    收藏  举报

导航