如何用Python把整个网站离线保存到本地?WebSite-Downloader 3步上手全攻略
如何用Python把整个网站离线保存到本地?WebSite-Downloader 3步上手全攻略
【免费下载链接】WebSite-DownloaderA website downloader written with Python项目地址: https://gitcode.com/gh_mirrors/web/WebSite-Downloader
你有没有遇到过这样的崩溃瞬间:收藏夹里躺了三年、每天都要打开的技术博客,某天突然变成一片空白;或者精心整理的在线教程、项目文档,因为网站改版一夜之间"人间蒸发"。网页在服务器上,就像租来的房子,房东随时可能收回。而WebSite-Downloader,这个用Python编写的网站离线下载工具,能帮你在网页消失之前,把整个网站"搬"回家,永久保存在自己的硬盘上。
😱 先讲一个扎心的场景:你的收藏夹正在悄悄贬值
假设你是一名前端学习者,把某大牛的博客当成了"移动图书馆"。某个周末你想翻翻他关于CSS布局的经典文章,点开链接——404 Not Found。博主迁移了服务器,或者域名到期没续费,几千篇文章瞬间蒸发。
浏览器书签、收藏夹、截图?这些只能保链接、保局部,救不了整个网站的结构和交互。更别提出差路上没网、高铁隧道里断网、公司内网访问不了外站这些高频场景了——你需要的不是一个个网页,而是整个网站。
WebSite-Downloader 要解决的问题就一句话:让网站内容真正属于你。
🚀 三秒速览:这个工具到底是什么?
WebSite-Downloader 是一个单文件Python网站爬虫下载器,你只需要给它一个网址,它会自动:
- 顺着页面里的链接一路爬下去,把整站页面抓下来;
- 连CSS样式、JS脚本、图片、字体、PDF、视频一起下载;
- 自动把页面里的所有链接改写成本地相对路径,离线双击就能正常浏览。
而且整个项目只有一个核心文件 WebSite-Downloader.py,没有任何第三方依赖,看懂它、用好它,都不需要高深的技术背景。
🛠️ 3步跑通首次下载:改一行代码就够
第1步:获取项目代码
打开终端,执行:
git clone https://gitcode.com/gh_mirrors/web/WebSite-Downloader cd WebSite-Downloader要求不高,Python 3.6以上就能跑,因为只用了标准库,连pip install都省了。
第2步:改成你想下载的网址
打开 WebSite-Downloader.py,滚动到文件末尾(第424-426行),你会看到两行示例代码:
if __name__ == '__main__': manager = Manager('https://www.example.com') manager.start()把'https://www.example.com'换成你的目标网站,比如:
manager = Manager('https://www.whsw.net/')第3步:运行并等待
python WebSite-Downloader.py程序会立刻启动8个线程并发抓取,控制台实时打印每一条处理记录。当所有线程在60秒内找不到新链接时,下载自动结束,还会发出"滴滴滴"的响铃提醒你。
完成后,打开以网站域名命名的文件夹(比如whsw-site/www.whsw.net/),双击index.html——一个和线上几乎一模一样的本地网站,就这么诞生了。
✨ 亮点拆解:为什么它比"保存网页"强这么多?
亮点一:多线程并发,下载速度直接起飞 ⚡
如果用一个线程老老实实排队下载,大网站可能要跑一晚上。WebSite-Downloader 默认开启8个子线程同时干活,每个线程从共享队列里取链接、各自处理,互不干扰。主线程(Manager)负责收集子线程发现的新链接、去重、再分发,形成一条高效的"流水线"。
它能帮你做什么:几百个页面的中小型网站,通常几分钟就能搞定,不用干等。
亮点二:链接智能重写,离线浏览"以假乱真" 🔗
这是整个工具最精妙的地方。下载时它不只是存文件,还会:
- 把HTML里的
href、src,CSS里的url(...)全部提取出来; - 判断哪些链接属于本站(通过顶级域名比对),自动过滤外站和
javascript:链接; - 把线上绝对链接改写成本地文件之间的相对路径。
所以在本地双击页面,图片、样式、跳转全都正常,就像网站自己搬了个家。
亮点三:格式覆盖广,图片视频文档一个不落 📦
Spider类里内置了一套完整的文件类型白名单,从网页三件套(HTML/CSS/JS)到图片(jpg、png、gif、svg)、字体(ttf、woff、eot)、媒体(mp3、mp4、wav、avi、m3u8)、文档(pdf、doc、xls、zip、rar)……40多种后缀全都能自动识别并下载。遇到视频这类大文件,还会自动把超时时间从20秒放宽到600秒,耐心等你下完。
它能帮你做什么:无论你想存的是图文博客、视频课程还是PDF资料库,一次抓取全带走。
⚙️ 玩法进阶:按你的需求定制下载行为
调整并发线程数,快慢由你掌控
默认8线程对大多数场景足够。如果你的网络带宽富裕、目标服务器也扛得住,可以把第88行的range(8)改成range(16):
# 默认开启8个子线程 for i in range(8): self.spiders.append(Spider(...))温馨提示:线程数不是越大越好,爬得太猛容易给人家服务器造成压力,8~16之间通常比较稳妥。
扩展支持的下载格式
Spider.__init__方法里的other_suffixes集合就是文件类型白名单。想支持新格式?往里加一个后缀即可:
self.other_suffixes = set([ 'js', 'jpg', 'png', 'gif', 'svg', 'json', ... 'webp', 'apk' # 新增你想支持的格式 ])调整重试与容错
每个链接默认最多尝试3次(第78行的max_tries = 3),遇到超时会自动重试;编码方面内置了utf-8 → gb2312 → gbk三级解码兜底,中文老网站也不怕乱码。
🎯 场景落地:这4种人最适合用它
1. 个人知识库搭建者把技术博客、API文档、在线教程下载分类存放,配一个本地全文搜索工具,就是你的私人"数字图书馆"。断网也能随时查阅,学习效率翻倍。
2. 网站站长与内容备份党自己的博客、企业官网,担心服务器故障或误删?每月用 WebSite-Downloader 做一次整站备份,等于给网站上了"异地容灾",成本几乎为零。
3. 需要离线演示的职场人产品演示、技术分享、教学培训,最怕现场断网。提前把官网或产品页整站下载到笔记本,拔掉网线也能流畅演示,气场稳得一批。
4. SEO与网站结构分析师想研究竞品网站的结构、链接关系、资源加载策略?下载到本地慢慢拆解,反复测试,不碰线上服务器,也不留访问痕迹。
❓ 快问快答:新手最常见的6个疑问
Q1:下载会下载整个互联网吗?会不会失控?不会。工具只下载目标网站的同域名内容(通过顶级域名过滤),外链资源会被自动跳过,链接重写后本地页面依然显示正常。
Q2:下载过程中报错怎么办?所有错误都会记录在当前目录的log.log文件里,带时间戳和链接地址。先看日志再定位,绝大多数是目标站点超时或反爬,重试几次或换个时段即可。
Q3:下载完的网站打不开/显示异常?八成是这三个原因:CSS/JS没下全、页面内容是JavaScript动态渲染的、或网站引用了外部CDN。建议先挑静态内容多的网站做测试。
Q4:下载超大网站会不会占满硬盘?会。大型站点动辄几个GB。建议先小范围测试,或只挑重点栏目(比如只下载文档目录)进行抓取。
Q5:会违反法律吗?工具本身是"中性"的,关键看用途。请只下载自己有权限的、或允许存档的内容,遵守网站 robots.txt,别把下载内容商用传播。
Q6:需要安装什么依赖吗?不需要。只用 Python 标准库(urllib、threading、queue、logging等),克隆下来直接跑。
✅ 行动清单:现在就把重要内容留在身边
- 立刻试一次:选一个你常看的静态技术博客,用3步流程跑通首次下载;
- 验证效果:打开本地
index.html,确认图片样式全部正常; - 学会看日志:下载后翻翻
log.log,了解哪些资源失败、为什么失败; - 按需调优:根据网站大小调整线程数、扩展文件类型白名单;
- 建立备份习惯:把"定期整站下载"写进你的内容安全管理清单;
- 分享经验:把这篇文章转给同样"收藏即吃灰"的朋友,一起告别信息焦虑。
在这个信息极易消逝的时代,链接是脆弱的,但本地文件是永恒的。WebSite-Downloader 用不到1000行Python代码,给了我们一项珍贵的能力——在网络世界真正拥有属于自己的内容。无论是保护三年心血的技术收藏,还是构建随身携带的知识库,它都是你数字资产的可靠守门人。
现在,打开终端,跑起你的第一次下载吧。你会发现:离线世界,同样精彩。
【免费下载链接】WebSite-DownloaderA website downloader written with Python项目地址: https://gitcode.com/gh_mirrors/web/WebSite-Downloader
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
