[element]element-ui框架下载

news2024/11/25 13:31:29

⭐作者介绍:大二本科网络工程专业在读,持续学习Java,努力输出优质文章
⭐作者主页:@逐梦苍穹
⭐如果觉得文章写的不错,欢迎点个关注一键三连😉有写的不好的地方也欢迎指正,一同进步😁

目录

  • 1、官网
  • 2、框架文件夹
  • 3、如何下载
    • 3.1、python
    • 3.2、Java

⭐⭐写在前面:
  下载这个element-ui也是折腾了很久,在官网一直都没有找到,最后实在没辙,用了下面提到的方法。
  有个问题就是用代码爬取会比较慢,如果不想花时间等待下载,也可以一键三连私信我单独分享云盘链接😉😊

1、官网

https://element.eleme.cn/#/zh-CN/component/installation
在这里插入图片描述

2、框架文件夹

在这里插入图片描述

访问对应的路径:https://unpkg.com/browse/element-ui@2.15.13/

版本可以选择:
在这里插入图片描述

但是并没有下载的选项

3、如何下载

没下载选项,那只能,爬!
下面是python和Java的爬虫代码,有非常详细的注释,使用的时候只需要手动替换想要的版本信息和想要保存的路径即可(推荐使用python,这个需求的实现,Java的阅读性没有python直观)
比如:
在这里插入图片描述

3.1、python

# encoding:utf-8
# @Author:逐梦苍穹

# 导入需要使用的模块
from bs4 import BeautifulSoup  # 解析 HTML 页面的库
import requests  # 发送 HTTP 请求的库
import re  # 正则表达式匹配的库
import os  # 处理文件和目录的库
import socket  # 处理网络连接超时的库
from urllib import request  # 处理 URL 请求的库


# 定义获取页面的函数
def get_page(url, save_dir):
    # 打印当前处理的页面 URL
    print("Current Page:    ", url)

    # 发送 HTTP GET 请求
    response = requests.get(url, headers=headers)

    # 使用 BeautifulSoup 对 HTML 页面进行解析
    soup = BeautifulSoup(str(response.content), "lxml")

    # 从页面中获取 tbody 标签中的内容
    tbody = soup.find("tbody")

    # 定义正则表达式规则,用于匹配 href 属性的内容
    rule_name = r'href="(.+?)"'

    # 使用正则表达式查找 href 属性的内容
    td_href = re.findall(rule_name, str(tbody))

    # 定义目录列表
    dir_list = []

    # 遍历每个 href 属性
    for href in td_href:
        # 组装完整的路径
        href_path = os.path.join(save_dir, href)

        # 如果是父目录,跳过
        if href == "../":
            pass
        # 如果是子目录,就创建目录
        elif "/" in href:
            os.mkdir(href_path)
            print("Makedir:    ", href_path.replace(save_ui_dir, ""))
            dir_list.append(href)
        # 否则就是文件,就下载文件
        else:
            file_url = url + href
            abs_name = file_url.replace(element_ui_url, "")
            print("Download:    ", abs_name)
            get_file(file_url, href_path)

    # 遍历目录列表,递归调用本函数
    for sub_dir in dir_list:
        sub_url = url + sub_dir
        sub_dir = os.path.join(save_dir, sub_dir)
        get_page(sub_url, sub_dir)


# 定义下载文件的函数
def get_file(url, filename):
    # 创建一个网络请求的opener
    opener = request.build_opener()
    # 设置请求头
    opener.addheaders = [('User-agent',
                          'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0')]
    # 将opener安装到全局
    request.install_opener(opener)
    # 设置socket超时时间为30秒
    socket.setdefaulttimeout(30)
    # 去除URL中的"browse/"字符
    url = url.replace("browse/", "")
    # 设置重试次数为5次
    count = 1
    while count <= 5:
        try:
            # 使用urlretrieve函数下载文件到本地
            request.urlretrieve(url, filename)
            # 下载成功则跳出循环
            break
        except socket.timeout:
            # 超时则输出错误信息,并进行重试
            err_info = '<Timeout>   Reloading for %d time' % count
            print(err_info)
            count += 1
        except Exception as e:
            # 其他异常情况也需要重试
            err_info = '<' + str(e) + '>   Reloading for %d time' % count
            print(err_info)
            count += 1
    # 如果重试5次还是失败,则输出错误信息
    if count > 5:
        print("<Error>  download job failed!")
    else:
        # 下载成功则不做处理,直接跳过
        pass


if __name__ == '__main__':
    # 指定要下载的版本
    element_ui_version = "2.11.1"

    # 指定文件要存放的位置
    element_ui_dir = "D:\\原C盘“桌面”\\桌面\\日常工具包"

    # 组装保存路径
    save_ui_dir = os.path.join(element_ui_dir, "element-ui")

    # 如果路径不存在,就创建路径
    if not os.path.isdir(save_ui_dir):
        os.makedirs(save_ui_dir)

    # 组装下载链接
    element_ui_url = "https://unpkg.com/browse/element-ui@" + element_ui_version + "/"

    # 添加请求头部信息,模拟浏览器的行为
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0"
    }

    get_page(element_ui_url, save_ui_dir)

3.2、Java

对要使用的包进行解释说明:
下面是每个导入包的详细介绍:

  1. import java.io.File; import java.io.FileOutputStream; import java.io.InputStream;这些包提供了与文件和输入/输出操作相关的类和接口。File类提供了访问文件和目录的方法,FileOutputStream类用于向文件写入数据,而InputStream类用于从文件读取数据。这些类和接口可以帮助您读取和写入本地文件系统上的文件。
  2. import java.net.HttpURLConnection; import java.net.URL;这些包提供了用于HTTP和URL连接的类和接口。HttpURLConnection类提供了HTTP连接的方法,使您可以发送和接收HTTP请求和响应。URL类则提供了解析和构建URL的方法。
  3. import java.nio.charset.StandardCharsets;这个包提供了Java支持的所有字符集的常量,如UTF-8、ISO-8859-1等。这些常量用于指定字符编码,以便正确地读取和写入文本数据。
  4. import java.util.ArrayList;这个包提供了一个动态数组的实现,称为ArrayList。它提供了添加、删除、搜索和遍历数组元素的方法。ArrayList是Java编程中最常用的集合之一,可以方便地存储和操作对象的列表。
/**
 * 作者:逐梦苍穹
 * 日期:2023/4/12 8:45
 */

// 导入所需要的Java类库
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;

public class element_ui {

    // 定义静态变量fileP,表示文件保存的路径
    static String fileP = "D:\\原C盘“桌面”\\桌面\\日常工具包\\element-ui";
    // 定义静态变量urlP,表示要爬取的网站的URL
    static String urlP = "https://unpkg.com/browse/element-ui@2.13.0/";
    // 定义静态变量urlF,表示要爬取的文件的URL
    static String urlF = "https://unpkg.com/element-ui@2.13.0/";

    public static void main(String[] args) {
        try {
            // 调用GetPage方法,开始爬取资源
            GetPage("");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 定义GetPage方法,用于爬取指定URL下的资源
    static void GetPage(String after) throws Exception {

        // 输出当前正在爬取的URL
        System.out.println(urlP + after);
        // 创建对应的目录,如果已存在则不会重复创建
        new File(fileP + after).mkdir();

        // 打开HTTP连接
        HttpURLConnection http = (HttpURLConnection) (new URL(urlP + after)).openConnection();
        // 设置请求方法为GET
        http.setRequestMethod("GET");
        // 设置User-Agent头部信息
        http.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3562.0 Safari/537.36");
        // 连接到指定URL
        http.connect();

        // 如果连接成功
        if (http.getResponseCode() == 200) { // 检查请求是否成功
            InputStream inputStream = http.getInputStream(); // 获取响应的输入流
            byte[] buffer = new byte[1024]; // 定义一个字节数组作为缓冲区
            ArrayList<byte[]> byteList = new ArrayList<>(); // 定义一个字节数组列表,用于存储读取的数据
            ArrayList<Integer> byteLength = new ArrayList<>(); // 定义一个整数列表,用于存储每个字节数组的长度
            int length; // 定义一个整数,用于存储每次读取的字节数
            int totalLength = 0; // 定义一个整数,用于存储读取的总字节数
            while ((length = inputStream.read(buffer)) != -1) { // 循环读取输入流中的数据,直到读到末尾
                byteList.add(buffer); // 将读取的字节数组添加到列表中
                byteLength.add(length); // 将读取的字节数组长度添加到列表中
                totalLength += length; // 累加已读取的字节数
                buffer = new byte[1024]; // 清空缓冲区
            }
            http.disconnect(); // 关闭HTTP连接
            byte[] all; // 定义一个字节数组,用于存储读取的所有数据
            all = new byte[totalLength]; // 分配足够的空间
            totalLength = 0; // 重新初始化读取的总字节数
            while (byteList.size() != 0) { // 循环遍历字节数组列表,将所有字节数组合并成一个大的字节数组
                System.arraycopy(byteList.get(0), 0, all, totalLength, byteLength.get(0)); // 将当前字节数组拷贝到大数组中
                totalLength += byteLength.get(0); // 更新已拷贝的字节数
                byteList.remove(0); // 从列表中删除已经拷贝的字节数组
                byteLength.remove(0); // 同时删除对应的字节数组长度
            }
            String content = new String(all, StandardCharsets.UTF_8); // 将字节数组转换成字符串
            all = null; // 释放字节数组的空间
            content = content.split("tbody")[1]; // 切割字符串,只保留tbody标签之后的内容
            String[] us = content.split("href=\""); // 切割字符串,将所有的链接分割出来
            for (int i = 1; i < us.length; i++) { // 遍历所有链接
                String href = us[i].split("\"", 2)[0]; // 提取当前链接的URL
                if (href.equals("../")) { // 如果是上一级目录的链接,跳过
                    continue;
                }
                if (href.charAt(href.length() - 1) == '/') { // 如果是目录的链接,递归调用GetPage方法
                    GetPage(after + href);
                } else { // 如果是文件的链接,调调用GetFile方法
                    GetFile(after + href);
                }
            }
        } else {
            // 如果返回的状态码不是 200,就重新调用 GetFile 方法,传入相同的参数
            GetPage(after);
        }
    }

    static void GetFile(String url) throws Exception {
        System.out.println(url);
        HttpURLConnection http;
        // 创建一个 HttpURLConnection 对象,用于发送 HTTP 请求
        http = (HttpURLConnection) (new URL(urlF + url)).openConnection();
        http.setRequestMethod("GET");
        // 设置请求头 User-Agent 信息,模拟浏览器访问
        http.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3562.0 Safari/537.36");
        http.connect();
        if (http.getResponseCode() == 200) {
            // 如果返回的状态码是 200,说明请求成功,获取输入流并读取数据
            InputStream inputStream = http.getInputStream();
            byte[] buffer = new byte[1024];
            ArrayList<byte[]> byteList = new ArrayList<>();
            ArrayList<Integer> byteLength = new ArrayList<>();
            int length;
            int totalLength = 0;
            while ((length = inputStream.read(buffer)) != -1) {
                // 将读取到的数据保存到一个 byte 数组中
                byteList.add(buffer);
                byteLength.add(length);
                totalLength += length;
                buffer = new byte[1024];
            }
            http.disconnect();
            byte[] all;
            all = new byte[totalLength];
            totalLength = 0;
            // 将多个 byte 数组拼接成一个 byte 数组
            while (byteList.size() != 0) {
                System.arraycopy(byteList.get(0), 0, all, totalLength, byteLength.get(0));
                totalLength += byteLength.get(0);
                byteList.remove(0);
                byteLength.remove(0);
            }
            // 将 byte 数组转换为字符串,并对字符串进行处理
            String filePath = fileP + url.replaceAll("/", "\\\\");
            // 创建一个新文件
            File f = new File(filePath);
            f.createNewFile();
            // 将文件的内容写入到新文件中
            FileOutputStream fos = new FileOutputStream(f, false);
            fos.write(all);
            fos.flush();
            fos.close();
        } else {
            // 如果返回的状态码不是 200,就重新调用 GetFile 方法,传入相同的参数
            GetFile(url);
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/429577.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

线程同步与互斥【Linux】

文章目录1. 引入2. 前导概念2.1 同步与异步2.2 互斥与并发2.3 原子性操作2.4 临界资源和临界区临界资源临界区如何管理3. 互斥锁3.1 引入3.2 概念3.3 示例pthread_mutex函数家族用法全局锁局部锁3.4 性能损耗3.5 串行执行3.6 补充4. 互斥锁的实现原理4.1 线程的执行和阻塞4.2 自…

Java虚拟机对象

对象的创建 当虚拟机遇到一条字节码new指令时&#xff0c;首先检查指令的参数能否在常量池中定位到一个类的符号引用&#xff0c;并且检查这个符号引用代表的类是否已被加载、解析和初始化&#xff0c;如果没有就先执行类加载过程。 在类加载检查完毕后&#xff0c;就要对这个…

常见的7种软件规模估算方法 优劣势比较

业内主要的软件规模估算方法&#xff1a;LOC估算方法、故事点估算法、FPA功能点估算方法、COSMIC功能点估算方法、快速功能点估算方法、IFPUG功能点估算方法和自动化功能点估算方法。 1、LOC估算方法 LOC是源代码的总行数。通过统计源代码中的行数&#xff0c;来估算软件规模。…

Spring项目的创建和使用

Spring&#xff1a;Spring是一个包含众多工具方法的IoC容器&#xff1b; Spring的核心功能&#xff1a; 将对象&#xff08;俗称Bean&#xff09;存储到Sping容器中从容器中取出对象目录 一&#xff0c;创建Spring项目 1&#xff0c;创建一个Maven项目 2&#xff0c;添加Spri…

[STL]string的使用+模拟实现

[STL]string的使用模拟实现 文章目录[STL]string的使用模拟实现一、STL1.什么是STL2.如何学习STL二、string1.string类的介绍2.string的常用接口string的构造string的迭代器string的容量操作string的访问string的修改string的其他接口string的非成员函数接口三、string的模拟实…

Node【七】初识Express框架

文章目录&#x1f31f;前言&#x1f31f;Express框架&#x1f31f;1.什么是框架&#x1f31f;2.express安装&#x1f31f;3.创建web服务基本遵循之前的四个步骤&#xff1a;&#x1f31f;4.路由&#x1f31f; 由 &#xff1a;请求方式请求路径&#xff08;1&#xff09;get发送…

JAVA+SQL离散数学题库管理系统的设计与开发

题库、试卷建设是教学活动的重要组成部分&#xff0c;传统手工编制的试卷经常出现内容雷同、知识点不合理以及笔误、印刷错误等情况。为了实现离散数学题库管理的信息化而开发了离散数学题库管理系统。 该系统采用C/S 模式&#xff0c;前台采用JAVA&#xff08;JBuilder2006&am…

面试官:自动化测试都没弄明白,你怎么敢来面试的?

最近看了很多简历&#xff0c;很多候选人年限不小&#xff0c;但是做的都是一些非常传统的项目&#xff0c;想着也不能通过简历就直接否定一个人&#xff0c;何况现在大环境越来 越难&#xff0c;大家找工作也不容易&#xff0c;于是就打算见一见。 在沟通中发现&#xff0c;由…

全国青少年信息素养大赛图形化编程初赛·模拟二卷,含答案解析

全国青少年电子信息智能创新大赛 图形化编程选做题模拟二卷 一、单选题 1. 下图中的程序执行一次之后,“我的变量”最终的值是?( ) A、0或者1 B、true或者false C、包含或者不包含 D、成立或者不成立

纯虚函数和抽象类

什么时候使用纯虚函数: 某些类,在现实角度和项目实现角度,都不需要实例化(不需要创建它的对象),这个类中定义的某些成员函数,只是为了提供一个形式上的借口,准备让子类来做具体化的实现,此时,这个方法就可以定义为"纯虚函数",包含纯虚函数的类,就称为抽象类. 纯虚函…

token详解

token详解前言什么是token&#xff1f;为什么要使用token&#xff1f;那么如何使用token呢&#xff1f;使用Token进行身份验证和授权的过程具体步骤项目上如何运用的tokentoken过期了什么办&#xff1f;总结升华前言 本篇博客主要从什么是token&#xff1f;为什么要使用token&…

C++ 图系列之基于有向无环图的拓扑排序算法

1. 前言 有向无环图&#xff0c;字面而言&#xff0c;指图中不存在环(回路)&#xff0c;意味着从任一顶点出发都不可能回到顶点本身。有向无环图也称为 DAG&#xff08;Directed Acycline Graph&#xff09;。 有向无环图可用来描述顶点之间的依赖关系&#xff0c;依赖这个概…

MLX90640 热成像 STM32

点击此处了解详情点击此处了解详情点击此处了解详情点击此处了解详情点击此处了解详情 1、描述 这是一款手持式多功能热像仪&#xff0c;小巧轻便&#xff0c;搭载3.2英寸TFT显示屏、MLX90640热红外探头&#xff0c;锂电池供电&#xff0c;可以在各种场合使用&#xff0c;温度…

( “树” 之 DFS) 572. 另一棵树的子树 ——【Leetcode每日一题】

572. 另一棵树的子树 给你两棵二叉树 root 和 subRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tr…

Densely Connected Convolutional Networks(引言翻译(有选择性))

翻译得有可能会不太专业&#xff0c;望见谅的同时&#xff0c;如果有些地方翻译错了&#xff0c;欢迎批评指正&#xff01; as information about the input or gradient passes through many layers, it can vanish and "wash out" by the time it reaches the end …

淄博烧烤、洛阳汉服......爆火,揭秘实体店客流爆满的秘诀!

淄博烧烤、云南泼水、洛阳穿越...... 沉寂了3年后&#xff0c;线下实体消费终于又开始火热起来&#xff0c;临近五一小长假&#xff0c;国内外旅游订单出现井喷式增长&#xff0c;线下消费持续迎来新一轮的高峰。 而这些热点&#xff0c;也带动了周边很多相关的实体店&#xff…

美团外卖平台的部分外卖 SPU数据实操练习

一、环境要求 Hadoop hive spark hbase开发环境 开启hadoop&#xff1a;start-all.sh开启zookeeper&#xff1a;zkServer.sh start开启hive&#xff1a;nohup hive --service metastore &nohup hive --service hiveserver2 & 打开hive界面&#xff1a;beeline -u j…

Ubuntu16.04安装NCNN和Opencv

一、安装NCNN 官网&#xff1a;NCNN官方文档 On Debian, Ubuntu or Raspberry Pi OS, you can install all required dependencies using: 首先安装NCNN的依赖项&#xff0c;根据官网安装以下依赖项。 sudo apt install build-essential git cmake libprotobuf-dev protobuf-…

dc-4靶机渗透

1.信息搜集&#xff0c;扫描存活主机&#xff0c;扫描端口&#xff0c;服务,发现开放80&#xff0c;22端口&#xff0c;cms没有看到 nmap 192.168.85.0/24 nmap -p1-66535 192.168.85.175 nmap -sv 192.168.85.1752.访问网站&#xff0c;发现登录框&#xff0c;根据提示&#…

360安全卫士 - 设置技巧 / 关闭广告

360安全卫士 - 设置技巧 / 关闭广告前言同步设置基本设置弹窗设置开机小助手安全防护中心漏洞修复木马查杀功能大全管理360文件夹游戏管家健康助手前言 360安全卫士是一款免费的PC安全软件&#xff0c;拥有垃圾清理、病毒查杀、启动项管理等功能。虽然有一些广告&#xff0c;但…