免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

断网也想看官网?Python 网站下载器 WebSite-Downloader 整站离线保存实战

断网也想看官网?Python 网站下载器 WebSite-Downloader 整站离线保存实战 断网也想看官网Python 网站下载器 WebSite-Downloader 整站离线保存实战【免费下载链接】WebSite-DownloaderA website downloader written with Python项目地址: https://gitcode.com/gh_mirrors/web/WebSite-Downloader假设你明天要坐 5 小时高铁路上想翻一套技术文档手机却没信号再或者收藏了大半年的教程某天点开只剩 404——这种时候你需要的是一个能把整站搬回本地的 Python 网站下载器。WebSite-Downloader就是干这个的整个项目只有一个文件不依赖任何第三方库跑起来之后 HTML、CSS、JS、图片、字体一网打尽还会自动把页面里的绝对链接改写成相对路径让你断网也能原样浏览。一次手工保存的翻车现场在遇到这个工具之前我也试过各种笨办法结果都不太体面浏览器书签存下来的只是网址本身页面说没就没等于存了个寂寞。右键另存为单页能看可样式经常稀碎点开二级页面全是死链。截图长得像网页实际是一张不能点的图交互和跳转全部报废。这几个方案的本质问题都一样只保存了看的动作没保存整站的血肉。直到我翻到 GitHub 加速计划下的这个单文件项目 WebSite-Downloader才意识到整站下载根本不用那么折腾——它只靠 Python 标准库就把这件事做完了。别急着上手先认识两个幕后角色打开项目里的WebSite-Downloader.py你会发现核心代码其实只围绕两个类打转Manager和Spider。打个比方Manager是总指挥兼调度台它手里攥着一个待办链接队列Queue把所有新发现的链接去重后排队分发Spider则是 8 个埋头干活的工人各自从队列里取链接抓到网页就解析抓到图片就下载。工人干完活还会把新链接回报给调度台调度台再塞回队列循环往复。几个值得知道的内部设定爬取边界程序只认目标网站的顶级域名top_domain外链一律过滤不会越爬越远。去重机制每个链接只会被下载一次重复链接直接跳过。自动收尾只要连续 60 秒没有新链接出现程序就判断搬完了并自动退出还会用响铃提示你。容错每个链接最多尝试 3 次max_tries失败就记进log.log不会卡死。这套一个调度 多个工人的设计就是它结构清晰、适合边用边学的原因。三行代码把第一个网站搬回家上手路径非常短照着走一遍就明白了。第一步确认环境并拉取代码。只需要 Python 3.6 或更高版本零第三方依赖省掉了pip install这一步。在终端执行git clone https://gitcode.com/gh_mirrors/web/WebSite-Downloader cd WebSite-Downloader第二步改一行 URL。打开WebSite-Downloader.py翻到文件末尾你会看到两行示例代码if __name__ __main__: manager Manager(https://www.example.com) manager.start()把https://www.example.com换成你真正想下载的网址即可比如manager Manager(https://www.whsw.net/)这里的设计很贴心Manager拿到网址后会自己推导出保存目录、协议头和顶级域名你不需要配置任何其他东西start()就是启动键。第三步运行并等待收尾。python WebSite-Downloader.py所有文件会落进以域名命名的文件夹例如whsw-site/www.whsw.net/下载完成后用浏览器打开里面的index.html链接、图片、样式都已本地化跟在线访问几乎一致。这里有个细节如果你重复运行程序会先清空上次的下载目录再重新开始所以想更新内容重跑一遍就行。下载太慢、格式不全、大文件下不动进阶三连了解一下跑通之后你大概率会遇到下面三种需求它们都在源码里留好了开关。① 想提速调并发线程数。默认 8 个爬虫线程在Manager.__init__里for i in range(8): self.spiders.append(Spider(home_dir, home_url, self.link_queue, scheme, top_domain, max_tries))把range(8)改成range(16)通常能明显加快。但别贪心64、128 这种数字会给目标服务器造成过大压力反而容易被封 IP建议从 16 起步看网络状况再微调。② 想多存格式扩展文件白名单。Spider的__init__里有个other_suffixes集合默认包含了 js、jpg、png、pdf、zip、mp3、mp4 等几十种后缀。如果你遇到.webp之类的特殊格式没被下载加一行就行self.other_suffixes.add(webp)原理很简单爬虫靠后缀判断这是网页还是资源网页走解析流程资源直接下载。白名单里加一个后缀就等于告诉它这类文件也给我搬回家。③ 想下大文件走媒体长超时通道。代码里已经预留了media_suffixes集合含 mp3、mp4、pdf、zip、rar 等专门给大文件开绿色通道——普通请求超时 20 秒遇到媒体文件自动放宽到 600 秒避免大文件下到一半就超时作废。如果网站里有特殊的大文件类型把它加进这个集合就能享受同样的待遇。新手最容易踩的四个坑对照自查坑一本地打开样式全乱。多半是资源没下全或者页面引用了站外 CDN。先翻log.log找[failed download]的记录CDN 跨域资源属于外部域名工具默认只抓主域名这类资源需要手动处理或换工具。坑二程序好像永远跑不完。别慌60 秒空闲检测会自动触发程序会响铃提醒你收工。真觉得不对看看队列里是不是有大量失败重试的链接。坑三下载的页面乱码。工具会自动依次尝试 utf-8、gb2312、gbk 三种编码解码绝大多数中文站都能正确处理如果仍乱码去log.log查[UnicodeDecodeError]记录。坑四会不会把整个互联网爬下来不会。顶级域名top_domain就是它的围墙外部链接自动过滤爬取范围始终锁在目标站点内部。现在把收藏夹里舍不得的网站都救回来动手清单很简单确认 Python 版本 ≥ 3.6 → 克隆项目 → 把WebSite-Downloader.py末尾的 URL 换成目标网站 → 运行脚本 → 打开生成的xxx-site/xxx/index.html验收效果。之后按需调线程、加后缀把它调成你自己的版本。最后提醒一句请只下载自己拥有版权、或明确允许离线保存的内容尊重网站的 robots.txt控制抓取频率别给目标服务器添麻烦。在这个信息随时可能消失的时代把重要内容握在自己手里本身就是一种安全感——趁现在挑一个你最舍不得的网站动手试试吧。【免费下载链接】WebSite-DownloaderA website downloader written with Python项目地址: https://gitcode.com/gh_mirrors/web/WebSite-Downloader创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表