jsoup 获取html中body内容_Java 进阶 利用Jsoup获取HTML页面的各分页中的标题信息...

简单介绍一下Jsoup

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

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

org.jsoup

jsoup

1.11.3

以下用一个简单的例子使用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 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详解(官方)

END

如果你喜欢我的分享,那就在右下角点个喜欢吧

你的鼓励是我最大的动力来源,在此深表感恩

软件测试的路上,我们可以互相关注,相互学习,共同进步,微信ID:929194573

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

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

相关文章

在Windows下如何安装Tomcat服务器搭建

Tomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和调试JSP 程序的首选服务器。 在Windows下安装Tomcat服务器的方式有两种&#xff0c;一种是直接安…

剑指offer-3(替换空格)

题目&#xff1a; 实现一个方法&#xff0c;把一个字符数组里面的空格全部替换为“20%”。 思路&#xff1a; 首先呢&#xff0c;要先获取字符数组中有多少个空格以及字符数组中字符的长度&#xff0c;计算出替换后的长度&#xff1b;然后&#xff0c;让一个虚拟指针indexOfNew…

5.模块

时间&#xff1a;2018-12-9 13:40:04 ---------------------------------------------------------- 1、方法 可以创建一个包含函数与变量的py文件 可以用C语言等编写python模块&#xff0c;编译后&#xff0c;在python中使用 import sys#通过import导入sys模块print(The co…

javaee 设计模式_JavaEE重新审视设计模式:装饰器

javaee 设计模式去年的这个时候&#xff0c;我写了一系列有关JavaEE设计模式实现的博客文章。 大约一年后&#xff0c;我意识到我错过了我最喜欢的图案装饰器。 装饰器模式基本上是通过装饰其他对象来扩展对象功能的方法&#xff0c;其他对象可以包装目标对象并为其添加行为。…

echarts label加边框_echarts 添加自定义label标签

1.echarts 自定义标签注&#xff1a;当设置visualMap的后&#xff0c;给覆盖regions单独定义的值(如果data 中没有regions的地区 则无妨&#xff0c;我这个是从data中删除青岛&#xff0c;但是lable 无法正常显示了&#xff0c;如有哪位大神有好的方法&#xff0c;请赐教)initC…

【15】docker

docker 一种容器技术&#xff0c;相当于 java 一侧编译多个场所运行的技术 &#xff0c;简单理解为一个盒子&#xff0c;盒子里面包裹着一个操作系统及其配置 docker 语法 #查看容器 docker ps -a #查看镜像docker images # 创建 dockerdocker run image #启动docker并且…

解析URI与URL之间的区别与联系

URI就是一种资源定位机制&#xff0c;它是比较笼统地定位了资源&#xff0c;并不局限于客户端和服务器&#xff0c;而URL就定位了网上的一切资源&#xff0c;只要是网上的资源&#xff0c;都有唯一的URL 今天在看STRUTS配置的时候&#xff0c;发现一个问题&#xff0c;就是在看…

6.数据结构

时间&#xff1a;2018年12月9日20:08:43 --------------------------------------------------------------------------------------- 0.四种&#xff1a;列表&#xff0c;元组&#xff0c;字典&#xff0c;集合 1.列表 可变数据类型&#xff08;可以添加&#xff0c;移除&…

为什么要关心均值和哈希码

等于和哈希码是每个Java对象的基本元素。 它们的正确性和性能对于您的应用程序至关重要。 但是&#xff0c;我们经常看到甚至有经验的程序员也忽略了类开发的这一部分。 在本文中&#xff0c;我将介绍一些与这两种非常基本的方法有关的常见错误和问题。 合同 提到的方法至关重…

python把英语句子成分字母_句子成分的表达字母

1.一【1】1、一般现在时(do); 2、一般过去时(did); 3、一般将来时( will do)(be going to do); 4、一般过去将来时( would do); 5、现在进行时( be doing); 6、过去进行时(was/were doing); 7、将来进行时( will be doing); 8、过去将来进行时( would be doing)(was/were going…

AntDesign Form表单字段校验的三种方式

1.使用getFieldDecorator的rules规则 最简单的方法就是使用getFieldDecorator中的rules验证。rules中定义校验规则&#xff0c;message为校验不通过时的提示文字。 {getFieldDecorator(inputContent, {rules: [{required: true, message: 请输入内容!,}],})(<Input /> )}…

matlab的max与min函数

max作用于矩阵有比较并保留较大数字的功能。如下所示&#xff1a; 矩阵a中每个元素与2相比较取较大值&#xff0c;1比2小&#xff0c;所以替换为2. 矩阵a中每个元素与3相比取较小值&#xff0c;4比3小&#xff0c;所以替换为3. a 1 2 3 4 K>> max(a,2)…

JAVA Servlet API简介及接口与类的用法

本章介绍了Java Servlet API中的主要的接口与类的用法&#xff0c;并且介绍了它们的生命周期。表4-1 对接口与类的作用与生命周期作了归纳。这些接口与类的生命周期都由Servlet容器来控制&#xff0c;容器会在特定的时刻创建或销毁它们的实例。 表4-1 Servlet API中的主要的接口…

Spring框架的事务管理的基本概念

1. 事务&#xff1a;指的是逻辑上一组操作&#xff0c;组成这个事务的各个执行单元&#xff0c;要么一起成功,要么一起失败&#xff01; 2. 事务的特性* 原子性* 一致性* 隔离性* 持久性3. 如果不考虑隔离性,引发安全性问题* 读问题:* 脏读:* 不可重复读:* 虚读:* 写问题:* 丢失…

python rest 框架_python-更新用户REST框架Django

我需要在REST框架中更新我的用户views.pyclass UserUpdate(APIView):permission_classes (permissions.IsAuthenticated,)def post(self,request):userUser.objects.get(idrequest.user.id)try:user_serializerUserSerializer(request.user,datarequest.data, partialTrue)if …

matlab将满足某一条件的矩阵元素置零

想把矩阵中小于100的元素置零&#xff0c;有两种方法&#xff1a; 方法一&#xff1a;S(S<100)0; 方法二&#xff1a;S(find(S<100))0; 原理&#xff1a; A [ 1 2; 3 4]; B (A>2) %找到大于2 的位置索引 B 0 0 1 1 %形成布尔矩阵 A(B)0 %将对…

linux nona怎么用_nano命令_Linux nano 命令用法详解:字符终端文本编辑器

nano是一个字符终端的文本编辑器&#xff0c;有点像DOS下的editor程序。它比vi/vim要简单得多&#xff0c;比较适合Linux初学者使用。某些Linux发行版的默认编辑器就是nano。nano命令可以打开指定文件进行编辑&#xff0c;默认情况下它会自动断行&#xff0c;即在一行中输入过长…

4g内存 堆内存分配多少_我需要多少内存

4g内存 堆内存分配多少什么是保留堆&#xff1f; 我需要多少内存&#xff1f; 在构建解决方案&#xff0c;创建数据结构或选择算法时&#xff0c;您可能会问自己&#xff08;或其他人&#xff09;这个问题。 如果此图包含1,000,000条边并且我使用HashMap进行存储&#xff0c;此…

centos下网络配置方法(网关、dns、ip地址配置)

centos网络配置实例 1&#xff0c;配置DNS vi /etc/resolv.conf 加入: 复制代码代码如下:nameserver 192.168.0.1 nameserver 8.8.8.8nameserver 8.8.4.42&#xff0c;配置网关&#xff1a; vi /etc/sysconfig/network 加入&#xff1a; GATEWAY192.168.0.1 完整的如下&#xf…

matlab的repmat函数

B repmat(A,m,n) 1.作用&#xff1a;将矩阵A的内容堆叠在mxn大小的矩阵B中 2.应用&#xff1a; Brepmat([1 2;3 4],3,2) B 1 2 1 2 3 4 3 4 1 2 1 2 3 4 3 4 1 2 1 2 3 4 …