您现在的位置是:时尚 >>正文
前端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:
上一篇:电视机渗透在线流畅观看
下一篇:网络安全payload是什么意思
相关文章
触控一体机前端接口八个物理按键
时尚触控一体机前面板那八个物理按键,位置固定得让人几乎忘了它们的存在。但真用起来,你会发现它们比屏幕上的虚拟按钮可靠得多——特别是当系统卡死、触控失灵,或者操作者戴着手套的时候。这排按键从左到右依次是:电 ...
【时尚】
阅读更多旺客基黄焖鸡米饭加盟
时尚加盟费八万八,装修费另算,总部承诺三个月回本。我表弟去年在杭州城西开了家旺客基,现在第七个月,账面上还亏着两万。但他咬着牙说不后悔,因为隔壁那家沙县小吃,老板已经贴出了转让告示。 旺客基的黄焖鸡,说穿 ...
【时尚】
阅读更多45亿国内快递信息泄露
时尚2024年1月17日,一个ID叫“f616”的网友在暗网论坛上挂出了一条帖子,标题简洁得吓人:“中国45亿条快递数据,打包出售,价格面议。”帖子附带的样本文件里,收件人姓名、手机号、家庭住址、商品名称 ...
【时尚】
阅读更多