整站离线下载一次搞定:书签、截图全部出局,WebSite-Downloader 把网站搬回家 📅 2026/8/17 19:48:50 整站离线下载一次搞定书签、截图全部出局WebSite-Downloader 把网站搬回家【免费下载链接】WebSite-DownloaderA website downloader written with Python项目地址: https://gitcode.com/gh_mirrors/web/WebSite-Downloader这篇文章我打算用一场旧方法淘汰赛来讲书签、截图、浏览器另存为、命令行工具四个最常见的保存网站手段我挨个拉上台试一遍看它们分别输在哪儿最后再拆一个赢下整场比赛的选手——WebSite-Downloader一个用 Python 写成的整站离线下载工具。比赛开始前先看你的真实处境。周三凌晨 1 点 47 分你打开收藏夹里那位技术博主的网站准备接着读上周没看完的系列文章。页面加载到一半白屏。刷新404 Not Found。你愣了十几秒开始翻聊天记录、翻邮件、翻云盘——最后只能承认三年来你只是收藏了这个网站从来没有真正拥有过它。收藏夹里躺着的从来不是内容只是一串随时会失效的地址。 书签、截图、另存为逐个出局四种旧办法为什么救不了你先把四种旧办法拉上台看它们各自的死因。书签只存地址不存内容链接一断全盘归零书签的本质是一张地址条。地址活着的时候它带你到内容地址一死它只是一行没用的字符。博主换服务器、域名到期不续费、网站改版换路径——任何一个变故都能让几百个书签一夜之间集体失效。它保存的是去那里的路而不是那里的东西。截图有像素没有交互看得了图点不了按钮截图能留下长相留不住行为。菜单点不开、文章翻不了页、代码高亮糊成一片。保存一百张截图等于保存一个无法翻动的相册。对要离线读文档、做演示的人来说这远远不够。浏览器另存为一次救一页40个页面就要40次另存为能完整救下一个页面但一次只有一页。一个 40 页的教程你要手动点开、另存、命名、整理 40 次页面上引用的 CSS、图片还经常被浏览器拆散另存回来的页面有时连样式都是坏的。手动操作到第 15 页你就开始怀疑人生。命令行工具功能全但配置劝退新手第一关就卡住wget、httrack 这类工具确实能整站抓取但参数又多又碎镜像模式、递归深度、链接转换规则……新手光是把参数拼对就要翻半天文档。为了存一个网站先得学会一门咒语这个门槛本身就挡住了大多数人。四轮淘汰赛打完留下的需求其实很朴素一个不用学咒语、能把整站连同资源一起带走、离线打开还和在线一样的工具。零依赖的整站离线下载方案长什么样一个文件扛下所有WebSite-Downloader 解决的就是这件事用不到 1000 行 Python把整个网站连同图片、样式、脚本、文档一起抓回本地自动把页面里所有链接改写成相对路径离线双击就能像在线一样浏览。它和同类方案的本质区别用一个表就能说清方案能带走什么离线体验上手难度书签一串地址链接一断全废零截图一张图不能点、不能翻零另存为单个页面样式常丢、要一页页救低wget 等命令行整站参数劝退新手高WebSite-Downloader整站 全部资源链接重写离线可逛低更难得的是整个项目只有WebSite-Downloader.py一个核心文件纯 Python 标准库写成零第三方依赖Python 3.6 以上就能跑连pip install都省了。 3步把整站备份到本地改一行网址就开跑拿到它只要三步最省事的那条路。第一步获取代码git clone https://gitcode.com/gh_mirrors/web/WebSite-Downloader cd WebSite-Downloader第二步打开WebSite-Downloader.py滚动到文件末尾把示例网址换成你的目标站点if __name__ __main__: manager Manager(https://www.whsw.net/) manager.start()第三步运行python WebSite-Downloader.py就这三步没有第四步。不用装依赖不用配环境改一行网址剩下的交给程序。运行后程序立刻开启 8 个子线程并发抓取控制台实时打印每一条处理记录。当所有线程在60 秒内找不到新链接时下载自动结束终端还会响起滴滴滴的提示音。去以域名命名的文件夹比如whsw-site/www.whsw.net/里双击index.html——一个和线上几乎一模一样的本地网站就这么诞生了。 为什么搬回家的网站离线还能正常逛链接重写是关键这是整个工具最妙的设计。普通下载器把文件搬回来就完事了但页面里那些href、src还指着线上地址离线双击必然打开失败。WebSite-Downloader 的做法是边搬边改门牌号。它把 HTML 里的链接、CSS 里的url(...)全部提取出来先过滤掉外站、javascript:、data:image这类无效地址再通过顶级域名比对确认哪些属于本站最后把线上绝对链接改写成本地文件之间的相对路径。搬完家之后页面之间依然互相指得对图片、样式、跳转全部正常。这就是离线可逛和离线能打开一张皮的本质区别。8线程流水线加60秒自动收尾下载自己知道什么时候停抓取不是瞎抓。8 个子线程Spider从共享队列里取链接各自干活主线程Manager负责回收子线程发现的新链接、去重、再分发形成一条高效的流水线。60 秒找不到新链接就自动收尾再响铃 10 次提醒你——你不用守着终端也不用担心它停不下来。编码三级兜底与30多种格式白名单老网站和视频文件都接得住编码兜底内置utf-8 → gb2312 → gbk三级解码遇到中文老网站也不怕乱码。格式白名单从网页三件套到 jpg、png、gif、svg、ttf、woff、mp3、mp4、pdf、doc、xls、zip、rar……30 多种后缀自动识别并下载。大文件放宽超时默认超时 20 秒遇到视频、压缩包这类大文件自动放宽到600 秒耐心等它下完。容错重试每个链接最多尝试 3 次超时自动重试请求自动带 Cookie 和浏览器 UA降低被拒概率。⚙️ 进阶调优线程数与格式白名单这样改默认 8 线程对多数场景够用。带宽富裕、目标服务器扛得住的话把第 88 行的range(8)改成range(16)即可提速。注意线程不是越大越好爬太猛容易给人家服务器造成压力8~16 之间通常比较稳妥。想支持新格式往Spider.__init__里的other_suffixes集合加个后缀就行self.other_suffixes set([js, jpg, png, gif, svg, json, webp, apk, ...])这4类人最适合把整站下载纳入日常个人知识库搭建者把技术博客、API 文档整站下载分类存放断网、出差路上随时查阅等于给自己建了座离线图书馆。需要离线演示的职场人产品演示、教学培训最怕现场断网。提前把官网整站搬进笔记本拔掉网线也能流畅讲完气场稳稳的。网站站长与备份党自己的博客、企业官网每月做一次整站备份等于给网站上了异地容灾成本几乎为零。SEO 与竞品分析者把竞品网站下到本地慢慢拆解结构、链接关系、资源策略反复测试不碰线上服务器。️ 新手最容易踩的4个坑和对策坑一JS 动态渲染的网站下下来是空壳。页面内容全靠 JavaScript 加载的站抓到的是骨架。对策先拿静态内容多的网站测试这类站的成功率最高。坑二外站 CDN 资源不会下载。工具只抓同顶级域名的资源引用第三方 CDN 的图片、字体可能缺失。对策这不是 bug是设计——先确认目标网站的资源是否自托管。坑三超大网站会占满硬盘。大型站点动辄几个 GB。对策先小范围测试或只抓重点栏目别一次贪多。坑四报错时一脸懵。所有错误都会带时间戳记进当前目录的log.log。对策先看日志再定位绝大多数是目标站点超时或反爬换个时段重试即可。✅ 下一步清单挑一个你常看的静态技术博客用上面 3 步跑通第一次整站下载双击本地index.html确认图片、样式、跳转全部正常翻一遍log.log看看哪些资源失败、为什么失败按网站大小调整线程数、补充格式白名单把定期整站下载写进你的内容安全管理清单。收藏夹是你的愿望清单本地硬盘才是你的仓库。别等到 404 那天才想起备份——今天就把最重要的那个网站搬回家。【免费下载链接】WebSite-DownloaderA website downloader written with Python项目地址: https://gitcode.com/gh_mirrors/web/WebSite-Downloader创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考