下载网络文件到本地

文章目录

目录

前言

操作步骤

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.rhkb.cn/news/82936.html

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

相关文章

蓝桥杯上岸每日N题 第八期 (全球变暖)!!!

蓝桥杯上岸每日N题第八期(全球变暖)&#xff01;&#xff01;&#xff01; 同步收录 &#x1f447; 蓝桥杯上岸必背&#xff01;&#xff01;&#xff01;(第五期BFS) 大家好 我是寸铁&#x1f4aa; 冲刺蓝桥杯省一模板大全来啦 &#x1f525; 蓝桥杯4月8号就要开始了 &am…

MAPPO 算法的深度解析与应用和实现

【论文研读】 The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games 说明&#xff1a; 来源&#xff1a;36th Conference on Neural Information Processing Systems (NeurIPS 2022) Track on Datasets and Benchmarks. 是NIPS文章&#xff0c;质量有保障&…

黑马机器学习day2

1.1sklearn转换器和估计器 转换器和预估器&#xff08;estimator&#xff09; 1.1.1转换器 实例化一个转换器类 Transformer调用fit_transform() 转换器调用有以下几种形式&#xff1a; fit_transformfittransform 1.1.2估计器 在sklearn中&#xff0c;估计器是一…

uni——月份选择(横向滑动tab,横向滚动选择日期)

案例展示 案例代码 已封装成组件使用 <template><view><view class"tabBox"><scroll-view scroll-x"true" :scroll-left"scrollLeft" :scroll-with-animation"true"><view class"box"><…

[excel]vlookup函数对相同的ip进行关联

一、需求&#xff08;由于ip不可泄漏所以简化如下&#xff09; 有两个sheet: 找到sheet1在sheet2中存在的ip&#xff0c;也就是找到有漏洞的ip 二、实现 vlookup函数有4个参数 第一个:当前表要匹配的列&#xff0c;选择第一个sheet当前行需要处理的ip即可 第二个:第二个shee…

北京多铁克FPGA笔试题目

1、使用D触发器来实现二分频 2、序列检测器&#xff0c;检测101&#xff0c;输出1&#xff0c;其余情况输出0 module Detect_101(input clk,input rst_n,input data, //输入的序列output reg flag_101 //检测到101序列的输出标志 );parameter S0 2d0;S1 2d1;S2 2d2;S4 …

ThingJS开发使用感受

封面来源于网络。 一、前言 1. 背景 出于为了实现有关厂区的数字孪生项目&#xff0c;断断续续使用ThingJS平台开发一年左右&#xff0c;做一个使用感受的总结。 2. 业务场景 开发一个基于厂区的数字孪生项目&#xff0c;基于ThingJS低代码开发的页面分为div3d、div2d结构&am…

rust关于项目结构包,Crate和mod和目录的组织

rust 最近开始学习rust语言。感觉这门语言相对java确实是难上很多。开几个文章把遇到的问题记录一下 rust关于包&#xff0c;Crate 关于包&#xff0c;Crate这块先看看官方书籍怎么说的 crate 是 Rust 在编译时最小的代码单位。如果你用 rustc 而不是 cargo 来编译一个文件…

直线模组在AGV物流设备起什么作用?

在物流产业高速发展的今天&#xff0c;机器人技术的应用程度已经成为决定企业间相互竞争和未来发展的重要衡量因素。智能机器人运用到物流产业&#xff0c;其效率不言而喻。AGV智能仓储作为现代物流系统的重要组成部分&#xff0c;物流自动化、智能化不光是能提升效率和安全性&…

【JavaEE】懒人的福音-MyBatis框架—介绍、搭建环境以及初步感受

【JavaEE】MyBatis框架要点总结&#xff08;1&#xff09; 文章目录 【JavaEE】MyBatis框架要点总结&#xff08;1&#xff09;1. MyBatis是什么&#xff1f;2. 搭建MyBatis的开发环境2.0 MySQL建库建表2.1 新项目添加MyBatis框架2.2 设置MyBatis的配置2.2.1 设置数据库的连接信…

U8g2 驱动oled自定义中文字库

原文&#xff1a;Arduino驱动LED128X64 - U8g2 参考&#xff1a; Arduino通过u8g2库驱动OLED适合 u8g2 的中文字体&#xff0c;采用文泉驿点阵宋体作为源本&#xff0c;提供 12x12、13x13、14x14、15x15 和 16x16 点阵字库。 本文所需工具下载 我们在项目中大概率会遇到LED显示…

Unity3d C#利用本地网页快速打开萤石云监控视频流(ezopen)实现云台,声音等控制,支持WebGL平台,替代UMP播放(含源码)

前言 之前我介绍了替代Universal?Media?PlayerUMP播放石云监控视频流(ezopen)的功能&#xff0c;效果还是很明显的&#xff0c;笔者的测试是差不多3-5秒就能打开监控画面&#xff0c;不过稍微遗憾的是&#xff0c;之前的功能是iframe打开石云提供的播放网页的形式&#xff0…

在linux系统上部署Nginx

一、准备环境 1、关闭防火墙 systemctl disable firewalld.service 2、 安装Nginx相关依赖 yum install -y gcc-c zlib zlib-developenssl openssl-devel pcre pcre-devel 二、源码安装 1、上传压缩包并解压到目标文件 cd /usr/local tar -zxvf nginx-1.22.0.tar.gz 2、…

06-4_Qt 5.9 C++开发指南_MDI应用程序设计

文章目录 1. MDI简介2. 文档窗口类 QFormDoc 的设计3. MDI主窗口设计与子窗口的使用3.1 主窗口界面设计3.2 MDI子窗口的创建与加入3.3 QMdiArea 常用功能函数3.4 MDI的信号 4. 源码4.1 qwmainwindow.h4.2 qwmainwindow.cpp 1. MDI简介 传统的应用程序设计中有多文档界面(Multi…

企业权限管理(六)-订单详情

订单详情查询 跳转到订单详情页面orders-show.jsp <button type"button" class"btn bg-olive btn-xs" onclick"location.href${pageContext.request.contextPath}/orders/findById.do?id${orders.id}">详情</button>OrdersControl…

北美跨境购物商城多语言多货币系统快捷搭建(java开源)

我了解到您想搭建一个北美跨境购物商城&#xff0c;拥有多语言和多货币系统&#xff0c;并且希望使用Java开源技术进行快速搭建。以下是一个基本的搭建步骤&#xff1a; 1.确定需求&#xff1a;首先确定您的商城需求&#xff0c;包括功能、设计和用户体验等方面。确保您清楚地…

进入现代云技术的世界-APIGateway、ServiceMesh、OpenStack、异步化框架、云原生框架、命令式API与声明式API

目录 APIGateway Service Mesh OpenStack 异步化框架 云原生框架 命令式API与声明式API APIGateway API网关&#xff08;API Gateway&#xff09;是一个服务器——充当了客户端和内部服务之间的中间层。API网关负责处理API请求&#xff0c;将客户端的请求路由到相应的后端…

数据挖掘全流程解析

数据挖掘全流程解析 数据指标选择 在这一阶段&#xff0c;使用直方图和柱状图的方式对数据进行分析&#xff0c;观察什么数据属性对于因变量会产生更加明显的结果。 如何绘制直方图和条形统计图 数据清洗 观察数据是否存在数据缺失或者离群点的情况。 数据异常的两种情况…

webpack基础知识八:说说如何借助webpack来优化前端性能?

一、背景 随着前端的项目逐渐扩大&#xff0c;必然会带来的一个问题就是性能 尤其在大型复杂的项目中&#xff0c;前端业务可能因为一个小小的数据依赖&#xff0c;导致整个页面卡顿甚至奔溃 一般项目在完成后&#xff0c;会通过webpack进行打包&#xff0c;利用webpack对前…

leetcode 33.搜索旋转排序数组

⭐️ 题目描述 &#x1f31f; leetcode链接&#xff1a;搜索旋转排序数组 ps&#xff1a; 本题是二分查找的变形&#xff0c;旋转排序数组之后其实会形成两个有序的区间。算出平均下标先判断是否与 target 相等&#xff0c;因为这样可以减少代码的冗余。如果前者不成立则使用平…