在聊天中,你是否认为自己图库太小?你是否经常斗图?你斗图水平还是青铜水平?
有了它,你就是斗图界王者!!!
大家好,我是孤焰。今天在学校里学到了一个比较有趣的项目——随机表情包生成器,在这里分享给大家。
一、思路分享
简单来说,表情包随机生成器功能实现分为以下两点:
- 随机爬取表情包
- 随机显示表情包
二、源码实现
首先先从网页上面爬取表情包,下面源码以‘我爱斗图’网为例,并爬取其中的随机表情:
下面的源码为‘我爱斗图’网的爬虫代码:
package com.rand;
import java.io.*;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @ClassName com.rand.Crawling
* @Author 孤焰
* @Date 2020/10/12 10:33
* @Version 1.0
**/
public class Crawling {
//筛选<img>标签
private String REGEX_IMG = "<(img|IMG)(.*?)(/>|></img>|>)";
//筛选data-backup属性
private String REGEX_BACKUP = "(data-backup)=(\"|\')(.*?)(\"|\')";
//筛选图片网址
private String REGEX_HTTP = "(https://)(.*?)(.jpg)";
//下载图片的地址 这里的地址为图片的下载地址,这里地址以d盘为例
private String ACCESS = "D:\\";
//获取网站html的字符串类型
public String getHtml(String access) throws Exception {
URL url = new URL(access);
InputStream in = url.openStream();
//获取网站的html代码
InputStreamReader isr = new InputStreamReader(in);
BufferedReader bis = new BufferedReader(isr);
//将输入流转换为String类型的字符串
String html;
StringBuffer stringBuffer = new StringBuffer();
while ((html = bis.readLine()) != null) {
stringBuffer.append(html, 0, html.length());
stringBuffer.append("\n");
}
//关闭输入流
in.close();
isr.close();
bis.close();
//返回获取到的网站html结构的字符串类型
return stringBuffer.toString();
}
//将图片的链接从html结构中提取出来(通过正则表达式)
public List<String> extract(String html) throws Exception {
//用于存储网页中爬取的网址
List<String> list = new ArrayList<>();
Pattern pattern = Pattern.compile(REGEX_IMG);
Matcher matcher = pattern.matcher(html);
while (matcher.find()) {
Pattern pattern2 = Pattern.compile(REGEX_BACKUP);
Matcher matcher2 = pattern2.matcher(matcher.group());
while (matcher2.find()) {
Pattern pattern3 = Pattern.compile(REGEX_HTTP);
Matcher matcher3 = pattern3.matcher(matcher2.group());
while (matcher3.find()) {
list.add(matcher3.group());
}
}
}
return list;
}
//下载图片
public void download(List<String> picture) throws Exception {
InputStream in = null;
FileOutputStream fos = null;
System.out.println("共" + picture.size() + "张图片");
int i = 1;
for (String link : picture) {
String pictureName = link.substring(link.lastIndexOf("."), link.length());
URL url = new URL(link);
in = url.openStream();
fos = new FileOutputStream(new File(ACCESS + "\\" + i + pictureName));
byte []bytes = new byte[1024];
int length = 0;
System.out.println("开始下载:" + link);
while ((length = in.read(bytes)) != -1) {
fos.write(bytes, 0, length);
}
System.out.println("第" + i + "个图片下载完成");
++i;
in.close();
fos.close();
}
System.out.println("下载结束");
}
}
下图为上述爬虫代码的运行效果图:
爬取表情包成功之后,就差一个随机显示表情包的界面了,话不多说,直接上源码:
<%--
Created by IntelliJ IDEA.
User: 孤焰
Date: 2020/10/12
Time: 10:26
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>随机表情包生成器</title>
<style type="text/css">
div {
height: 600px;
width: 600px;
margin-top: 50px;
text-align: center;
margin-left:40%;
}
#img {
display: block;
height: 500px;
width: 500px;
border: 2px solid black;
margin: auto;
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
}
</style>
</head>
<body>
<div>
<img src="" id="img" >
</div>
</body>
<script type="text/javascript">
var count = 40;
var num = Math.round(Math.random() * count);
var img = document.getElementById("img");
img.src = "img/" + num + ".jpg";
</script>
</html>
这个源码的核心在script标签中,script标签负责随机表情包的显示。
三、效果截图
当两块功能模块编写完成之后就可以,我们这个简单的项目就完成了,下面为效果截图:
四、最后
项目源码链接:随机表情包生成器
都看到最后了,求求大家点个赞再走吧!你的支持是博主创作的最大动力。