如何用 Python 把整个网站离线保存到本地?WebSite-Downloader 上手全攻略
【免费下载链接】WebSite-DownloaderA website downloader written with Python项目地址: https://gitcode.com/gh_mirrors/web/WebSite-Downloader
凌晨两点,你习惯性点开收藏夹里那位大牛的技术博客,准备睡前再刷一篇——404。域名没续费,服务器迁移,三年收藏的几百篇文章一夜之间变成一坨不会跳转的死链接。你突然意识到:网页就像租来的房子,房东随时可能收房。
其实有个用 Python 写的开源小工具WebSite-Downloader,专治这种"内容消失焦虑":你只要给它一个网址,它就会顺着页面里的链接一路爬下去,把整站的 HTML、CSS、JS、图片、字体、PDF、视频全部抓回本地,再把页面里所有链接改写成相对路径——拔掉网线,双击index.html,网站照样能逛。
三分钟跑通第一次下载
整个项目只有一个文件WebSite-Downloader.py,只用 Python 标准库,Python 3.6 以上就能跑,连 pip install 都省了。
第一步,拿到代码:
git clone https://gitcode.com/gh_mirrors/web/WebSite-Downloader cd WebSite-Downloader第二步,打开WebSite-Downloader.py,滚到文件末尾(第 424-426 行),那里躺着两行示例代码:
if __name__ == '__main__': manager = Manager('https://www.example.com') manager.start()把'https://www.example.com'换成你的目标网站,就完成了全部配置。
第三步,运行:
python WebSite-Downloader.py程序会立刻拉起 8 个子线程并发抓取,控制台实时打印每一条处理记录。当所有线程连续 60 秒找不到新链接,下载自动结束,终端还会"滴滴滴"连响 10 声提醒你收工。打开以网站域名命名的文件夹(比如example-site/www.example.com/),双击index.html——一个和线上几乎一模一样的本地网站诞生了。
它凭什么能做到?两个机制讲人话
第一个机制:一条快递分拣流水线。主线程Manager是分拣中心,8 个Spider子线程是快递员。快递员每抓到一个页面,就把页面里新发现的链接扔回分拣中心,中心去重后重新派单。谁闲谁接单、抓完就找下一个,几百个页面的中小型网站通常几分钟搞定,全程不用你干预。
第二个机制:只搬自己家,不乱闯邻居。它不会把整个互联网搬回来——每个链接都要先过一道"户口检查":通过顶级域名比对,只留下属于目标网站的链接,外站资源、javascript:伪链接一律过滤。更妙的是链接重写:HTML 里的href、src,CSS 里的url(...)全部提取出来,按相对路径重新拼好。所以本地页面点哪儿跳哪儿,图片样式全部在位,就像网站自己搬了个家。
顺带一提,它连编码都给你兜底了:按utf-8 → gb2312 → gbk三级解码,中文老网站也不会乱码;遇到 mp4、pdf 这类大文件,超时时间自动从 20 秒放宽到 600 秒,慢慢等你也下得完。
一个真实场景:把"移动图书馆"揣进口袋
我认识一个前端学习者,把某技术博客当成随身图书馆。以前他出差坐高铁,隧道里没网,只能对着收藏夹干瞪眼。后来他用 WebSite-Downloader 把整个博客下载到笔记本,再把xxx-site文件夹同步进手机,从此:
- 以前:高铁隧道里对着 404 叹气;
- 现在:断网也能随手翻 CSS 布局的经典文章,离线全文检索;
- 以前:网站一改版,收藏夹集体报废;
- 现在:每月花十分钟重新抓一次,本地永远是最新版。
他也老老实实告诉我:下载完的网站偶尔样式会乱——多半是原站用了外部 CDN 或 JS 动态渲染,这类站点抓下来会"缺胳膊少腿"。所以别指望它通吃所有网站,静态内容多的博客、文档站才是它的主场。
避坑地图:你可能踩到的四个坑
- 下载完页面白花花没样式→ CSS/JS 没下全或走了外部 CDN,先拿静态站练手,别一上来就抓单页应用。
- 页面是 JS 动态渲染的,抓回来是个空壳→ 工具不会帮你执行 JavaScript,选服务端渲染、内容写在 HTML 里的网站。
- 大网站把硬盘塞满了→ 会,真会。先小范围测试,或只挑重点栏目抓。
- 控制台飘红一片→ 别慌,所有错误都带时间戳记在当前目录的
log.log里,先看日志再定位,多半是目标站超时或反爬,换个时段重试即可。
下一步:现在就动手
- 挑一个你常看的静态技术博客,用上面的三分钟流程跑通第一次下载;
- 下载完打开本地
index.html检查图片样式,再翻翻log.log看看哪些资源失败了; - 按需微调:第 88 行的
range(8)可以改成 16 提速,第 134 行的other_suffixes白名单可以加后缀; - 把"定期整站备份"写进你的内容管理清单——每月花十分钟,等于给网站上了份零成本的"异地容灾"。
另外提醒一句:工具是"中性"的,请只下载自己有权限或允许存档的内容,遵守目标站的 robots.txt,更别把下载内容商用传播。
链接是脆弱的,但本地文件是永恒的。趁网页还在,把它搬回家。
【免费下载链接】WebSite-DownloaderA website downloader written with Python项目地址: https://gitcode.com/gh_mirrors/web/WebSite-Downloader
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考