关键在于区分原始html与渲染后dom:curl/wget仅获取服务器返回的静态html,适合无js依赖页面;singlefile等工具保存最终dom快照但可能丢失跨域资源;workbuddy导出带资源的完整站点包,适合离线归档。

批量保存网页HTML源码,关键不在“能不能”,而在“要不要保留动态渲染结果”和“要不要连带资源”。直接用 curl 或 requests.get() 拿到的是服务器返回的原始 HTML(不含 JS 渲染后的内容);而用浏览器自动化或插件(如 SingleFile)拿到的是最终 DOM 快照(含 JS 执行结果,但可能丢失部分跨域资源)。选错方式,保存下来的就不是你看到的页面。
curl / wget 批量抓取原始 HTML 源码
适合:目标网页是静态服务端渲染、无关键 JS 逻辑、且你只需要服务器吐出的原始 HTML。
-
curl和wget都不执行 JavaScript,只发 HTTP 请求,快、轻量、可脚本化 - 保存单页:
curl https://example.com > page1.html;wget -O page2.html https://example.com - 批量操作需配合文件列表:把 URL 写进
urls.txt(每行一个),再用 shell 循环:while read u; do curl -s "$u" > "$(echo $u | sed 's/[^a-zA-Z0-9]/_/g').html"; done - 注意点:遇到 403/429 错误时,需加
-H "User-Agent: Mozilla/5.0"模拟浏览器;中文 URL 要先用urlencode处理,否则会失败
Selenium + Python 批量保存渲染后 DOM
适合:页面严重依赖 JS 加载内容(比如 React/Vue 单页应用、滚动加载列表、登录后才显示的数据)。
- 本质是启动真实浏览器,等页面 onload 或指定元素出现后再提取
driver.page_source(即当前 DOM 的 outerHTML) - 必须显式等待,不能只靠
time.sleep():用WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.TAG_NAME, "main"))) - 示例关键行:
with open(f"page_{i}.html", "w", encoding="utf-8") as f: f.write(driver.page_source) - 坑点:ChromeDriver 版本必须和本地 Chrome 匹配;大量标签页并行会吃光内存;headless 模式下某些字体/CSS 可能不加载,建议先关 headless 调通
SingleFile CLI 批量保存为单文件 HTML
适合:既要 JS 渲染结果,又要所有资源内联(CSS/图片/base64 字体),且希望输出是「一个文件双击即开」。
-
single-file是基于 Chromium 的无头浏览器封装,自动等待页面 idle,还能处理 iframe、Web Worker 等复杂结构 - 批量命令:
single-file --urls urls.txt --output-directory ./saved/,它会自动按 URL 生成合法文件名(如example_com.html) - 比 Selenium 更省心:不用写等待逻辑、不用管 driver 版本、默认启用 service worker 和 JS 执行
- 注意限制:无法保存跨域 iframe 的内容(同源策略);极少数网站会检测
single-file并拒绝响应;大页面(>50MB)可能 OOM
WorkBuddy 导出带资源的 HTML 网站包
适合:需要离线浏览完整站点结构(含目录、跳转、相对路径资源),且要长期归档、多人共享。
- 它不是只存单个 HTML,而是导出一个文件夹:包含
index.html+assets/+ 自动重写的资源路径 + 可选的导航索引页 - 必须用
onload模板触发采集,否则拿到的仍是初始 HTML;导出前确认勾选了「嵌入 CSS/JS」和「下载图片」 - 优势在于工程化:支持失败重试、URL 去重、采集并发数控制、导出命名模板(如
{title}_{date}.html) - 不适用场景:临时跑一次、没装 WorkBuddy、或目标站有严格反爬(它不像 curl 那样容易伪造请求头)
真正麻烦的从来不是“怎么保存”,而是保存之后——你得知道那个 .html 文件里到底有没有你右键看到的按钮、表格或弹窗内容。原始源码和渲染后 DOM 是两套东西,混用就会发现“保存成功”但打开是空页或报错。选工具前,先在开发者工具里按 F12 → Elements 看一眼 下有没有你要的内容,再决定走哪条路。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











