博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaSE小实践1:Java爬取斗图网站的所有表情包
阅读量:7066 次
发布时间:2019-06-28

本文共 4357 字,大约阅读时间需要 14 分钟。

跟朋友聊天总会用到大量表情包,有些人甚至专门收集各种各样的表情包,看看谁能打败谁。今天我就用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 = "";//暂时存储得到的每个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

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\\表情包");        }            }

转载地址:http://pgxll.baihongyu.com/

你可能感兴趣的文章
CentOS7下yum安装Jenkins
查看>>
简练软考知识点整理-确认范围管理
查看>>
不懂这几点就落后了:Android、Python工程师必读!
查看>>
Werkzeug 教程
查看>>
内核参数优化
查看>>
用户,组和权限零碎知识
查看>>
计算机
查看>>
文件修改较优方式
查看>>
oracle导入导出exp,imp
查看>>
oracle check if the display variable is set
查看>>
一键部署Openstack R版
查看>>
《JAVA——帮你解决高并发秒杀》
查看>>
国家级期刊发表要求注意事项
查看>>
C文件操作
查看>>
观察转小写的操作-字符函数
查看>>
Oracle查询访问同一表的两个以上索引(二)
查看>>
office 2016 下载地址
查看>>
Go语言之调试
查看>>
Go语言之 unsafe 包之内存布局
查看>>
Spring Cloud Config 入门
查看>>