java分页爬取站长素材的图片

本次我们要使用 jsoup 这个html解析器来进行网页爬虫

可能有人一脸懵逼?jsoup是个什么鬼?,干哈戳子的,楞个给说说呗

1、什么是jsoup

直接看看百度百科怎么说:

jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。

这边在补充几点jsoup相关:

  • jsoup也支持从某个地址直接去爬取网页源码,但是 只支持HTTP,HTTPS协议,支持不够丰富
  • 其中,要被解析的HTML可以是HTML的字符串、URL、文件
  • org.jsoup.Jsoup把输入的 HTML转换成一个org.jsoup.nodes.Document对象,然后从Document对象中取出想要的元素
  • org.jsoup.nodes.Document继承了org.jsoup.nodes.Element,Element又继承了org.jsoup.nodes.Node类。里面提供了丰富的方法来获取HTML的元素。

关系大概就是这样:Node > Element >Document

了解了什么是jsoup之后就直接上手来一个小案例吧,不用把这玩意想的很复杂(万物皆工具,所谓工具,按照说明书使用就行了,除非你想了解它的原理),这玩意,对于学习过js、jquery,html等相关的基本前端技能的人非常容易掌握,这玩意就是将网页结构解析出来,里面也提供css选择器来对网页进行操作的玩意,哈哈,先来个案例感受一下:

先导入maven坐标:

<dependency>
        <groupId>org.jsoup</groupId>
        <artifactId>jsoup</artifactId>
        <version>1.11.2</version>
</dependency>

目标:https://sc.chinaz.com/tupian/diqiutupian.html

这个网页的图片但是如何爬取该分类的所有图片呢?算了,入门案例懒得敲笔记了,自己看下面代码去。注释上面有

在这里插入图片描述
看看他的分页的url变化规律:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
发现规律了吗?提示:_(除第一页外的页数)

jsoup入门案例,懒得敲笔记了:

        int name = 0;
        InputStream is = null;
        FileOutputStream fos = null;
        //1、查看网页的变化规律,通过for循环来获取页面的链接
        //https://sc.chinaz.com/tupian/diqiutupian.html
        String path = null;
        for (int i = 1; i <= 3; i++) { //i控制页数
            if (i == 1) { //是第一页的时候
                path = "https://sc.chinaz.com/tupian/diqiutupian.html";
            } else {
                path = "https://sc.chinaz.com/tupian/diqiutupian_" + i + ".html";
            }
            System.out.println(path);
            //2.1、把html页面解析为document对象
            //2.2、把页面包装为url对象
            URL url = new URL(path);
            //2.3、通过jsoup解析器来解析页面,获得dom对象 传入 url 和 超时连接的毫秒数
            Document document = Jsoup.parse(url, 300000);
            //System.out.println(document);
            //3、通过dom对象对应标签名称获取数据
            Elements picblock = document.getElementsByClass("picblock");
            for (Element element : picblock) {
                //遍历获取每张图片的url
                String href = "http:" + element.child(0).child(0).attr("href");

                //4、把大图也的html页面解析为document对象
                //4.1、把页面包装为url对象 通过jsoup解析器来解析页面,获得dom对象
                URL hrefUrl = new URL(href);
                Document document2 = Jsoup.parse(hrefUrl, 300000);
                //5.1、通过dom对象的方法 找到指定的类名 imga
                Elements imga = document2.getElementsByClass("imga");
                for (Element element1 : imga) {
                    //5.2 选中指定标签通过.attr()方法 获取src属性的值
                    String imgSrc = "https:" + element1.child(0).attr("href");
                    System.out.println(imgSrc);
                    //6.1、打开imgSrc连接
                    //6.2、打开url对象,把路径作为参数传入
                    URL imgsrcUrl = new URL(imgSrc);
                    //6.2、通过url对象的openConnection()方法,打开图片连接
                    URLConnection connection = imgsrcUrl.openConnection();
                    //7.1、通过打开链接的对象的getInputStream(),获取字节输入流
                    is = connection.getInputStream();
                    //7.2、设置输出路径 outFile
                    String outFile = "C:\\爬虫image\\" + name + ".jpg";
                    name++;
                    //7.3、创建字节输出流,把输出路径作为参数传入 new FileOutputStream
                    fos = new FileOutputStream(outFile);
                    //7.4、读取数据 使用数组读字节,一次读1024字节
                    byte[] bytes = new byte[1024*7];
                    //7.5、使用while循环,输入输出进行先输入后输出 写数据
                    int len = 0;//返回值 读取到的长度,读不到的时候返回-1
                    while ((len = is.read(bytes)) != -1) {
                        fos.write(bytes, 0, len);
                    }
                    System.out.println("下载完成");
                }
            }
        }
        //7.6、关闭流
        is.close();
        fos.close();

运行测试:

在这里插入图片描述
有啥问题,欢迎探讨。。。。。。

在Python中进行分页爬取,可以使用循环来遍历不同页面的URL,并发送HTTP请求获取页面内容。以下是一个简单的示例来说明分页爬取的过程: ```python import requests # 定义分页数量和起始页码 page_count = 5 start_page = 1 # 循环遍历不同页面 for page in range(start_page, start_page + page_count): url = f'https://www.example.com/page/{page}' # 构造不同页面的URL response = requests.get(url) # 发送HTTP请求获取页面内容 # 处理页面内容,例如解析HTML或提取数据 # ... # 在这里执行你的爬取逻辑 # ... print(f'爬取第 {page} 页完成') print('所有页面爬取完成') ``` 在上面的示例中,我们首先定义了要爬取的总页数`page_count`和起始页码`start_page`。然后使用循环来遍历不同页面,构造不同页面的URL并发送HTTP请求获取页面内容。你可以根据实际情况进行URL的构造。 在循环内部,你可以根据需要对每个页面的内容进行处理,如解析HTML、提取数据等。然后,在合适的位置编写你的爬取逻辑,对页面内容进行进一步处理或提取所需数据。 最后,我们打印出完成爬取的信息,当所有页面都爬取完成后,会打印出"所有页面爬取完成"的提示。 请注意,上述示例只是一个简单的框架,具体的爬取逻辑和页面处理需要根据实际需求进行编写。此外,需要注意爬虫的合法性和遵守相关网站的爬取规则,避免给目标网站带来不必要的负担或违反法律法规。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值