java斗图表情_Java爬取斗图网站的所有表情包
跟朋友聊天总会用到大量表情包,有些人甚至专门收集各种各样的表情包,看看谁能打败谁。今天我就用java爬取了一个斗图网站上的所有表情包,用来充实自己的表情包库。代码逻辑有可能并不完美,哈哈,也花了我几个小时才完成呢。
下载完所有图片,总共有225M.
思路:主要通过解析页面的源代码来获取图片的URL地址,然后通过图片地址下载图片到本地,所以要学会使用浏览器进行分析。
所用jar包:jsoup-1.8.1.jar
网站首页:https://doutushe.com/portal/index/index/p/1
浏览器:Chrome
1,获取网页源代码
/**
* 获取网页源代码
* @author Augustu
* @param url 网页地址
* @param encoding 网页编码
* @return 网页源代码
*/
public static String getUrlResource(String url,String encoding) {
//网页源代码,用String这个容器记录
String htmlResource = "";
//记录读取网页的每一行数据
String temp = null;
try {
//1,找到网站地址
URL theUrl = new URL(url);
//2,建立起与网站的连接
URLConnection urlConnection = theUrl.openConnection();
//3,创建输入流,此处读取的是网页的源代码
InputStreamReader isr = new InputStreamReader(urlConnection.getInputStream(),encoding);
//4,对输入流进行缓冲,加快读取速度
BufferedReader reader = new BufferedReader(isr);
//5,一行一行读取源代码,存到htmlResource中
while((temp = reader.readLine()) != null) {
htmlResource += temp;
}
} catch (IOException e) {
e.printStackTrace();
}
return htmlResource;
}
2,获取页面所有组图片的UrL地址
/**
* 获取页面所有组图片的UrL地址
* @author Augustu
* @param context 每个页面的urL
* @return 获取页面所有组图片的UrL地址
*/
public static String findPictureUrl(String context) {
String temp = "";//暂时存储得到的每个url
String pictureUrl = "";//得到所有URL
//1,Jsoup将读取的网页源代码解析为Html文档,便可以使用Jsoup的方法操作html元素了,就像javascript一样
Document document = Jsoup.parse(context);
//2,观察网页源代码,发现每组图片都连接到了另一个URL地址,这个a标签的class为“link-2”
Elements groupUrl = document.getElementsByClass("link-2");
//3,遍历每个a标签,得到href
for(Element ele: groupUrl) {
//此处我发现每次Url都输出两次,也没找到原因,就用此方法先解决他
if(ele.attr("href") == temp) {
continue;
}
temp = ele.attr("href");
//4,将所有URL存入String中,并使用空格分开,便于后面分割
//本来我使用“|”分隔开来,分割的结果竟然是每个字符都分开了
pictureUrl += "https://doutushe.com"+ele.attr("href")+" ";
}
return pictureUrl;
}
3,下载单张图片
/**
* 下载单张图片
* @param picturl 图片地址
* @param filePath 下载路径
* @param fileName 下载名
*/
public static void downPicture(String picturl,String filePath,String fileName) {
FileOutputStream fos = null;//输出文件流
BufferedOutputStream bos = null;//缓冲输出
File file = null;//创建文件对象
File dir = new File(filePath);//创建文件保存目录
Connection.Response response;
try {
//1,Jsoup连接地址,得到响应流,ignoreContentType表示忽略网页类型,如果不加会报错(默认只支持文本),因为我们页面是图片
response = Jsoup.connect(picturl).ignoreContentType(true).execute();
//2,将页面内容按字节输出
byte[] img = response.bodyAsBytes();
//3,写入本地文件中
//判断文件目录是否存在,
if(!dir.exists() ){
dir.mkdir();//创建文件夹
}
file = new File(filePath+"\\"+fileName);//创建文件
fos = new FileOutputStream(file);
bos = new BufferedOutputStream(fos);
bos.write(img);//写入本地
} catch (IOException e) {
e.printStackTrace();
}finally{
//4,释放资源
if(bos!=null){
try {
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(fos!=null){
try {
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
4,下载所有图片
/**
* 下载所有图片
* @author Augustu
* @param pictureUrl 每组图片url
*/
public static void downallPicture(String pictureUrl,String downLoadPath) {
String picturl = "";
String pictureName ="";//
String[] pictureUrlArry = pictureUrl.split(" ");//图片组的url
for(int i=0;i
//遍历得到每组图片的url
String pictureHtml = getUrlResource(pictureUrlArry[i],"utf-8");
Document document = Jsoup.parse(pictureHtml);
//得到该组图片的分类名称
String dir = document.getElementsByTag("blockquote").first().child(0).text();
//该标签包含所有图片url
Elements elements = document.getElementsByClass("lazy");
for(Element ele: elements) {
//得到每张图片url
picturl = ele.attr("data-original");
//观察源代码,发现获取的图片地址多了/themes/doutushe/Public/assets/images/doutushe-erweima.jpg,将其删除
if(picturl.equals("/themes/doutushe/Public/assets/images/doutushe-erweima.jpg")) {
continue;
}
//得到每张图片的名字,别忘了加后缀
pictureName = ele.attr("title")+".gif";
//下载该图片
downPicture(picturl,downLoadPath+"\\"+dir,pictureName);
}
}
}
5,主函数运行代码
public static void main(String[] args) {
String context = "";
//观察源代码,发现共有28个页面
for(int i=1;i<=28;i++) {
//获取每个页面
context = getUrlResource("https://doutushe.com/portal/index/index/p/"+i+"","utf-8");
//获取该页面所有组图片的url
String pictureUrl = findPictureUrl(context);
downallPicture(pictureUrl,"E:\\image\\表情包");
}
}
java斗图表情_Java爬取斗图网站的所有表情包相关推荐
- Java获取游戏头像_java爬取堆糖所有头像(高质量版头像)
百度贴吧的用户头像爬下来之后,图片经过裁剪,尺寸太小,都是110*110之类的,并且有很多用户被注销后,头像是缩略图重复,所以爬了堆糖里面的头像,堆糖里的头像质量还是蛮高的. 堆糖官网:www.dui ...
- spider_爬取斗图啦所有表情包(图片保存)
"""爬取斗图吧里面的所有表情包 知识点总结: 一.使用requests库进行爬取,随机请求头(网站反爬措施少.挂个请求头足矣) 二.具体思路: 1.先爬取所有的图片ur ...
- scrapy爬取斗图表情
用scrapy爬取斗图表情,其实呀,我是运用别人的博客写的,里面的东西改了改就好了,推存链接" http://www.cnblogs.com/jiaoyu121/p/6992587.html ...
- 手把手教学php表情包,手把手教你爬取斗图啦表情包
爬取表情包 闲来无事,突然想到表情包好久没有更新了,正好这几天学了爬虫,利用爬虫来更新一波表情包,哈哈哈. 有一个网站,叫做"斗图啦",网址是:https://www.doutul ...
- 多线程爬取斗图表情包
和朋友在QQ上聊天感觉呀没有激情,突然,突发奇想,我写个小的爬虫 ,把表情包爬取下来随便挑,斗到他们吐血. 下面是爬取斗图的代码,代码可供参考 #encoding:utf8#模块import reim ...
- 斗图斗不过小伙伴?python多线程爬取斗图网表情包,助你成为斗图帝!
最近python基础课讲到了多线程,老师让交个多线程的实例练习.于是来试试多线程爬虫,正好复习一下mooc上自学的嵩天男神的爬虫知识.想法很美好,过程却很心酸,从早上开始写,每次出现各种奇怪问题,到现 ...
- python3爬虫——多线程爬取斗图网表情包
本文用多线程生产者,消费者模式爬取斗图网的表情包,并下载保存到本地,get_page()函数负责获取页面的图片的url链接,downlod_img()函数通过图片url下载保存到本地文件夹中,开启多线 ...
- 爬虫笔记——多线程爬取斗图网表情包(threading)
爬虫笔记--多线程爬取斗图网表情包(threading) 网站观察 爬取框架 具体代码 斗图网网址:斗图网,这里以爬取最新套图为例. 网站观察 在网页翻页操作中可以看到网页是非动态加载的(page为页 ...
- python多线程爬取斗图啦数据
python多线程爬取斗图啦网的表情数据 使用到的技术点 requests请求库 re 正则表达式 pyquery解析库,python实现的jquery threading 线程 queue 队列 ' ...
最新文章
- SSH无需密码密钥登录
- 从ICLR提交论文看机器学习的趋势和风口
- 【剑指offer-Java版】28字符串的排列
- Edit Distance Python源码及支持包的实现
- git已有项目修改提交
- 程序员基本功04JAVA的内存回收
- 一个程序员的爱情故事
- 终于有人把大数据架构讲明白了
- Java之五种遍历Map集合的方式
- django 坑~~
- Delphi学习之函数 ⑨汉字拼音功能函数
- Vc6.0打开该文件坠毁
- 好程序员分享js实现简单的板球游
- php 获取当前的域名
- NPDP产品经理认证:产品开发项目的风险评估
- POJO有哪些要求?
- win7如何启用计算机的无线功能,win7如何开启无线功能
- Qt5.4.1播放视频语音文件
- mysql libmysqlclient_libmysqlclient.a无处可寻
- opengl高级光照之延迟渲染以及光体积
热门文章
- OpenJudge - 海贼王之伟大航路(状态压缩+DFS)
- 【深度学习实战04】——SSD tensorflow图像和视频的目标检测
- HTML、HTML5、XHTML、XML、XSL、DTD、XML Schema 简单介绍
- 腾讯通 admin.php,配置RTX腾讯通升级使用SQL Server数据库
- 将边缘云装进胶囊数据中心需要几步?
- Kubernetes高可用集群搭建
- oracle判断为周一_oracle根据四位年周取当周周一的日期函数
- MIMIC IV数据库衍生表格配置
- Django 学习小组:基于类的通用视图详解(一)
- 计算机网课自我鉴定,计算机实习自我鉴定