跟朋友聊天总会用到大量表情包,有些人甚至专门收集各种各样的表情包,看看谁能打败谁。今天我就用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爬取斗图网站的所有表情包相关推荐

  1. Java获取游戏头像_java爬取堆糖所有头像(高质量版头像)

    百度贴吧的用户头像爬下来之后,图片经过裁剪,尺寸太小,都是110*110之类的,并且有很多用户被注销后,头像是缩略图重复,所以爬了堆糖里面的头像,堆糖里的头像质量还是蛮高的. 堆糖官网:www.dui ...

  2. spider_爬取斗图啦所有表情包(图片保存)

    """爬取斗图吧里面的所有表情包 知识点总结: 一.使用requests库进行爬取,随机请求头(网站反爬措施少.挂个请求头足矣) 二.具体思路: 1.先爬取所有的图片ur ...

  3. scrapy爬取斗图表情

    用scrapy爬取斗图表情,其实呀,我是运用别人的博客写的,里面的东西改了改就好了,推存链接" http://www.cnblogs.com/jiaoyu121/p/6992587.html ...

  4. 手把手教学php表情包,手把手教你爬取斗图啦表情包

    爬取表情包 闲来无事,突然想到表情包好久没有更新了,正好这几天学了爬虫,利用爬虫来更新一波表情包,哈哈哈. 有一个网站,叫做"斗图啦",网址是:https://www.doutul ...

  5. 多线程爬取斗图表情包

    和朋友在QQ上聊天感觉呀没有激情,突然,突发奇想,我写个小的爬虫 ,把表情包爬取下来随便挑,斗到他们吐血. 下面是爬取斗图的代码,代码可供参考 #encoding:utf8#模块import reim ...

  6. 斗图斗不过小伙伴?python多线程爬取斗图网表情包,助你成为斗图帝!

    最近python基础课讲到了多线程,老师让交个多线程的实例练习.于是来试试多线程爬虫,正好复习一下mooc上自学的嵩天男神的爬虫知识.想法很美好,过程却很心酸,从早上开始写,每次出现各种奇怪问题,到现 ...

  7. python3爬虫——多线程爬取斗图网表情包

    本文用多线程生产者,消费者模式爬取斗图网的表情包,并下载保存到本地,get_page()函数负责获取页面的图片的url链接,downlod_img()函数通过图片url下载保存到本地文件夹中,开启多线 ...

  8. 爬虫笔记——多线程爬取斗图网表情包(threading)

    爬虫笔记--多线程爬取斗图网表情包(threading) 网站观察 爬取框架 具体代码 斗图网网址:斗图网,这里以爬取最新套图为例. 网站观察 在网页翻页操作中可以看到网页是非动态加载的(page为页 ...

  9. python多线程爬取斗图啦数据

    python多线程爬取斗图啦网的表情数据 使用到的技术点 requests请求库 re 正则表达式 pyquery解析库,python实现的jquery threading 线程 queue 队列 ' ...

最新文章

  1. SSH无需密码密钥登录
  2. 从ICLR提交论文看机器学习的趋势和风口
  3. 【剑指offer-Java版】28字符串的排列
  4. Edit Distance Python源码及支持包的实现
  5. git已有项目修改提交
  6. 程序员基本功04JAVA的内存回收
  7. 一个程序员的爱情故事
  8. 终于有人把大数据架构讲明白了
  9. Java之五种遍历Map集合的方式
  10. django 坑~~
  11. Delphi学习之函数 ⑨汉字拼音功能函数
  12. Vc6.0打开该文件坠毁
  13. 好程序员分享js实现简单的板球游
  14. php 获取当前的域名
  15. NPDP产品经理认证:产品开发项目的风险评估
  16. POJO有哪些要求?
  17. win7如何启用计算机的无线功能,win7如何开启无线功能
  18. Qt5.4.1播放视频语音文件
  19. mysql libmysqlclient_libmysqlclient.a无处可寻
  20. opengl高级光照之延迟渲染以及光体积

热门文章

  1. OpenJudge - 海贼王之伟大航路(状态压缩+DFS)
  2. 【深度学习实战04】——SSD tensorflow图像和视频的目标检测
  3. HTML、HTML5、XHTML、XML、XSL、DTD、XML Schema 简单介绍
  4. 腾讯通 admin.php,配置RTX腾讯通升级使用SQL Server数据库
  5. 将边缘云装进胶囊数据中心需要几步?
  6. Kubernetes高可用集群搭建
  7. oracle判断为周一_oracle根据四位年周取当周周一的日期函数
  8. MIMIC IV数据库衍生表格配置
  9. Django 学习小组:基于类的通用视图详解(一)
  10. 计算机网课自我鉴定,计算机实习自我鉴定