您现在的位置是:时尚 >>正文

前端vuejs的网站怎么整站下载

时尚1556人已围观

简介 前端vuejs的网站怎么整站下载 直接说结论:vuejs网站没法用传统工具一键扒成静态文件,因为它的页面是运行时渲染的。你右键查看源码,看到的往往只有一个空壳div和一堆js引用,真正的DOM结构和 ...

前端vuejs的前端网站怎么整站下载

直接说结论:vuejs网站没法用传统工具一键扒成静态文件,因为它的网站页面是运行时渲染的。你右键查看源码,整站看到的下载往往只有一个空壳div和一堆js引用,真正的前端DOM结构和内容全是浏览器执行脚本后生成的。这跟十年前那种服务端输出的网站html网站完全是两码事。

我上周帮朋友处理一个vue做的整站企业官网,试过wget、下载httrack,前端下载下来的网站文件夹打开全是白屏。原因很简单——这些工具只抓取服务器返回的整站原始html,不执行js。下载vue路由跳转全靠history或hash模式,前端爬虫根本拿不到渲染后的网站内容。

那怎么办?整站核心思路是:要么让浏览器帮你渲染,要么用无头浏览器模拟点击。我实践下来最靠谱的方案是puppeteer,一个node库,能控制Chrome打开页面、等待js执行完毕、再抓取最终生成的DOM。写个循环脚本,遍历站点所有内部链接,把每个页面的渲染后html保存下来,同时把css、js、图片等静态资源也下载到本地。

具体操作分三步。第一步,用puppeteer打开目标网站首页,等待networkidle事件(确保所有请求都完成了)。第二步,从页面里提取所有a标签的href,过滤掉外部链接和锚点,存成一个队列。第三步,逐个访问队列里的url,每个页面都等2秒左右让vue完成挂载,然后执行document.documentElement.outerHTML拿到完整html,写到本地文件。

这里有个坑——vue的懒加载组件。很多页面是路由级别的代码分割,你直接访问某个深链接,可能只加载了公共部分,子组件还在异步请求中。解决方法是等页面出现某个特定元素再抓取,或者干脆统一等待5秒。我那次抓一个后台管理系统,就是因为没等够时间,抓下来的页面缺了表格数据。

静态资源处理也麻烦。vue-cli构建的静态文件通常带hash指纹,比如app.8f3k2j.js,而且路径可能是绝对路径/static/。你要么用puppeteer拦截所有响应,把匹配到的静态文件直接保存到对应目录,要么事后用正则把html里的引用路径改成相对路径。我倾向于前者,因为简单粗暴,不容易漏。

还有一种更省事的情况——如果目标网站是SSR(服务端渲染)的nuxtjs,那直接用httrack反而能抓到大部分内容。但纯SPA的vue,别指望偷懒工具,老老实实写脚本吧。

最后说句实在话,整站下载前先确认版权。我抓的那个官网是朋友自己的项目,他忘了备份源码,才出此下策。如果是别人的站点,抓下来用于学习可以,别拿去商用或二次发布,容易惹麻烦。

Tags:

相关文章

  • 触控一体机前端接口八个物理按键

    时尚

    触控一体机前面板那八个物理按键,位置固定得让人几乎忘了它们的存在。但真用起来,你会发现它们比屏幕上的虚拟按钮可靠得多——特别是当系统卡死、触控失灵,或者操作者戴着手套的时候。这排按键从左到右依次是:电 ...

    【时尚】

    阅读更多
  • 旺客基黄焖鸡米饭加盟

    时尚

    加盟费八万八,装修费另算,总部承诺三个月回本。我表弟去年在杭州城西开了家旺客基,现在第七个月,账面上还亏着两万。但他咬着牙说不后悔,因为隔壁那家沙县小吃,老板已经贴出了转让告示。 旺客基的黄焖鸡,说穿 ...

    【时尚】

    阅读更多
  • 45亿国内快递信息泄露

    时尚

    2024年1月17日,一个ID叫“f616”的网友在暗网论坛上挂出了一条帖子,标题简洁得吓人:“中国45亿条快递数据,打包出售,价格面议。”帖子附带的样本文件里,收件人姓名、手机号、家庭住址、商品名称 ...

    【时尚】

    阅读更多


友情链接