[element]element-ui框架下载

⭐作者介绍:大二本科网络工程专业在读,持续学习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):# 打印当前处理的页面 URLprint("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 + hrefabs_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_dirsub_dir = os.path.join(save_dir, sub_dir)get_page(sub_url, sub_dir)# 定义下载文件的函数
def get_file(url, filename):# 创建一个网络请求的openeropener = 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 = 1while count <= 5:try:# 使用urlretrieve函数下载文件到本地request.urlretrieve(url, filename)# 下载成功则跳出循环breakexcept socket.timeout:# 超时则输出错误信息,并进行重试err_info = '<Timeout>   Reloading for %d time' % countprint(err_info)count += 1except Exception as e:# 其他异常情况也需要重试err_info = '<' + str(e) + '>   Reloading for %d time' % countprint(err_info)count += 1# 如果重试5次还是失败,则输出错误信息if count > 5:print("<Error>  download job failed!")else:# 下载成功则不做处理,直接跳过passif __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,表示要爬取的网站的URLstatic String urlP = "https://unpkg.com/browse/element-ui@2.13.0/";// 定义静态变量urlF,表示要爬取的文件的URLstatic 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 {// 输出当前正在爬取的URLSystem.out.println(urlP + after);// 创建对应的目录,如果已存在则不会重复创建new File(fileP + after).mkdir();// 打开HTTP连接HttpURLConnection http = (HttpURLConnection) (new URL(urlP + after)).openConnection();// 设置请求方法为GEThttp.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");// 连接到指定URLhttp.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]; // 提取当前链接的URLif (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);}}
}

————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/qq_60735796/article/details/130102906

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024腾讯云服务器优惠价格表又降价了,给同行干emo了

腾讯云优惠活动2024新春采购节活动上线&#xff0c;云服务器价格已经出来了&#xff0c;云服务器61元一年起&#xff0c;配置和价格基本上和上个月没什么变化&#xff0c;但是新增了8888元代金券和会员续费优惠&#xff0c;腾讯云百科txybk.com整理腾讯云最新优惠活动云服务器配…

常用sql语句及其优化

文章目录 介绍常用sql语句1. 数据查询1.1 SELECT 语句1.2 DISTINCT 关键字1.3 WHERE 子句1.4 ORDER BY 子句1.5 LIMIT 关键字 2. 数据更新2.1 INSERT INTO 语句2.2 UPDATE 语句2.3 DELETE FROM 语句 3. 数据管理3.1 CREATE TABLE 语句3.2 ALTER TABLE 语句3.3 DROP TABLE 语句 …

Python进阶学习:Pandas--将一种的数据类型转换为另一种类型(astype())

Python进阶学习&#xff1a;Pandas–将一种的数据类型转换为另一种类型(astype()) &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程&…

android零基础入门,零基础入门android

工欲行其事&#xff0c;必先利其器 1.B4A B4A是Android的基础版&#xff0c;这是一种可简化编程的Android的应用程序开发工具。这是一个IDE&#xff0c;可以允许开发者使用Basic语言来创建Android移动应用。Basic语言是一种过程化编程语言&#xff0c;因为其简单易学&#xff…

linux系统如何安装nginx

首先下载nginx安装包 wget -c http://nginx.org/download/nginx-1.23.1.tar.gz然后解压安装包 tar -zxvf nginx-1.23.1.tar.gz如果服务器没有wget&#xff0c;可以安装一下&#xff0c;有的话可以跳过 yum install -y wget 然后安装相关依赖 yum install -y gcc-c zlib zl…

分布式调度平台XXL-JOB

相对来说&#xff0c;xxl-job中心式的调度平台轻量级&#xff0c;开箱即用&#xff0c;操作简易&#xff0c;上手快&#xff0c;与SpringBoot有非常好的集成&#xff0c;而且监控界面就集成在调度中心&#xff0c;界面又简洁&#xff0c;对于企业维护起来成本不高&#xff0c;还…

PRL算法调控

伴随汽车电子技术发展&#xff0c;传统轮式车辆制动系统的气体或液体传输管路长&#xff0c;阀类原件多原有的真空助力系统无法兼顾车辆的再生制动功能&#xff0c;而再生制动功能是混合动力车辆是混动车辆最主要的市场优势之一&#xff0c;真空助力器逐渐被eBooster 所取代。针…

C++条件变量

概述 条件变量的使用&#xff0c;其实是一种多线程通知模式&#xff0c;当线程一使用完数据后&#xff0c;通过条件变量通知其他线程&#xff0c;C11后开始支持。 说明 条件变量必须配合mutex使用&#xff0c;确保并发访问的排他性 std::unique_lock<std::mutex> loc…

【投稿优惠|快速见刊】2024年图像,机器学习和人工智能国际会议(ICIMLAI 2024)

【投稿优惠|快速见刊】2024年图像&#xff0c;机器学习和人工智能国际会议&#xff08;ICIMLAI 2024&#xff09; 重要信息 会议官网&#xff1a;http://www.icimlai.com会议地址&#xff1a;深圳召开日期&#xff1a;2024.03.30截稿日期&#xff1a;2024.03.20 &#xff08;先…

node.js和electron安装

文章目录 一、node.js安装1.node.js下载安装2.设置镜像 二、其它问题1.文件夹创建错误2.electron安装错误 一、node.js安装 1.node.js下载安装 参考B站视频node.js安装&#xff0c;没有按视频中设置镜像 2.设置镜像 参考&#xff1a;https://npmmirror.com/ npm config se…

Composer基础使用 SDK包初始化

Composer 的工作原理 我们在使用 Composer 之前我们得了解一下它的实现原理&#xff0c;它主要由三个部分组成&#xff1a;命令行工具、包仓库、代码库&#xff1a; Packagist 它是官方仓库&#xff0c;也就是我们平常说的 Composer 源&#xff0c;它的作用是存储这些包的信息…

【C语言】常见的动态内存管理错误

前言 上一篇介绍了C语言中 动态内存管理函数&#xff0c;本片讲解的是 在我们使用动态内存管理时 常见的错误&#xff0c;一起来看看吧~ 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 1.对NULL指针的解引⽤操作 错…