ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

网站离线下载 5 分钟上手:Python 整站下载器 WebSite-Downloader 使用攻略

网站离线下载 5 分钟上手:Python 整站下载器 WebSite-Downloader 使用攻略 网站离线下载 5 分钟上手Python 整站下载器 WebSite-Downloader 使用攻略【免费下载链接】WebSite-DownloaderA website downloader written with Python项目地址: https://gitcode.com/gh_mirrors/web/WebSite-Downloader周五下午五点领导丢过来一句话官网要整体备份客户现场没有外网明早就要演示。几百个页面、几百张图片、几十个样式脚本靠浏览器挨个另存为显然不现实。WebSite-Downloader 正是为这类网站离线下载场景而生的 Python 整站下载工具给它一个网址它就把整个站点连同 HTML、CSS、JS、图片、字体一起搬回本地文件夹再自动把页面里的绝对链接改写成相对路径——断网之后双击 index.html 依然能原样浏览。不是书签、也不是截图整站打包才是正解先别急着动手想清楚一个问题你想要的备份到底是什么很多人第一反应是收藏链接或者干脆截图但这些方案都有一个致命伤——它们保不住结构。保存方式能留下什么断网能不能看页面结构浏览器收藏夹一串链接不能—截图 / 复制网页单页快照能样式、交互全丢浏览器另存为单页加部分资源能页面间跳转失效WebSite-Downloader整站网页与资源能完整还原看清楚差别了吗前三种方案解决的是留住一页纸WebSite-Downloader 解决的才是搬走整栋楼。这才是真正意义上的网站离线下载下载下来的目录本身就是一个小型网站可以随取随用。拆开单文件源码这台分拣机器如何运转整个项目只有一个文件WebSite-Downloader.py里面就两个类。把它想象成一家物流分拣中心 理解起来毫不费力Manager——调度台负责拆包、派单、登记去重并决定整个流程什么时候收工8 个 Spider 线程——8 条分拣流水线从传送带上取包裹链接判断这是哪种货然后分头处理link_queue——传送带待处理的链接按顺序排队links 集合——扫码登记表见过的链接记一笔保证同一链接绝不重复抓top_domain——收货规则只收本公司的货外部域名一律拒收。每拿到一个链接分拣员先看它的后缀再决定怎么处理核心逻辑就 8 行def spide(self, link): suffix link.split(.)[-1].lower() if suffix css: self.handle_css(link) elif suffix in self.other_suffixes: self.download(link) else: self.handle_html(link)为什么这样分因为 CSS 和 HTML 里藏着下一个链接的线索必须读进来 → 抽链接 → 重写路径 → 落盘走完整流程而 js、图片、字体这类资源是死文件直接下载即可没必要解析。重写路径是整台机器最巧妙的一环。举例来说网页里原本写着src/images/logo.png分拣员会把它换算成相对路径../images/logo.png再写回文件。这样一来整个文件夹无论挪到 U 盘、拷进内网、还是发给别人都不影响离线浏览。那它怎么知道自己干完了靠的是空转检测只要连续 60 秒没有新链接入队调度台就判定整站已抓完自动收工还会叮叮叮响铃提醒你。这保证了它永远不会无限跑下去。小知识HTML 下载后若解码失败工具会自动按 utf-8 → gb2312 → gbk 的顺序再试两次所以绝大多数中文网站都能正常处理。5 分钟跑通第一次整站下载环境要求低得离谱只要本机有 Python 3.6 及以上版本其余全用标准库实现零第三方依赖装完即用。把项目拉到本地在终端执行git clone https://gitcode.com/gh_mirrors/web/WebSite-Downloader cd WebSite-Downloader改一行代码指向目标站点。打开WebSite-Downloader.py翻到文件末尾会看到默认的示例入口if __name__ __main__: manager Manager(https://www.example.com) manager.start()把中间那行 URL 换成你要下载的网站即可比如manager Manager(https://www.whsw.net/)。错误示范把 URL 写成某个具体文章页比如https://example.com/post/123.html。这当然也能下载但顺着链接爬整站的能力就被浪费了——想搬整栋楼就该从大门首页进去。另外注意 URL 要带http://或https://前缀否则程序无法解析出顶级域名。运行脚本python WebSite-Downloader.py控制台会实时打印每个链接的处理进度等响铃响起下载就结束了。所有文件保存在以域名命名的目录里结构大致是这样whsw-site/ └── www.whsw.net/ ├── index.html ├── css/ ├── js/ └── images/用浏览器打开里面的 index.html你会发现自己已经断网浏览了——链接、图片、样式全部本地化和在线访问几乎没差别。另外当前目录下会生成一个log.log记录成功、失败和各类异常后面排查问题全靠它。三个高频调优场景提速、扩格式、防超时场景一页面太多8 个线程爬得太慢。错误示范一口气把线程数加到 128想着越多越快。 正确做法在Manager的__init__里找到for i in range(8)改成range(16)起步观察网络状况再微调。 原因线程翻倍速度通常明显提升但线程过多会给目标服务器造成巨大压力轻则拖垮对方重则被封 IP得不偿失。16 到 32 是比较稳妥的区间。场景二站里有特殊格式的文件没被下载。错误示范翻遍代码找不到允许的格式在哪配。 正确做法在Spider的__init__里找到other_suffixes这个集合往里加一个后缀即可比如self.other_suffixes.add(webp)。 原因工具靠后缀区分网页和资源文件白名单里没有的后缀不会被下载。往集合里加一个值等于告诉分拣员这种货也给我直接搬回家。默认名单里已经有 js、jpg、png、pdf、zip、mp3、mp4 等几十种常见格式多数场景不需要动。场景三几十 MB 的视频、压缩包下载到一半就失败。正确做法这类大文件不需要你操心——代码里内置了media_suffixes集合凡是命中的格式mp3、mp4、pdf、zip、rar 等超时时间会自动从普通的 20 秒放宽到 600 秒。 原因普通资源 20 秒内下不完就该怀疑网络有问题但大文件本身就需要更久直接套用短超时只会半途夭折。如果你的站里有更特殊的超大文件把它加进media_suffixes就能享受同样的长超时绿色通道。新手最容易犯的 4 个想当然想当然实际情况该怎么应对下载完样式全乱是工具不行多半是资源没下全或页面引用了站外 CDN打开log.log搜[failed download]站外域名默认不抓属正常设计程序跑了一小时还没停它有 60 秒空转自动收尾机制放心等连续 60 秒无新链接就自动结束页面打开是乱码解码失败会触发编码回退仍乱码就查log.log里的[UnicodeDecodeError]记录会不会把整个互联网都爬下来爬取范围被顶级域名锁死只抓目标站点自己的页面外部链接自动过滤还有一点值得单独提醒如果你下载的是别人家的网站请尊重对方的 robots.txt控制好抓取频率只保存自己拥有版权、或允许离线保存的内容。工具给不给力是一回事用得合不合规是另一回事。写在最后把重要的东西握在自己手里互联网上没有任何链接是永远活着的但我们可以让它以另一种方式继续存在。下一次再有人跟你说那个网站打不开了你可以淡定地打开本地文件夹双击 index.html——那种我手里有一份的踏实感正是网站离线下载的意义所在。现在就挑一个你舍不得的网站改一行 URL跑一次把它完整地搬回家吧。【免费下载链接】WebSite-DownloaderA website downloader written with Python项目地址: https://gitcode.com/gh_mirrors/web/WebSite-Downloader创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表