尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
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你有没有发现自己越来越依赖那些活在别人服务器上的网页技术文档、教程、灵感来源……它们平时用着顺手可一旦站点关停、域名过期这些内容说没就没连备份的机会都不留。WebSite-Downloader正是为这个痛点而生的一个用 Python 写成的网站离线下载工具能把整站页面连同 CSS、图片、脚本一起搬回你的硬盘断网也能看。举个我亲历的例子帮客户做官网迁移时原外包团队跑路服务器随时可能停摆几十页产品资料、几百张配图危在旦夕。那一刻我比任何时候都确信——链接只是借来的访问许可文件才是自己的。先看看它能产出什么下载结果长什么样WebSite-Downloader 不挑平台也不挑站型。给它一个网址它就会顺着页面链接一路爬把 HTML、CSS、JS、图片、字体、PDF 甚至视频全部抓下来并自动改写成本地可用的相对路径。抓取https://www.whsw.net/之后你会在本地得到一个大致这样的目录whsw-site/ └── www.whsw.net/ ├── index.html ├── css/ ← 样式表已下载并改写 ├── js/ ← 脚本已下载 └── images/ ← 图片已下载双击index.html页面能像线上一样展示样式生效、图片能看、链接能点——因为它把所有页面里的href、src以及 CSS 里的url(...)全部重写成了本地文件之间的相对路径。整站搬迁不外如此。三分钟跑通首次下载改一行代码即可这个项目简单到单文件即全部没有第三方依赖装好Python 3就能跑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()第三步运行并等待python WebSite-Downloader.py脚本立刻拉起 8 个子线程并发抓取控制台逐条打印处理记录当所有线程在 60 秒内都找不到新链接时下载自动收尾并以响铃提示完成。之后到以域名命名的文件夹里双击index.html即可离线浏览。藏在源码里的门道三个设计细节值得细看整个项目只有两类角色Manager负责调度Spider继承自threading.Thread负责搬砖。理解了它们也就理解了整份代码。门道一生产-消费式的多线程流水线。Spider抓完一个页面会顺手把页面里出现的有效链接塞进自己的links集合Manager在主循环里不断轮询各线程把新链接去重后丢回公共队列link_queue源码第 99-113 行。去重靠一个set完成还顺带砍掉锚点#后面的部分和超过 250 字符的超长链接保证 8 个线程各取所需、互不干扰。门道二只抓本站内容靠顶级域名把关。is_valid_link第 210 行会过滤掉javascript:、邮件地址和data:image内嵌图片对形如http://...的外站链接则拿netloc里一级域名往后的部分与主域名比对不一致直接放弃。所以你下载的是这一个站而不是半个互联网。门道三链接重写 三级编码兜底。handle_html和handle_css用正则抽出href、src、url(...)逐条改写成相对路径再写回文件落盘路径则交给get_abs_filepath统一映射。读取响应内容时脚本依次尝试utf-8、gb2312、gbk三种解码第 288-302 行老式中文站点也不容易乱码。如何按需改装线程数、格式与超时都能调并发线程数默认 8 个第 88 行的range(8)。网络带宽充裕、对方服务器扛得住时改成range(16)即可加速建议不要盲目加到太大爬太猛容易给对方服务器造成压力。支持的文件格式Spider.__init__里的other_suffixes集合第 134-138 行就是白名单想支持新后缀直接往里加比如webp。超时与重试全局默认超时 20 秒第 15 行遇到 mp3、mp4、pdf、zip 这类大文件会自动放宽到 600 秒第 310-312 行每个链接最多尝试 3 次第 78 行的max_tries超时类错误会自动重试无需人工干预。输出目录默认按站点名-site/域名组织规则写在Manager.__init__里想换个存放位置改一行即可。新手避坑指南5 个高频问题动态渲染的站抓不全。脚本只解析静态 HTML/CSSVue、React 这类纯 JS 渲染的单页应用可能只留下一副空壳。首次测试请选静态内容较多的站点。外部 CDN 资源不会跟着下载。字体、统计脚本、第三方图床都在域名之外会被过滤器拦下本地打开时这些外链加载失败属正常现象。重复运行会先清空目录。Manager启动时发现同名文件夹存在会直接删除重建第 69-70 行不要指望增量更新也别把其他重要文件放进输出目录。大站磁盘占用很猛。视频、PDF、大图动辄几个 GB第一次建议只抓一个小栏目试水再决定要不要全量。报错先看log.log。脚本把每次失败都按时间戳记在当前目录的这个文件里超时、反爬、连接被重置一眼可见先查日志再调参数比瞎猜高效得多。写在最后网络上的内容没有什么是永远在线的。与其等到 404 那天追悔莫及不如趁网站还在把它搬回自己的硬盘。WebSite-Downloader 用四百多行纯标准库代码就给了普通人离线拥有一个网站的能力个人知识库、项目备份、离线演示、竞品结构分析全都能派上用场。找个你常看的静态站点跑一次下载试试。你会发现内容真正攥在自己手里的时候心里才是最踏实的。【免费下载链接】WebSite-DownloaderA website downloader written with Python项目地址: https://gitcode.com/gh_mirrors/web/WebSite-Downloader创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表