如何下载网页所有资源(附源码)

2023-05-16

nodejs扒取html页面中所有链接资源

前言:

总有些人,想下载一个插件,能直接获取浏览器显示页面的所有资源。也就是下载一个其他人的网站,但是不想一个个复制链接的内容,原因大致有二: 1、链接多,打卡每个链接去下载十分繁琐 2、复制好了,还要重新改html中每个链接指向的新资源路径(下载好的路径)

分析:

1、js在浏览器上是不可能实现,本地生成文件的(下载资源),因为浏览器没有这个权限,那么就需要服务器配合 2、服务器如何知道html浏览器中,到底有哪些文件需要下载,服务器本身没有document对象,那么就返回来需要浏览器配合

结论:

靠浏览器获取所有需要下载的资源,把需要下载的资源通过ajax请求方式,告诉服务器,服务器去实现下载资源

项目文件夹结构
root根目录
   | static文件夹
        | file 文件夹(这个可以不创建,下载资源会生成这个文件夹)
        | jquery-1.8.3.js
   | app.js
复制代码
代码展示

1、app.js(先执行这个js,cmd命令窗口输入: node app.js)

var express = require('express');
var fs = require('fs');
var bodyParser = require('body-parser');
var request = require('request ');
var path= require('path');

var app = express();
app.use(bodyParser.json());

app.use('/urlDownLoadFile', (req, res) => {
  var filePaths = req.body.filepaths,
      dirPath = req.body.dirPath;
  var fileDirPath = path.join(__dirname, './static/', dirPath);
  if (!fs.existsSync(fileDirPath)) {
    fs.mkdirSync(fileDirPath);
  }
  filePaths.forEach(item => {
    if (item !== '') {
      var lastIndex = item.lastIndexOf('/'),
          fileName = item.substr(lastIndex + 1);
      var stream = fs.createWriteStream(path.join(fileDirPath, fileName));
      request(item).pipe(stream).on('close', (err) => {
         if (err) {
          console.log(err);
         }
      });
    }
  });
  res.send('');
});

app.use('/', express.static('./static'));
app.listen(3000);
复制代码

2、然后,F12打开要下载网页的控制台,把下面这段代码复制进去

var dirPath = 'file/', // 资源目录(下载到服务器 static/里面的 哪个文件夹)
    allUrls = [localhost.href]; // 所有要下载的路径

var scriptNode = document.createElement('script');
scriptNode.src = 'http://127.0.0.1:3000/jquery-1.8.3.js';
document.body.appendChild(scriptNode);
scriptNode.onload = () => {
  $('link').each((index, ele) => {
    allUrls.push(ele.href);
  });
  $('script').each((index, ele) => {
    allUrls.push(ele.src);
  });
  $('img').each((index, ele) => {
    allUrls.push(ele.src);
  });

  $.ajax({
    url: 'http://127.0.0.1:3000/urlDownLoadFile',
    dataType: 'jsonP',
    data: {
       filepaths: allUrls,
       dirPath: dirPath 
    }
  });
}
复制代码

3、打开“file 文件夹”,里面已经有了所有网页的资源:html、js、css、jpg...

root根目录
   | static文件夹
        | file 文件夹(这个可以不创建,下载资源会生成这个文件夹)
        | jquery-1.8.3.js
   | app.js
复制代码

4、打开html修改引用资源路径

<script src="../jquery-1.8.3.js"></script>
<script>
  $('link').each((index, ele) => {
    var filePath = ele.href,
        lastIndex = filePath.lastIndexOf('/'),
        fileName = filePath.substr(lastIndex + 1);
    ele.href = fileName;
  });
  $('script').each((index, ele) => {
    var filePath = ele.src,
        lastIndex = filePath.lastIndexOf('/'),
        fileName = filePath.substr(lastIndex + 1);
    ele.src= fileName;
  });
  $('img').each((index, ele) => {
    var filePath = ele.src,
        lastIndex = filePath.lastIndexOf('/'),
        fileName = filePath.substr(lastIndex + 1);
    ele.src= fileName;
  });
</script>
复制代码

转载于:https://juejin.im/post/5c8c61506fb9a049e12b1978

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何下载网页所有资源(附源码) 的相关文章

  • 视觉slam闭环检测之-DBoW2 -视觉词袋构建

    视觉slam闭环检测之 DBoW2 视觉词袋构建 利用 BoVW 表示图像 xff0c 将图像进行结构化描述 BoVW思想是将图像特征整合成视觉单词 xff0c 将图像特征空间转化成离散的视觉字典 将新的图像特征映射到视觉字典中最近邻视觉字
  • Boosting算法简介

    一 Boosting算法的发展历史 Boosting算法是一种把若干个分类器整合为一个分类器的方法 xff0c 在boosting算法产生之前 xff0c 还出现过两种比较重要的将多个分类器整合为一个分类器的方法 xff0c 即boostr
  • 关于嵌入式的学习和职业发展

    最近我的工作太忙了 身边朋友问我如何学习嵌入式 xff0c 在这个行业健康的发展 我一直未能做一个系统的回答 这里我想写篇文章 xff0c 彻底的回答这个问题 嵌入式 xff0c 这是个术语 在我看来 xff0c 嵌入式系统是 xff1a
  • Docker Hub + Github 自动化构建docker镜像

    自动创建 xff08 Automated Builds xff09 功能对于需要经常升级镜像内程序来说 xff0c 十分方便 有时候 xff0c 用户创建了镜像 xff0c 安装了某个软件 xff0c 如果软件发布新版本则需要手动更新镜像
  • ubuntu下旋转屏幕

    2019独角兽企业重金招聘Python工程师标准 gt gt gt ubuntu下把屏幕竖起来的方法很简单 xff1a xrandr o left 向左旋转90度 xrandr o right 向右旋转90度 xrandr o invert
  • Java 如何实现线程间通信

    正常情况下 xff0c 每个子线程完成各自的任务就可以结束了 不过有的时候 xff0c 我们希望多个线程协同工作来完成某个任务 xff0c 这时就涉及到了线程间通信了 本文涉及到的知识点 xff1a thread join object w
  • rtmp拉流测试工具

    http www cutv com demo live test swf 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • 微信PC客户端无法发送图片,怎么解决?

    今天登陆电脑的微信客户端 xff0c 无法发送截图图片 xff0c 该怎么办 xff1f 解决方法 1 在任务栏找到程序 xff0c 右键找到设置 2 找到通用设置下的清除聊天记录 3 重启Pc微信客户端就可以 PS 本人测试过 xff0c
  • sql server 索引总结一

    一 存储结构 在SQL Server中 xff0c 有许多不同的可用排列规则选项 二进制 xff1a 按字符的数字表示形式排序 ASCII码中 xff0c 用数字32表示空格 xff0c 用68表示字母 34 D 34 因为所有内容都表示为
  • CSS 为什么这么难学?

    最近半年 xff0c 我一直都没在知乎上遇到好的前端问题 xff0c 而这个问题 xff0c 问到我心坎上了 在过去一年的教学过程中 xff0c 不断有学生尝试理性地理解 CSS xff0c 都以失败告终 我告诉他们 CSS 是没有逻辑可言
  • 时间复杂度分析经典问题——最大子序列和

    时间复杂度经典问题 最大子列和问题 最大子序列和问题 最大子列和问题是非常经典的问题 xff0c 基本上讲算法的书都会将这个例子 xff0c 用此例题来讲解算法时间复杂度的重要性 xff0c 对比不同算法的时间复杂度 最大子列和问题如下 x
  • 无法运行宏,可能是因为该宏在此工作簿中不可用,或者所有的宏都被禁用的解决方法...

    此行为发生以下条件之一都为真时 xff1a 宏存储在未打开的文件中 宏已被禁用 若要确定是否已禁用了宏 xff0c 请按照下列步骤操作 xff1a 单击 Microsoft Office 按钮 xff0c 然后单击 Excel 选项 单击
  • h3c vlan配置

    1 基于端口的VLAN配置命令 SWA vlan 10 创建VLAN SWA vlan10 port Ethernet1 0 1 向当前VLAN添加端口 SWA vlan 20 创建VLAN SWA vlan20 port Ethernet
  • LMDB概述

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 发现一篇讲解LMDB不错的文章 xff0c 记录一下 xff0c 原文在这里 Overview homepage http symas com mdb https gith
  • GPU加速的FAST特征提取 Faster than FAST: GPU-Accelerated Frontend for High-Speed VIO (IROS 2020)

    在许多的VIO Pipeline中 xff0c 视觉特征通常依靠图像数据的detection和tracking 这两个部分通常会比较耗时 xff0c 比如一些经典的算子 xff0c 运算量都比较大 xff0c 如果将这些视觉前端用GPU进行
  • 什么是死锁及死锁的必要条件和解决方法【转】

    来自 xff1a http blog 163 com yanenshun 64 126 blog static 128388169200982444858590 fromdm amp fromSearch amp isFromSearchE
  • 获取C# RadioButton选中值

    C RadioButton的一些属性介绍 1 C RadioButton只允许用户从几个选项中选择一个 xff0c 同一个容器中一次只能选择一个按钮 xff1b 2 C RadioButton的Appearance属性 xff1a 根据的以
  • vc-api-枚举所有子窗口实例

    我经常想枚举一个父窗口的所有子窗口 xff0c 网上搜索了很多都没有搞的太懂 xff0c 经过多次实践 xff0c 总算搞明白了 xff0c 发一个最简单的实例 xff0c 希望能给大家带来帮助 实例 xff1a 枚举QQ登陆这个窗口所有的
  • VC 获取鼠标下面的窗口

    POINT pt GetCursorPos amp pt 得到鼠标下面的窗口句柄 HWND hWnd 61 WindowFromPoint pt 得到鼠标所在的子窗口句柄 HWND hChild 61 ChildWindowFromPoin
  • [SE]软件项目需求分析为什么困难

    有几种原因使需求分析变得困难 xff1a xff08 1 xff09 客户说不清楚需求 xff1b xff08 2 xff09 需求自身经常变动 xff1b xff08 3 xff09 分析人员或客户理解有误 1 客户说不清楚需求 有些客户

随机推荐

  • C++到底还能做什么?

    嗯 xff0c 这是一位朋友发到我邮箱里面的 xff0c 很奇怪 xff0c 发到了gmail邮箱 xff0c 而不是我常用的hotmail邮箱哈 我呢 xff0c 试着回答一下 xff0c 如果回答得不好 xff0c 叫做肖某人学艺不精
  • Docker 创建 MySQL 容器

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 1 拉取镜像 docker pull mysql 5 7 2 查看当前所有的镜像 docker image ls 3 创建并启动一个容器 docker run name t
  • 深入理解Arrays.sort()

    翻译人员 铁锚 翻译日期 2013年11月16日 原文链接 Deep Understanding of Arrays sort T Comparator lt super T gt c Arrays sort T Comparator lt
  • 18个实时音视频开发中会用到开源项目

    实时音视频的开发学习有很多可以参考的开源项目 一个实时音视频应用共包括几个环节 xff1a 采集 编码 前后处理 传输 解码 缓冲 渲染等很多环节 每一个细分环节 xff0c 还有更细分的技术模块 比如 xff0c 前后处理环节有美颜 滤镜
  • px4 uavcan linux,UAVCAN - UAVCAN Bootloader - 《PX4中文维基》 - 书栈网 · BookStack

    安装UAVCAN启动程序警告 xff1a 无人机控制器局域网络 Unmanned Aerial Vehicle Controller Area Network xff0c UAVCAN 设备通常在出厂时就预安装了启动程序 如果你不对UAVC
  • VISTA -MIT开源基于数据驱动的自动驾驶仿真引擎

    引言 VISTA 是MIT开源的一个基于数据驱动的用于自动驾驶感知和控制的仿真引擎 VISTA API提供了一个接口 xff0c 用于将真实世界的数据集转换为具有dynamic agents sensor suites task objec
  • 计算机管理储存u盘无法使用,解决电脑识别不出U盘的问题

    电脑识别不出U盘怎么样 要解决这个问题 xff0c 首先我们要确定的是U盘在其他电脑上使用正常 xff0c 而且你的电脑USB接口也是一切正常的 xff0c 插入电脑后虽然有反应 xff0c 但就无法正确显示出盘符 xff0c 资源管理器也
  • 介绍:成为一名 Jenkins 贡献者的旅程

    转自Jenkins 中文社区 作为一名软件工程师 xff0c 这些年来在我工作过的不同公司里用到过许多开源软件 xff08 包括框架 库 工具等 xff09 然而 xff0c 在此之前我从没有以一名贡献者的身份参与过开源项目 自从我向 Je
  • 国内嵌入式公司比较排名

    随着 ARM内核的应用越来越广泛 xff0c 从手机到电视机 xff0c 从大型工控设备到小型的家电应用 xff0c 都能找到 ARM内核的嵌入式产品 而由此引领了一番全球嵌入式领域火热的变化 xff0c 当然 xff0c 国内的嵌入式领域
  • MYSQL常用操作及python操作MYSQL常用类

    Mysql 常见操作 数据库操作 创建数据库 create database fuzjtest 删除数据库 drop database fuzjtest 查询数据库 show databases 切换数据库 use databas 1231
  • Windows Server 2008的认证监视工具

    管理证书的一个主要目标是获得企业安全的一种高级水平 应当认真对待身份和访问管理问题 在本文中 xff0c 笔者将简要地讨论认证授权 xff0c 然后探讨使用特定的证书监视工具 xff08 如PKIView msc和certutil exe
  • (转)为什么需要正则表达式 by 王珢

    为什么需要正则表达式 by 王垠 学习Unix最开头 xff0c 大家都学过正则表达式 regexp 可是有没有人考虑过我们为什么需要正则表达式 xff1f 正则表达式本来的初衷是用来从无结构的字符串中提取信息 xff0c 殊不知这正好是U
  • 无法启动程序,因为计算机丢失D3DCOMPILER_47.dll 的解决方法

    这个原因应该是windows update在更新的时出现错误导致的 解决方法是安装 KB4019990 更新包 网址如下 xff1a http www catalog update microsoft com Search aspx q 6
  • KNN cosine 余弦相似度计算

    coding utf 8 import collections import numpy as np import os from sklearn neighbors import NearestNeighbors def cos vect
  • sqlserver2017 重装过程中出现“无法找到数据库引擎启动句柄”错误的解决办法...

    sqlserver数据库引擎修改账号名 xff0c 详情参考 xff1a http blog 51cto com djclouds 2089047 utm source 61 oschina app 在SQL Server安装期间 xff0
  • python基本常用语法&函数&数据结构

    1 Python概述 1989年12月 Google工程师 Guido van Rossum为了打发圣诞节假期 开发了ABC语言的后继 并以他自己喜欢的一个情景剧 Monty Python s Flying Circus命名 Python
  • R语言中对文本数据进行主题模型topicmodeling分析

    主题建模 在文本挖掘中 xff0c 我们经常收集一些文档集合 xff0c 例如博客文章或新闻文章 xff0c 我们希望将其分成自然组 xff0c 以便我们可以分别理解它们 主题建模是对这些文档进行无监督分类的一种方法 xff0c 类似于对数
  • NLTK基础基础教程学习笔记(十四)

    对于文本分类 xff0c 最简单的定义就是基于文本内容来对其进行分类 通常情况算法是根据数字 变量特征来写的 先从https archive ics uci edu ml datasets SMS 43 SPam 43 Collection
  • ***故障错误代码列表

    故障错误代码列表 724 IPX 协议无法在此端口拨出 xff0c 因为此计算机是 IPX 路由器 725 IPX 协议无法在此端口拨入 xff0c 因为未安装 IPX 路由器 726 IPX 协议不能同时在一个以上的端口上用于拨出 727
  • 如何下载网页所有资源(附源码)

    nodejs扒取html页面中所有链接资源 前言 xff1a 总有些人 xff0c 想下载一个插件 xff0c 能直接获取浏览器显示页面的所有资源 也就是下载一个其他人的网站 xff0c 但是不想一个个复制链接的内容 xff0c 原因大致有