尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

不联网也能逛完整站?Python 网站下载工具让整站保存到本地只需一次运行

不联网也能逛完整站?Python 网站下载工具让整站保存到本地只需一次运行 不联网也能逛完整站Python 网站下载工具让整站保存到本地只需一次运行【免费下载链接】WebSite-DownloaderA website downloader written with Python项目地址: https://gitcode.com/gh_mirrors/web/WebSite-Downloader周六要出差高铁要穿过一段近两小时的无信号隧道而领导要的产品手册是一整套在线文档——页面套着页面图片连样式。想提前把整个网站保存到本地一时却想不出趁手的工具。WebSite-Downloader一个用 Python 编写的网站离线下载工具就是为这种断网也能看的网页准备的现成答案。先对齐一个概念另存为 ≠ 整站保存到本地很多人第一次被保存网页坑过在浏览器里按 CtrlS以为万无一失结果离线打开发现图片是一堆裂图、样式全部错乱点击链接还会跳出目标地址无效。原因很简单——另存为只抓了这一个页面的骨架却没带走它的血肉。一个真实网站从来不是孤零零的 HTML它背后还挂着决定排版外观的 CSS 样式表控制交互和动画的 JS 脚本分散在各目录下的图片、字体、图标可能还有 PDF、压缩包、音频视频等附属资源。所以如何把整个网站保存到本地和保存一个网页是两个量级的问题。前者要求工具能顺着页面里的链接一路爬下去把所有相关资源都搬回来再把页面之间的跳转关系重新接好让它在断网环境下依然以假乱真。这正是 WebSite-Downloader 要做的事而且它把这个复杂流程压缩进了一个文件里。工具长什么样一个文件不需要装任何依赖WebSite-Downloader 的体量相当克制整个项目只有一个核心脚本全部基于 Python 标准库urllib、threading、queue、logging 这些实现零第三方依赖。只要你的机器上有 Python 3.6 或更高版本连pip install这一步都可以跳过克隆下来直接就能跑。它也不要求你懂爬虫原理。工具内部替你处理好了绝大多数脏活自动携带浏览器风格的请求头很多站点不用专门伪装内置 Cookie 处理能维持简单会话对 HTTPS 站点做了兼容处理访问更省心。一句话理解你只需要提供目标网址剩下的事交给它。上手跑通如何把整个网站保存到本地四步走完整套流程短到不需要看文档。先把代码拿到手git clone https://gitcode.com/gh_mirrors/web/WebSite-Downloader cd WebSite-Downloader然后打开WebSite-Downloader.py翻到文件末尾找到那两行示例代码把示例网址换成你的目标站点if __name__ __main__: # 把这里换成你想整站保存到本地的目标网址 manager Manager(https://docs.example.com/) manager.start()接着运行python WebSite-Downloader.py程序启动后控制台会持续打印每一条处理记录你可以直观地看到正在抓哪个页面、下载哪个资源。当所有线程在60 秒内找不到任何新链接时说明这座信息迷宫已经探索完毕程序自动收工并发出一连串滴滴的响铃提醒你完工了。最后去当前目录下找一个以站点名-site/域名命名的文件夹双击里面的index.html——一个和线上几乎一致、完全离线可用的本地站点就这样诞生了。整个过程中你唯一动手改过的只有一行网址。离线后为何依旧像原站三台关键发动机第一次打开下载结果的人多半会愣一下这跟我线上的网站有什么区别区别藏在三个机制里。多线程并发八个人同时开工如果只有一个线程老老实实排队抓取几十上百个页面的大站可能要跑到深夜。工具默认开启8 个并发线程主线程负责汇总去重、统一派发任务子线程各自从队列里取链接、处理、回报新发现形成一条互不干扰的流水线。几百页的中小型网站通常几分钟就能收工你泡杯茶的工夫就够了。链接重写把别人家的坐标改成自家门口的路线这是整个工具最见功力的一步。下载时它会解析 HTML 里的href、src以及 CSS 里的url(...)提取出所有链接然后做两件事同域名过滤通过顶级域名比对只保留本站内容外站链接、javascript:这类伪链接、data:image内嵌图片都会被自动剔除相对路径重写把原本指向线上的绝对地址改写成本地文件之间的相对路径。相当于把网站里所有门牌号都重新编成了从你家门口出发的走法——本地双击页面图片、样式、跳转全部正常因为它已经是一个自洽的迷你网站。格式白名单与超时容错大文件也不会半途而废Spider类里内置了一张三十多种后缀的白名单网页三件套、图片、字体、音视频、文档、压缩包全在覆盖范围内。更贴心的是遇到 mp4、pdf、zip 这类体积大的文件超时时间会自动从 20 秒放宽到 600 秒不会因为等得太久就轻易放弃。抓取过程中的失败链接会带着时间戳写进当前目录的log.log方便你事后逐条排查编码方面则有utf-8 → gb2312 → gbk三级解码兜底遇到编码不规范的中文老站点也不至于满屏乱码。两个旋钮调出更适合你的下载节奏工具默认的配置对大多数场景都够用但如果你愿意还有两个地方可以按需微调。旋钮一并发线程数带宽充足、目标服务器扛得住时可以把线程数往上提。在Manager.__init__里找到创建子线程的循环# 默认 8 个并发线程可根据网络和服务器情况调整 for i in range(8): self.spiders.append(Spider(...))把8改成16下载速度肉眼可见地提升。不过要提醒一句线程数不是越大越好爬得太猛容易给对方服务器造成压力8~16 之间通常是比较稳的区间。旋钮二文件类型白名单想支持白名单之外的新格式往集合里追加一个后缀即可self.other_suffixes set([ js, jpg, png, gif, svg, json, ... webp, apk # 在列表里新增你需要的格式 ])加完即生效不需要动其他任何代码。四条边界出发前记牢工具好用但使用边界同样重要。开始之前建议先在心里过一遍这四条它只碰同域名内容。工具会通过顶级域名严格过滤外链资源自动跳过不会失控地爬遍整个互联网。只下载你有权限的内容。工具本身是中性的请把它用在自己的站点、被允许存档的内容或公开资料上并尊重目标站点的 robots.txt 约定。动态站点要降低预期。如果页面内容依赖 JavaScript 异步渲染抓下来的可能只是空壳。测试时优先选静态内容多的站点效果最理想。大站会占硬盘。大型站点动辄几个 GB建议先小范围试跑再决定要不要全量下载。遇到下载失败也别慌翻开log.log绝大多数问题都是目标站超时或临时反爬换个时段重试即可。写在最后能被带走的才是你的列车钻进隧道手机信号一格一格熄灭朋友圈刷不动了、在线文档打不开了——而你硬盘里那个以域名命名的文件夹却依旧安静地等在那里。双击index.html熟悉的页面在浏览器里瞬间展开没有转圈没有报错像随身带了一本会自己翻页的说明书。链接和在线服务都是有保质期的它们寄存于别人的服务器上访问权限说收回就收回。但本地文件不会过期。当你真正把一套网站完整地放进自己的硬盘你就从访客变成了内容的保管者——网络世界很大但能被你带走的才真正属于你。【免费下载链接】WebSite-DownloaderA website downloader written with Python项目地址: https://gitcode.com/gh_mirrors/web/WebSite-Downloader创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表