美文网首页软件测试学习之路
利用Jsoup获取HTML页面的各分页中的标题信息

利用Jsoup获取HTML页面的各分页中的标题信息

作者: 乘风破浪的姐姐 | 来源:发表于2019-02-18 18:03 被阅读6次

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

使用Jsoup,需要导入Jsoup所需Jar包,Maven工程,直接在pom.xml中引入以下依赖

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

以下用一个简单的例子使用JSoup,获取网页中各分页列表中文章的标题,并输出。这里用到testng,需要提前引入testng相关jar包。
新增测试类JsoupTest

package com.jsoup;

import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;
import com.mashape.unirest.http.exceptions.UnirestException;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.testng.annotations.Test;

public class JsoupTest {

    Elements elements;
    @Test
    public void getAllPageTitle() throws UnirestException {
        int page =1 ;
        while(true) {
            HttpResponse<String> response = Unirest.get("https://blog.csdn.net/deng214/article/month/2018/05/" + page + "?").asString();
            String body = response.getBody();

            Document document = Jsoup.parse(body);
            elements = document.select("div.article-list");
            elements = elements.first().children().select("div:not(div[style=display: none;])").remove();
            elements = elements.select("h4>a");
            int size = elements.size();

            System.out.println("-------------------- 第" + page + "页,显示"+size+"条数据-------------------- ");

            if (size == 0) {
                break;
            }
            if (size < 20 && size > 0) {
                getElement();
                break;
            } else {
                getElement();
                page++;
            }

        }
    }

    public void getElement(){
        for (int i = 0; i < elements.size(); i++) {
            Element element = elements.get(i);
            String href = element.attr("href");
            String text = element.text();
            System.out.println("标题:"+text+"\t 链接:"+href);
        }
    }
}

上述类中,getAllPageTitle方法中用到了unirest(使用Unirest发送POST请求),发送向html发送get请求,获取响应内容,通过Jsoup解析
坑一:因为有div是隐藏的或不属于标题链接,所以需要排除。这里有坑,花了点时间,可能也是因为对jsoup不熟。

image.png
  elements = document.select("div.article-list");
            elements = elements.first().children().select("div:not(div[style=display: none;])").remove();
            elements = elements.select("h4>a");

坑二:在遍历到最后一页时,下一页并不是不显示,而是为只读无法点击,所以需要判断当前页是否为最后一页,如果是就需要跳出循环

  if (size == 0) {
                break;
            }
            if (size < 20 && size > 0) {
                getElement();
                break;
            } else {
                getElement();
                page++;
            }

最后输出结果是

-------------------- 第1页,显示20条数据-------------------- 
标题:转 史上最简单的 MySQL 教程     链接:https://blog.csdn.net/deng214/article/details/80318148
标题:转 用SQL语句去掉重复的记录   链接:https://blog.csdn.net/deng214/article/details/80430109
标题:转 java中进行二进制,八进制,十六进制,十进制间,压缩BCD编码进行相互转换  链接:https://blog.csdn.net/deng214/article/details/80429329
标题:转 java二进制,字节数组,字符,十六进制,BCD编码转换    链接:https://blog.csdn.net/deng214/article/details/80429273
标题:原 利用MySQL数据库自带加密函数进行加密    链接:https://blog.csdn.net/deng214/article/details/80429247
标题:原 mysql对密码进行加密,以及忘记加密后密码的解决   链接:https://blog.csdn.net/deng214/article/details/80429242
标题:转 java日期时间各种变换及处理     链接:https://blog.csdn.net/deng214/article/details/80417020
标题:转 MySQL查询语句测试练习题  链接:https://blog.csdn.net/deng214/article/details/80414565
标题:转 MySq常用l查询语句     链接:https://blog.csdn.net/deng214/article/details/80414523
标题:转 MySQL 复杂查询语句2   链接:https://blog.csdn.net/deng214/article/details/80414504
标题:原 Mysql复杂查询语句汇总   链接:https://blog.csdn.net/deng214/article/details/80414468
标题:转 MySQL 50条基础查询语句     链接:https://blog.csdn.net/deng214/article/details/80414458
标题:转 网络爬虫URLConnection的使用    链接:https://blog.csdn.net/deng214/article/details/80414359
标题:转 Java爬虫入门简介(五)——抓包工具的使用以及使用HttpClient模拟用户登录的访问   链接:https://blog.csdn.net/deng214/article/details/80414334
标题:转 Java爬虫入门简介(四)——HttpClient保存使用Cookie登录   链接:https://blog.csdn.net/deng214/article/details/80400998
标题:转 Java爬虫入门简介(三) —— Jsoup解析HTML页面  链接:https://blog.csdn.net/deng214/article/details/80400984
标题:转 Java爬虫入门简介(二) —— HttpClient详细使用方法   链接:https://blog.csdn.net/deng214/article/details/80400944
标题:转 Java爬虫入门简介(一) —— HttpClient请求   链接:https://blog.csdn.net/deng214/article/details/80400916
标题:转 Java读取和操作大数据文本数据    链接:https://blog.csdn.net/deng214/article/details/80400886
标题:转 Eclipse使用Maven插件的简单介绍   链接:https://blog.csdn.net/deng214/article/details/80400797
-------------------- 第2页,显示20条数据-------------------- 
标题:转 MySQL启用中文全文检索功能     链接:https://blog.csdn.net/deng214/article/details/80400636
标题:转 详述 MySQL 导出数据遇到 secure-file-priv 的问题    链接:https://blog.csdn.net/deng214/article/details/80400590
标题:转 详述查看 MySQL 数据文件存储位置的方法  链接:https://blog.csdn.net/deng214/article/details/80400585
标题:转 详述 MySQL 数据库输入密码后闪退的问题及解决方案     链接:https://blog.csdn.net/deng214/article/details/80400579
标题:转 详述 MySQL 数据库的安装及配置  链接:https://blog.csdn.net/deng214/article/details/80393015
标题:转 史上最简单的 MySQL 教程(四十四)「存储过程」  链接:https://blog.csdn.net/deng214/article/details/80392996
标题:转 史上最简单的 MySQL 教程(四十三)「函数」    链接:https://blog.csdn.net/deng214/article/details/80392990
标题:转 史上最简单的 MySQL 教程(四十二)「代码执行结构」    链接:https://blog.csdn.net/deng214/article/details/80392977
标题:转 史上最简单的 MySQL 教程(四十一)「触发器」   链接:https://blog.csdn.net/deng214/article/details/80392958
标题:转 史上最简单的 MySQL 教程(四十)「数据库变量」  链接:https://blog.csdn.net/deng214/article/details/80392946
标题:转 史上最简单的 MySQL 教程(三十九)「事务(下)」     链接:https://blog.csdn.net/deng214/article/details/80392931
标题:转 史上最简单的 MySQL 教程(三十八)「事务(上)」     链接:https://blog.csdn.net/deng214/article/details/80392913
标题:转 史上最简单的 MySQL 教程(三十七)「数据备份与还原(下)」    链接:https://blog.csdn.net/deng214/article/details/80392905
标题:转 史上最简单的 MySQL 教程(三十六)「数据备份与还原(中)」    链接:https://blog.csdn.net/deng214/article/details/80392892
标题:转 史上最简单的 MySQL 教程(三十五)「数据备份与还原(上)」    链接:https://blog.csdn.net/deng214/article/details/80359451
标题:转 史上最简单的 MySQL 教程(三十四)「视图(下)」     链接:https://blog.csdn.net/deng214/article/details/80359439
标题:转 史上最简单的 MySQL 教程(三十三)「视图(上)」     链接:https://blog.csdn.net/deng214/article/details/80359430
标题:转 史上最简单的 MySQL 教程(三十二)「子查询(下)」    链接:https://blog.csdn.net/deng214/article/details/80359427
标题:转 史上最简单的 MySQL 教程(三十一)「子查询(上)」    链接:https://blog.csdn.net/deng214/article/details/80359416
标题:转 史上最简单的 MySQL 教程(三十)「联合查询」   链接:https://blog.csdn.net/deng214/article/details/80359398
-------------------- 第3页,显示20条数据-------------------- 
标题:转 史上最简单的 MySQL 教程(二十九)「外键(下)」     链接:https://blog.csdn.net/deng214/article/details/80359388
标题:转 史上最简单的 MySQL 教程(二十八)「外键(上)」     链接:https://blog.csdn.net/deng214/article/details/80359379
标题:转 史上最简单的 MySQL 教程(二十七)「连接查询(下)」   链接:https://blog.csdn.net/deng214/article/details/80359369
标题:转 史上最简单的 MySQL 教程(二十六)「连接查询(上)」   链接:https://blog.csdn.net/deng214/article/details/80359361
标题:转 国密SM2算法密钥派生函数KDF的实现     链接:https://blog.csdn.net/deng214/article/details/80345570
标题:转 高速公路ETC卡签之我见9-常见算法  链接:https://blog.csdn.net/deng214/article/details/80345558
标题:转 高速公路ETC卡签之我见8-OBU发行     链接:https://blog.csdn.net/deng214/article/details/80345554
标题:转 高速公路ETC卡签之我见7-用户卡发行     链接:https://blog.csdn.net/deng214/article/details/80345552
标题:转 高速公路ETC卡签之我见6-省级密钥系统建设  链接:https://blog.csdn.net/deng214/article/details/80345534
标题:转 高速公路ETC卡签之我见5-国标密钥体系介绍  链接:https://blog.csdn.net/deng214/article/details/80345532
标题:转 高速公路ETC卡签之我见4-卡签结构说明    链接:https://blog.csdn.net/deng214/article/details/80345526
标题:转 高速公路ETC卡签之我见3-卡片圈存  链接:https://blog.csdn.net/deng214/article/details/80345521
标题:转 高速公路ETC卡签之我见2-卡片消费  链接:https://blog.csdn.net/deng214/article/details/80345517
标题:转 高速公路ETC卡签1-概述   链接:https://blog.csdn.net/deng214/article/details/80345513
标题:转 JAVA 数据表反射实体类,自动生成实体类   链接:https://blog.csdn.net/deng214/article/details/80337534
标题:转 java--生成实体类方法   链接:https://blog.csdn.net/deng214/article/details/80337517
标题:转 java--封装浅谈  链接:https://blog.csdn.net/deng214/article/details/80337474
标题:转 Java -- 20个非常有用的Java程序片段    链接:https://blog.csdn.net/deng214/article/details/80337453
标题:转 史上最简单的 MySQL 教程(二十五)「数据的高级操作 之 查询(下)」   链接:https://blog.csdn.net/deng214/article/details/80336875
标题:转 史上最简单的 MySQL 教程(二十四)「数据的高级操作 之 查询(中)」   链接:https://blog.csdn.net/deng214/article/details/80336858
-------------------- 第4页,显示20条数据-------------------- 
标题:转 史上最简单的 MySQL 教程(二十三)「数据的高级操作 之 查询(上)」   链接:https://blog.csdn.net/deng214/article/details/80336849
标题:转 史上最简单的 MySQL 教程(二十二)[数据的高级操作 之 更新 & 删除]     链接:https://blog.csdn.net/deng214/article/details/80336832
标题:转 史上最简单的 MySQL 教程(二十一)「数据的高级操作 之 蠕虫复制」    链接:https://blog.csdn.net/deng214/article/details/80336809
标题:转 史上最简单的 MySQL 教程(二十)「数据的高级操作 之 主键冲突」     链接:https://blog.csdn.net/deng214/article/details/80336797
标题:转 史上最简单的 MySQL 教程(十九)「范式」     链接:https://blog.csdn.net/deng214/article/details/80318092
标题:转 史上最简单的 MySQL 教程(十八)「关系」     链接:https://blog.csdn.net/deng214/article/details/80318084
标题:转 史上最简单的 MySQL 教程(十七)「索引」     链接:https://blog.csdn.net/deng214/article/details/80318073
标题:转 史上最简单的 MySQL 教程(十六)「列属性 之 唯一键」  链接:https://blog.csdn.net/deng214/article/details/80318064
标题:转 史上最简单的 MySQL 教程(十五)「列属性 之 自动增长」     链接:https://blog.csdn.net/deng214/article/details/80318053
标题:转 史上最简单的 MySQL 教程(十四)「列属性 之 主键」   链接:https://blog.csdn.net/deng214/article/details/80318033
标题:转 史上最简单的 MySQL 教程(十三)「列属性 之 空属性、列描述和默认值」  链接:https://blog.csdn.net/deng214/article/details/80318026
标题:转 史上最简单的 MySQL 教程(十二)「记录长度」   链接:https://blog.csdn.net/deng214/article/details/80318012
标题:转 史上最简单的 MySQL 教程(十一)「列类型 之 字符串型」     链接:https://blog.csdn.net/deng214/article/details/80318000
标题:转 史上最简单的 MySQL 教程(十)「列类型 之 日期时间型」     链接:https://blog.csdn.net/deng214/article/details/80277881
标题:转 史上最简单的 MySQL 教程(九)「列类型 之 数值型」   链接:https://blog.csdn.net/deng214/article/details/80277833
标题:转 史上最简单的 MySQL 教程(八)「校对集问题」   链接:https://blog.csdn.net/deng214/article/details/80277811
标题:转 史上最简单的 MySQL 教程(七)「中文数据问题」  链接:https://blog.csdn.net/deng214/article/details/80277795
标题:转 史上最简单的 MySQL 教程(六)「SQL 基本操作 之 数据操作」     链接:https://blog.csdn.net/deng214/article/details/80277784
标题:转 史上最简单的 MySQL 教程(五)「SQL 基本操作 之 表操作」  链接:https://blog.csdn.net/deng214/article/details/80277744
标题:转 史上最简单的 MySQL 教程(四)「SQL 基本操作 之 库操作」  链接:https://blog.csdn.net/deng214/article/details/80277711
-------------------- 第5页,显示3条数据-------------------- 
标题:转 史上最简单的 MySQL 教程(三)「 MySQL 数据库」  链接:https://blog.csdn.net/deng214/article/details/80277693
标题:转 史上最简单的 MySQL 教程(二)「关系型数据库」  链接:https://blog.csdn.net/deng214/article/details/80277669
标题:转 史上最简单的 MySQL 教程(一)「数据库」     链接:https://blog.csdn.net/deng214/article/details/80277623

===============================================
Default Suite
Total tests run: 1, Failures: 0, Skips: 0
===============================================

jsoup使用手册可参考文章:Jsoup详解(官方)

相关文章

网友评论

    本文标题:利用Jsoup获取HTML页面的各分页中的标题信息

    本文链接:https://www.haomeiwen.com/subject/ytcaeqtx.html