资讯专栏INFORMATION COLUMN

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

yuanxin / 3314人阅读

摘要:今天我就用爬取了一个斗图网站上的所有表情包,用来充实自己的表情包库。下载完所有图片,总共有思路主要通过解析页面的源代码来获取图片的地址,然后通过图片地址下载图片到本地,所以要学会使用浏览器进行分析。

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71919.html

相关文章

  • 用python爬取 20w 表情之后,感叹我族人是多么强大!

    摘要:是这样的有一次想要斗图配图就在网上搜索表情包然后发现了一个表情巨多的网站不小心动起了邪念产生了兴趣那就把它们存下来吧用请求了一下发现这个网站没有做反爬发现这里有的页面简单的切换一下页面可以发现第一页的链接是这样的所以以此类推构建一下所有这样 是这样的 有一次想要斗图 配图 就在网上搜索表情包 然后发现了一个表情巨多的网站 不小心动起了邪念 产生了兴趣 showImg(https:/...

    Sike 评论0 收藏0
  • 首次公开,整理12年积累博客收藏夹,零距离展示《收藏夹吃灰》系列博客

    摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...

    Harriet666 评论0 收藏0
  • 【正经AI on Python入门系列】0.来学点Python吧!从一个斗图工具开始

    摘要:因此,本文将会以一些正经的严谨的有深度的大概吧的课题,慢慢的接触人工智能的相关知识。 Before The Beginning     近年,技术圈炒的最火的两个话(ba)题(gua)不外乎就是人工智障智能以及炒币区块链了,这个系列文章我主要以一个小菜鸟的角度一步一步的对人工智能的相关知识做一点了解,也算是一个颤颤巍巍追着AI浪潮公交车的社会主义五好青年,咳咳,扯远了...其实对于人工...

    赵连江 评论0 收藏0
  • JavaSE与数据结构基础知识系列——专栏导航

    ⭐️前面的话⭐️ 大家好!这是Java基础知识与数据结构博文的导航帖,收藏我!学习Java不迷路! ?博客主页:未见花闻的博客主页 ?欢迎关注?点赞?收藏⭐️留言? ?本文由未见花闻原创,CSDN首发! ?首发时间:?2021年11月11日? ✉️坚持和努力一定能换来诗与远方! ?参考书籍:?《Java核心技术卷1》,?《Java核心技术卷2》,?《Java编程思想》 ?参考在线编程网站:?牛...

    Cc_2011 评论0 收藏0
  • 【微信程序爬虫】表情程序图文视频教学,从零写起,保姆教程!!!

    摘要:文章目录前言爬取分析视频教学成果展示福利入门到就业学习路线规划小白快速入门爬虫路线前言皮皮虾一个沙雕而又有趣的憨憨少年,和大多数小伙伴们一样喜欢听歌游戏,当然除此之外还有写作的兴趣,,日子还很长,让我们一起加油努力叭话 ...

    coordinate35 评论0 收藏0

发表评论

0条评论

yuanxin

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<