文章目录
目录
前言
这里记录一次用代码下载网络文件的过程,以获取抖音表情包为例。
一、操作步骤
1.引入
首先抖音有网页版,用浏览器就可以观看,用户评论发布表情在评论面板自然也是一个url链接,
我们只需F12打开审查表情包面板的代码,将带有多个表情包的html复制并保存到我们电脑文件中,再用正则筛选出各个url,将url用代码去下载该表情包文件并保存到本地文件即可。
2.读取出文件内容
代码如下:
c
/**
* 读取本地文件内容转为String字符串
*
* @return
* @throws Exception
*/
public static String fileRead() throws Exception {
File file = new File("D:\\emo\\emo.html");// 定义一个file对象,用来初始化FileReader
FileReader reader = new FileReader(file);// 定义一个fileReader对象,用来初始化BufferedReader
BufferedReader 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
代码如下:
java
/**
* 正则匹配字符串中多个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&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.下载表情包
代码如下:
java
/**
* 下载网络文件到本地磁盘
*
* @param urlString 文件地址
* @param saveDir 本地磁盘路径
* @return
*/
public static String download(String urlString, String saveDir) {
InputStream is = null;
FileOutputStream os = null;
try {
// 构造URL
URL 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.执行代码
java
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&x-signature=YLdPxtVWwKfLJcIvExFzt84Clq4%3D&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();
}
总结
今天突然想到之前想做一个自定义表情包面板,可以用表情来评论。后面再写一个自定义的表情面板插件。