下载网络文件到本地

news/2024/11/17 23:37:06/

文章目录

目录

前言

操作步骤

1.引入

2.读取出文件内容

 3.筛选出URL

4.下载表情包

总结


前言

这里记录一次用代码下载网络文件的过程,以获取抖音表情包为例。

一、操作步骤

1.引入

首先抖音有网页版,用浏览器就可以观看,用户评论发布表情在评论面板自然也是一个url链接,

我们只需F12打开审查表情包面板的代码,将带有多个表情包的html复制并保存到我们电脑文件中,再用正则筛选出各个url,将url用代码去下载该表情包文件并保存到本地文件即可。

 

2.读取出文件内容

代码如下:

/*** 读取本地文件内容转为String字符串* * @return* @throws Exception*/public static String fileRead() throws Exception {File file = new File("D:\\emo\\emo.html");// 定义一个file对象,用来初始化FileReaderFileReader reader = new FileReader(file);// 定义一个fileReader对象,用来初始化BufferedReaderBufferedReader bReader = new BufferedReader(reader);// new一个BufferedReader对象,将文件内容读取到缓存StringBuilder sb = new StringBuilder();// 定义一个字符串缓存,将字符串存放缓存中String s = "";while ((s = bReader.readLine()) != null) {// 逐行读取文件内容,不读取换行符和末尾的空格sb.append(s + "\n");// 将读取的字符串添加换行符后累加存放在缓存中System.out.println(66666);}bReader.close();String str = sb.toString();
//        System.out.println(str );return str;}

文件内容


 3.筛选出URL

代码如下:

/*** 正则匹配字符串中多个url* * @return* @throws Exception*/public static ArrayList<String> matchUrl() throws Exception {//多个URL的集合ArrayList<String> list = new ArrayList<String>();//示例字符串String str = "<div class=\"foy8gwIu\"><div class=\"KegQvOm6 bOlXi_Q3\"><div class=\"a2nFYRcv\">"+ "<img src=\"https://p3-pc-siq4%3D&amp;from=876277922\"><img src=\"https://p3-pc-s56as1d65samp;from=666666\">"+ "</div>";str = fileRead();//读取上一步内容Pattern pattern = Pattern.compile("<img [^>]*src=['\"]([^'\"]+)[^>]*>");Matcher matcher = pattern.matcher(str);while (matcher.find()) {String ss = matcher.group();
//		    System.out.println(ss.substring(10, ss.length()-2));list.add(ss.substring(10, ss.length() - 2));}return list;}

4.下载表情包

 代码如下:

/*** 下载网络文件到本地磁盘* * @param urlString 文件地址* @param saveDir   本地磁盘路径* @return*/public static String download(String urlString, String saveDir) {InputStream is = null;FileOutputStream os = null;try {// 构造URLURL url = new URL(urlString);// 打开连接URLConnection con = url.openConnection();// 输入流is = con.getInputStream();// 1K的数据缓冲byte[] bs = new byte[1024];// 读取到的数据长度int len;// 输出的文件流
//            String filename = System.getProperty("os.name").toLowerCase().contains("win") ?
//            		System.getProperty("user.home") + "\\Desktop\\temp.jpg" : "/home/project/temp.jpg";if (!new File(saveDir).exists()) {new File(saveDir).mkdirs();}String filename = saveDir + String.valueOf(System.currentTimeMillis()) + ".png";// 使用时间戳命名File file = new File(filename);os = new FileOutputStream(file, true);// 开始读取while ((len = is.read(bs)) != -1) {os.write(bs, 0, len);}return filename;} catch (Exception e) {e.printStackTrace();} finally {// 关闭链接try {if (null != os) {os.close();}} catch (IOException e) {e.printStackTrace();}try {if (null != is) {is.close();}} catch (IOException e) {e.printStackTrace();}}return null;}

 5.执行代码

public static void main(String[] args) throws Exception {
//		String url = "https://p3-pc-sign.douyinpic.com/obj/tos-cn-i-tsj2vxp0zn/852eb9046306409282f9ebf4e2414dff?x-expires=2006748000&amp;x-signature=YLdPxtVWwKfLJcIvExFzt84Clq4%3D&amp;from=876277922";String dir = "D:\\emotion\\";
//		System.out.println(download(url,dir));ArrayList<String> list = matchUrl();for (Iterator<String> iterator = list.iterator(); iterator.hasNext();) {String url = (String) iterator.next();download(url, dir);}//		fileRead();}

总结

今天突然想到之前想做一个自定义表情包面板,可以用表情来评论。后面再写一个自定义的表情面板插件。


http://www.ppmy.cn/news/1018041.html

相关文章

构建Docker容器监控系统 (1)(Cadvisor +InfluxDB+Grafana)

目录 Cadvisor InfluxDBGrafana 1. Cadvisor 2.InfluxDB 3.Grafana 开始部署&#xff1a; 下载组件镜像 创建自定义网络 创建influxdb容器 创建数据库和数据库用户 创建Cadvisor 容器 准备测试镜像 创建granafa容器 访问granfana 添加数据源 Add data source 新建 …

CCF-A类时序知识图谱(temporal knowledge graph)2022、2023论文整理

History Repeats: Overcoming Catastrophic Forgetting For Event-Centric Temporal Knowledge Graph Completion 本文是关于如何用一种通用的持续框架来解决TKG补全的问题。时间知识图谱是一种动态的知识图谱&#xff0c;它包含了随着时间变化的事实。TKG补全的目的是预测缺失…

【java】【高级拓展1】常见算法正则表达式异常

目录 1 算法 1.1 简单认识算法 1.2 常见算法 - 排序算法 1.2.1 冒泡排序 1.2.2 选择排序 1.3 常见算法-查找算法 1.3.1 基本查询&#xff08;顺序查找&#xff09;不好&#xff08;性能不好&#xff09; 1.3.2 二分查找&#xff08;折半查找&#xff09; 2 正则表达式 …

MySQL使用C/C++访问

目录 前言 1.引入第三方库 2.MySQL接口介绍 总结 前言 哈喽&#xff0c;各位小伙伴&#xff0c;大家好&#xff01;今天我们要讲的是关于如何使用C/C语言访问数据库&#xff0c;实现对数据库内容的增删查改。 1.引入第三方库 访问数据库&#xff0c;MySQL提供了对应的第三方…

C语言的动态分配空间C++的动态分配空间问题

动态分配空间 C&#xff1a;1、malloc 2、calloc C&#xff1a;new运算符 一 malloc malloc()&#xff1a; 这个函数用于分配一块指定大小的内存块&#xff0c;并返回一个指向该内存块的指针。语法如下&#xff1a; void* malloc(size_t size); 示例&#xff1a; int* ptr …

UNIQUE VISION Programming Contest 2023 Summer(AtCoder Beginner Contest 312)D题题解

文章目录 [Count Bracket Sequences](https://atcoder.jp/contests/abc312/tasks/abc312_d)问题建模问题分析1.分析合法括号字符串的特点2.从集合角度分析字符串每个字符的作用代码 Count Bracket Sequences 问题建模 给定一个字符串&#xff0c;字符串内仅有3种字符&#xff…

湘大oj1138爱你一生一世题解:最大公约数 逆向思维 int整除会向下取整

一、链接 爱你一生一世 二、题目 题目描述 在2013年1月4日&#xff0c;这个“爱你一生一世”的特别日子&#xff0c;男生都想向自己的喜欢的女生表达爱意。 你准备在该死的C语言考试后&#xff0c;去向她&#xff08;或者他&#xff1f;&#xff09;告白。告白怎么能缺了礼…

8.7黄金最新行情走势分析及多空交易策略

近期有哪些消息面影响黄金走势&#xff1f;下周黄金多空该如何研判&#xff1f; ​黄金消息面解析&#xff1a;周一&#xff08;8月7日&#xff09;亚洲时段&#xff0c;现货黄金震荡下跌&#xff0c;目前交投于1938美元/盎司&#xff0c;上周五金价探底回升&#xff0c;因美国…