JavaSE小实践1:Java爬取斗图网站的所有表情包

news/2024/4/27 19:48:19/文章来源:https://blog.csdn.net/weixin_34072637/article/details/88720889
跟朋友聊天总会用到大量表情包,有些人甚至专门收集各种各样的表情包,看看谁能打败谁。今天我就用java爬取了一个斗图网站上的所有表情包,用来充实自己的表情包库。代码逻辑有可能并不完美,哈哈,也花了我几个小时才完成呢。
下载完所有图片,总共有225M.

思路:主要通过解析页面的源代码来获取图片的URL地址,然后通过图片地址下载图片到本地,所以要学会使用浏览器进行分析。

  1. 所用jar包:jsoup-1.8.1.jar
  2. 网站首页:https://doutushe.com/portal/index/index/p/1
  3. 浏览器: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 = "";//暂时存储得到的每个urlString 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标签,得到hreffor(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(" ");//图片组的urlfor(int i=0;i<pictureUrlArry.length;i++) {//遍历得到每组图片的urlString pictureHtml = getUrlResource(pictureUrlArry[i],"utf-8");Document document = Jsoup.parse(pictureHtml);//得到该组图片的分类名称String dir =  document.getElementsByTag("blockquote").first().child(0).text();//该标签包含所有图片urlElements elements = document.getElementsByClass("lazy");for(Element ele: elements) {//得到每张图片urlpicturl = 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");//获取该页面所有组图片的urlString pictureUrl = findPictureUrl(context);downallPicture(pictureUrl,"E:\\image\\表情包");}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_715435.aspx

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

相关文章

开发基于SpringBoot和BootStrap的全栈论坛网站(一):准备阶段

当学习完一种技术后&#xff0c;将所有知识点串联起来最好的方法就是以此为基础做一个完整的项目。最近心血来潮打算以SpringBoot为基础从零开始开发一款全栈的论坛博客网站。 &#xff08;一&#xff09;前序 对本人来说开发这个项目最难的反而是前端的部分&#xff0c;作为一…

开发基于SpringBoot和BootStrap的全栈论坛网站(二):后端人员如何快速使用BootStrap

本次项目所用到的前端框架是BootStrap3&#xff0c;原因是对于后端人员来说这个框架能很快地搭建出一个页面。对于windows系统和mac系统来说&#xff0c;使用BootStrap主要有两种方法。 &#xff08;一&#xff09;BootStrap起步 首先进入BootStrap官网https://v3.bootcss.co…

开发基于SpringBoot和BootStrap的全栈论坛网站(三):登陆注册以及cookies的功能完成

如果你对这个项目感兴趣&#xff0c;可以从头看起&#xff1a; 开发基于SpringBoot和BootStrap的全栈论坛网站&#xff08;一&#xff09;&#xff1a;准备阶段 开发基于SpringBoot和BootStrap的全栈论坛网站&#xff08;二&#xff09;&#xff1a;后端人员如何快速使用Boot…

开发基于SpringBoot和BootStrap的全栈论坛网站(四):完成问题发布功能

如果你对这个项目感兴趣&#xff0c;可以从头看起&#xff1a; 开发基于SpringBoot和BootStrap的全栈论坛网站&#xff08;一&#xff09;&#xff1a;准备阶段 开发基于SpringBoot和BootStrap的全栈论坛网站&#xff08;二&#xff09;&#xff1a;后端人员如何快速使用Boot…

开发基于SpringBoot和BootStrap的全栈论坛网站(五):完成首页展示以及分页功能

如果你对这个项目感兴趣&#xff0c;可以从头看起&#xff1a; 开发基于SpringBoot和BootStrap的全栈论坛网站&#xff08;一&#xff09;&#xff1a;准备阶段 开发基于SpringBoot和BootStrap的全栈论坛网站&#xff08;二&#xff09;&#xff1a;后端人员如何快速使用Boot…

开发基于SpringBoot和BootStrap的全栈论坛网站(六):完成个人中心、问题详情和问题编辑

如果你对这个项目感兴趣&#xff0c;可以从头看起&#xff1a; 开发基于SpringBoot和BootStrap的全栈论坛网站&#xff08;一&#xff09;&#xff1a;准备阶段 开发基于SpringBoot和BootStrap的全栈论坛网站&#xff08;二&#xff09;&#xff1a;后端人员如何快速使用Boot…

开发基于SpringBoot和BootStrap的全栈论坛网站(七):完成回复和二级回复功能

论坛的搭建即将进入尾声&#xff0c;完成回复功能后只剩最后一个大功能&#xff1a;通知。然后就是对页面的精修和一些bug的修复&#xff0c;这些不会通过博客来展示&#xff0c;历史博客记录可以看我的实战项目专辑&#xff0c;在这里也不放链接了。 对一个论坛网站来说&…

开发基于SpringBoot和BootStrap的全栈论坛网站(八):完成回复通知的功能

当有人回复了你的问题时&#xff0c;肯定需要有通知能让我们看到&#xff0c;今天就来完成最后一个大功能--回复通知。具体的效果如下&#xff1a; 当有未读通知时&#xff0c;在导航栏上会显示未读通知的数量&#xff0c;点进去后能看到未读的信息&#xff0c;点击每条未读信息…

如何更改PHPCMS网站后台标题(title)

打开PHPCMS安装目录&#xff0c;选择phpcms 然后选择Languages目录&#xff0c;打开。 打开目录后&#xff0c;选择zh-cn目录&#xff0c;选择admin.lang.php用editPlus打开&#xff0c;将第九行后面的引号中的内容换成你想要改变的网站后台标题&#xff0c;保存文件 转载于:ht…

查准考证网站卡了整整一个小时进不去,被抢票支配的恐惧又来了

&#xff08;一&#xff09;概述 今天是国考出准考证的时间&#xff0c;刚好女朋友也要报名了这次考试&#xff0c;作为合格的男朋友当然是要在第一时间将准考证信息下载下来。结果到了半夜12点之后&#xff0c;整个官网一直处于无法连接、502、503、接口报错等各种问题。到了…

搜索引擎登录,网站分类目录登录地址

搜索引擎登录入口 google 如果你的网站是新发布的&#xff0c;或是访问量较低的网站在内容更新时&#xff0c;很有必要主动提交到Google&#xff0c;这样会使网站资料迅速更新倒Google搜索资料库&#xff0c;让用户能及时搜索到你的最新资料。 登录地址&#xff1a;http://www…

基于SpringBoot和BootStrap的全栈论坛网站(附上源码)

耗时大约三个星期不到的时间&#xff0c;把这个论坛项目基本上算是完成了&#xff0c;做这个项目最主要的目的是熟悉SpringBoot的使用&#xff0c;然后通过整个项目了解了BootStrap、Thymeleaf、editor.md等等工具的使用&#xff0c;今天就来做一下总结 &#xff08;一&#x…

一个有意思的网站

http://www.icpoline.com 上面看到一句话&#xff1a;傻的人之所以傻&#xff0c;那就在于他&#xff08;她&#xff09;不知道自己傻&#xff0c;如果他&#xff08;她&#xff09;知道自己傻&#xff0c;那他&#xff08;她&#xff09;就不傻。 所以&#xff0c;我敢断定…

网市场云建站 v4.8 增加私有模版库,开放 Mysql 配置、在线客服源码

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; 网市场云建站系统&#xff0c;结合各种产品&#xff0c;将一个网站的服务器成本降低到0.1元&#xff01;打破传统建站的高成本&#xff0c;让价格不再是阻碍的门槛&#xff0c;让每个人都能有自…

高并发量网站解决方案

为什么80%的码农都做不了架构师&#xff1f;>>> 最近遇到高并发数据访问的问题&#xff0c;这篇博文讲的比较全面&#xff0c;值得一看。来源参考&#xff1a; http://blog.csdn.net/y_h_t/article/details/6322823 转载于:https://my.oschina.net/garyun/blog/602…

QQ登录网站接入功能实现--非官方文档搬运

背景 最近第一次使用QQ登录功能&#xff0c;期间遇到这种问题&#xff0c;在网上找了很多资料&#xff0c;大多都是官方的搬运&#xff0c;并没有真正的干料&#xff0c;可能是个人能力问题&#xff0c;遇到了各种麻烦&#xff0c;折腾了几天&#xff0c;最终弄好&#xff0c;…

从vancl看垂直商业网站的崛起

从vancl看垂直网站的崛起&#xff08;文&#xff1a;王英雄&#xff09;如果说2007年IT业内的几大事件&#xff0c;卖衬衣的卖火了&#xff0c;这肯定是2007年的重大事件之一。提起卖衬衣的&#xff0c;大家肯定会想到的是PPG&#xff0c;但我为什么不拿PPG做标题呐&#xff1f…

大型网站应用之海量数据和高并发解决方案总结一二

一、网站应用背景 开发一个网站的应用程序&#xff0c;当用户规模比较小的时候&#xff0c;使用简单的&#xff1a;一台应用服务器一台数据库服务器一台文件服务器&#xff0c;这样的话完全可以解决一部分问题&#xff0c;也可以通过堆硬件的方式来提高网站应用的访问性能&…

小白入门:大型网站技术架构负载均衡技术介绍及学习资源推荐

十年间&#xff0c;负载均衡的前沿技术层出不穷&#xff0c;令用户眼花缭乱。经常在技术网站、文档中出现的“四层负载均衡”、“七层负载均衡”字眼有什么含义?有什么区别?对客户网络有哪些不同的优化? 在大型的网站服务器集群中&#xff0c;负载均衡技术是必不可少的。使…

Flex SEO(Search engine optimization),让浏览器找到你的flash站点

Search engine optimistation 也就是让你的站点信息能被“搜索引擎”&#xff08;Google,baidu…&#xff09;搜索到。SEO总分两大类&#xff0c;white hats和black hats&#xff0c;简单讲black hats是一作弊的方法&#xff0c; 例如在meta标签中加一堆重复的关键词&#xff0…