iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >java爬虫jsoup解析HTML的工具学习
  • 861
分享到

java爬虫jsoup解析HTML的工具学习

2024-04-02 19:04:59 861人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

目录前言下载一个文档的对象模型获取 Document 对象解析并提取 html 元素使用传统的操作DOM的方式选择器修改获取数据前言 使用python写爬虫的人,应该都听过beaut

前言

使用python爬虫的人,应该都听过beautifulsoup4这个包,用来它来解析网页甚是方便。那么在java里有没有类似的包呢?当然有啦!而且也非常好用。下面隆重介绍jsoup

jsoup 实现了 WHATWG HTML5 规范,能够与现代浏览器解析成相同的DOM。其解析器能够尽最大可能从你提供的HTML文档来创建一个干净的解析结果,无论HTML的格式是否完整。比如它可以处理没有关闭的标签。

举个栗子:

<p>Lorem <p>Ipsum parses to <p>Lorem</p> <p>Ipsum</p>

它也可以处理隐式标签,创建可靠的文档结构(html标签包含head 和 body,在head只出现恰当的元素)。

下载

官网地址在这里

 jar 包的下载地址

一个文档的对象模型

  • 文档由多个ElementsTextNodes组成 ;
  • 其继承结构如下:Document继承Element继承NodeTextNode继承 Node.
  • 一个Element包含一个子节点集合,并拥有一个父Element。他们还提供了一个唯一的子元素过滤列表。

获取 Document 对象

jsoup 可以从包括字符串、URL 地址以及本地文件来加载 HTML 文档,并生成 Document 对象实例。

// (1)从字符串中获取
String html = "<html><head><title>First parse</title></head>"
  + "<body><p>Parsed HTML into a doc.</p></body></html>";
Document doc1 = Jsoup.parse(html);
// (2)从 URL 直接加载 HTML 文档
// get方法
Document doc2 = Jsoup.connect("Http://www.163.com").get(); 
// post方法
Document doc = Jsoup.connect("http://example.com")
  .data("query", "Java")
  .userAgent("Mozilla")
  .cookie("auth", "token")
  .timeout(3000)
  .post();
  // (3)从文件中加载 HTML 文档
File input = new File("D:/test.html"); 
Document doc = Jsoup.parse(input,"UTF-8","http://www.163.com/");

常用到的方法如下:

public static Connection connect(String url)
public static Document parse(String html, String baseUri)
public static Document parse(URL url,  int timeoutMillis) throws IOException
public static Document parse(File in,  String charsetName) throws IOException
public static Document parse(InputStream in, String charsetName,  String baseUrl)  throws IOException

parse方法能够将输入的 HTML 解析为一个新的文档 (Document),只要解析的不是空字符串,就能返回一个结构合理的文档,其中包含(至少) 一个head和一个body元素。
上面的参数 baseUri的作用是,如果要解析的html中存在相对路径,那么就根据这个参数变成绝对路径, 如果不需要可以传入一个空字符串。

注:通过connect方法来获得 html 源码,有的时候会遇到乱码的问题,这个时候该怎么办么?方法里有一个 parse 方法,传入参数 InputStreamcharsetName以及baseUrl,所有可以这样解决:

String url = "http://xxxxxxx";
Document document = Jsoup.parse(new URL(url).openStream(), "GBK", url);// 以 gbk 编码为栗。

Jsoup的强项是解析html,当然了,它能处理一些简单情况,遇到复杂的情形还是使用 httpClient 这个包吧,你值得拥有!

解析并提取 HTML 元素

使用传统的操作DOM的方式

举个栗子

Element content = doc.getElementById("content");
Elements links = content.getElementsByTag("a");
Elements mx = content.getElementsByClass("help");

:doc 为 Document 对象。

还有写常用的方法,比如

public Elements getElementsByAttributeValue(String key,  String value)
public Element attr(String attributeKey,  String attributeValue)
public Elements getAllElements()
// 获得孩子节点中所有的文本拼接
public String text()
// 获得节点的内部html
public String html()

Document 对象还有一个方法

// 获取标题
public String title()
// 获得某节点的html,这个方法继承自node类,所以Element类也有该方法
public String outerHtml()

选择器

在元素检索方面,jsoup 的选择器简直无所不能。

jsoup 选择器很多,这里仅仅举出几个栗子,

Elements links = doc.select("a[href]"); // 具有href属性的a标签
Elements pngs = doc.select("img[src$=.png]");// src属性以.png结尾的img标签
Element masthead = doc.select("div.masthead").first();// class属性为masthead的div标签中的第一个
Elements resultLinks = doc.select("h3.r &gt; a"); // class属性为r的h3标签的直接子a标签
Elements resultLinks = doc.select(img[src~=(?i)\.(png|jpe?g)])

Selector选择器概述

tagname: 通过标签查找元素,比如:a

ns|tag: 通过标签在命名空间查找元素,比如:可以用 fb|name 语法来查找 <fb:name> 元素

#id: 通过ID查找元素,比如:#loGo

.class: 通过class名称查找元素,比如:.masthead

[attribute]: 利用属性查找元素,比如:[href]

[^attr]: 利用属性名前缀来查找元素,比如:可以用[^data-] 来查找带有HTML5 Dataset属性的元素

[attr=value]: 利用属性值来查找元素,比如:[width=500]

[attr^=value], [attr$=value], [attr*=value]: 利用匹配属性值开头、结尾或包含属性值来查找元素,比如:[href*=/path/]

[attr~=regex]: 利用属性值匹配正则表达式来查找元素,比如: img[src~=(?i)\.(png|jpe?g)]

*: 这个符号将匹配所有元素

Selector选择器组合使用

el#id: 元素+ID,比如: div#logo

el.class: 元素+class,比如: div.masthead

el[attr]: 元素+class,比如: a[href]

任意组合,比如:a[href].highlight

ancestor child: 查找某个元素下子元素,比如:可以用.body p 查找在"body"元素下的所有 p元素

parent > child: 查找某个父元素下的直接子元素,比如:可以用div.content > p 查找 p 元素,也可以用body > * 查找body标签下所有直接子元素

siblingA + siblingB: 查找在A元素之前第一个同级元素B,比如:div.head + div

siblingA ~ siblingX: 查找A元素之前的同级X元素,比如:h1 ~ p

el, el, el:多个选择器组合,查找匹配任一选择器的唯一元素,例如:div.masthead, div.logo

伪选择器selectors

:lt(n): 查找哪些元素的同级索引值(它的位置在DOM树中是相对于它的父节点)小于n,比如:td:lt(3) 表示小于三列的元素

:gt(n):查找哪些元素的同级索引值大于n,比如: div p:gt(2)表示哪些div中有包含2个以上的p元素

:eq(n): 查找哪些元素的同级索引值与n相等,比如:fORM input:eq(1)表示包含一个input标签的Form元素

:has(seletor): 查找匹配选择器包含元素的元素,比如:div:has(p)表示哪些div包含了p元素

:not(selector): 查找与选择器不匹配的元素,比如: div:not(.logo) 表示不包含 class=logo 元素的所有 div 列表

:contains(text): 查找包含给定文本的元素,搜索不区分大不写,比如: p:contains(jsoup)

:containsOwn(text): 查找直接包含给定文本的元素

:matches(regex): 查找哪些元素的文本匹配指定的正则表达式,比如:div:matches((?i)login)

:matchesOwn(regex): 查找自身包含文本匹配指定正则表达式的元素

注: 上述伪选择器索引是从0开始的,也就是说第一个元素索引值为0,第二个元素index为1等。

对于 Elements 的来历,看这里

public class Elements extends ArrayList<Element>

另外,可以查看Selector api参考来了解更详细的内容,可以看出,jsoup 使用跟 Jquery 一模一样的选择器对元素进行检索,以上的检索方法如果换成是其他的 HTML 解释器,至少都需要很多行代码,而 jsoup 只需要一行代码即可完成。

修改获取数据

// 为所有链接增加 rel=nofollow 属性
doc.select("div.comments a").attr("rel", "nofollow"); 
 // 为所有链接增加 class=mylinkclass 属性
doc.select("div.comments a").addClass("mylinkclass"); 
// 删除所有图片的 onclick 属性
doc.select("img").removeAttr("onclick"); 
// 清空所有文本输入框中的文本
doc.select("input[type=text]").val(""); 
// 获得rel属性的值
doc.select("div.comments a").attr("rel");

参考

使用 jsoup 对 HTML 文档进行解析和操作

jsoup 1.9.2 API

以上就是java爬虫工具jsoup解析HTML的工具学习的详细内容,更多关于java爬虫工具jsoup的资料请关注编程网其它相关文章!

--结束END--

本文标题: java爬虫jsoup解析HTML的工具学习

本文链接: https://www.lsjlt.com/news/164352.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • java爬虫jsoup解析HTML的工具学习
    目录前言下载一个文档的对象模型获取 Document 对象解析并提取 HTML 元素使用传统的操作DOM的方式选择器修改获取数据前言 使用python写爬虫的人,应该都听过beaut...
    99+
    2024-04-02
  • java爬虫jsoup解析HTML实例分析
    本篇内容介绍了“java爬虫jsoup解析HTML实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言使用python写爬虫的人,应该...
    99+
    2023-07-02
  • Portia开源可视化爬虫工具的使用学习
    目录背景安装使用Portia包page sample启动程序总结背景 由于最近在写一个可供配置的爬虫模板,方便快速扩展新的抓取业务,并且最后目标是将其做成一个可视化的配置服务。还正在...
    99+
    2024-04-02
  • Python爬虫网页,解析工具lxml.html(二)
    【前情回顾】如何灵活的解析网页,提取我们想要的数据,是我们写爬虫时非常关心和需要解决的问题。从Python的众多的可利用工具中,我们选择了lxml的,它的好我们知道,它的妙待我们探讨。前面我们已经从HTML字符串转换成的HtmlElemen...
    99+
    2023-06-02
  • Python 爬虫网页,解析工具lxml.html(一)
    狭义上讲,爬虫只负责抓取,也就是下载网页。而实际上,爬虫还要负责从下载的网页中提取我们想要的数据,即对非结构化的数据(网页)进行解析提取出结构化的数据(有用数据)。比如,我们要抓取了一个新闻页面的网页(html)下来,但我们想要的是这个网页...
    99+
    2023-06-02
  • python爬虫中学习方向的示例分析
    小编给大家分享一下python爬虫中学习方向的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!python主要应用领域有哪些1、云计算,典型应用OpenSt...
    99+
    2023-06-14
  • 有哪些学习Java编程常用的开发工具
    本篇内容介绍了“有哪些学习Java编程常用的开发工具”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在刚刚接触学习Java编程的时候,我们可以...
    99+
    2023-06-15
  • 如何理解Python网络爬虫和web的系统学习路线图
    如何理解Python网络爬虫和web的系统学习路线图,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。随着Python的不断崛起,TIOBE预计它最终将获得第一名。TIOBE在...
    99+
    2023-06-02
  • 从零开始学习 Java:简单易懂的入门指南之爬虫(十六)
    爬虫 1.1 本地数据爬取1.2 网络数据爬取1.3 爬取数据练习1.4 按要求爬取1.5 贪婪爬取和非贪婪爬取1.6 String的split方法中使用正则表达式1.7 String类的replaceAll方法中使用正则表达式1....
    99+
    2023-08-25
    学习 java 爬虫 spring boot 开发语言 intellij-idea
  • Golang技术在机器学习中的可解释性工具
    go 语言因其高速、并发和内存安全特性,在构建机器学习可解释性工具方面极具优势。实战案例中,使用 go 构建了 lime 解释器,可解释局部模型预测,优势包括高性能、内存安全和易于使用。...
    99+
    2024-05-08
    机器学习 可解释性工具 git golang
  • java继承学习之super的用法解析
    继承supersuper关键字的用法和this关键字的用法相似this:代表本类对象的引用super:代表父类存储空间的标识(可以理解为父类对象引用) package com.it...
    99+
    2024-04-02
  • Java中Excel高效解析工具EasyExcel的实践
    目录简介读 Execl 实践写 Execl 实践模板填充文件追加总结参考资料:alibaba-easyexcel.github.io 简介 EasyExcel是一个基于Java的简单...
    99+
    2024-04-02
  • Java中常用解析工具jackson及fastjson的使用
    一、maven安装jackson依赖 <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/...
    99+
    2024-04-02
  • 股票分析必备工具:学习PHP和JS绘制蜡烛图的步骤
    股票分析必备工具:学习PHP和JS绘制蜡烛图的步骤,需要具体代码示例随着互联网和科技的快速发展,股票交易已经成为许多投资者的重要途径之一。而股票分析是投资者决策的重要一环,其中蜡烛图被广泛应用于技术分析中。学习如何使用PHP和JS绘制蜡烛图...
    99+
    2023-12-17
    js PHP 步骤 股票分析 蜡烛图
  • Java线程的并发工具类实现原理解析
    目录一、fork/join1.Fork-Join原理2.工作窃取3.代码实现二、CountDownLatch三、CyclicBarrier四、Semaphore五、Exchange六...
    99+
    2024-04-02
  • 从头开始学习Java和Laravel:索引和IDE是不可或缺的工具吗?
    Java和Laravel是两个非常流行的编程语言,Java是一种跨平台的面向对象编程语言,用于构建各种应用程序,而Laravel是一种基于PHP的Web应用程序框架,用于快速开发高质量的Web应用程序。如果你想学习这两个编程语言,你会发现...
    99+
    2023-10-10
    laravel ide 索引
  • 有哪些值得推荐的npm异步编程工具可用于Java学习笔记?
    随着JavaScript在Web应用中的广泛应用,Node.js的出现成为了一种新的解决方案。Node.js的异步编程模型为JavaScript开发人员提供了一种简单而有效的方式来处理I/O操作。而NPM成为了Node.js生态系统中最重要...
    99+
    2023-07-21
    学习笔记 npm 异步编程
  • Java 同步工具与组合类的线程安全性解析
    目录何为线程安全的类?基于条件的同步策略状态发布与所有权实例封闭正确地拓展同步策略同步容器复合操作不受同步容器保护同步容器的迭代问题警惕隐含迭代的操作并发容器ConcurrentHa...
    99+
    2024-04-02
  • Java中Cron表达式的生成解析和计算的工具类
    Java中Cron表达式的生成解析和计算的工具类 1. 生成表达式2. 解析表达式3. 计算表达式执行日期4. 测试5. 完整代码 本文介绍通过java生成cron表达式,解析表达式,...
    99+
    2023-10-03
    java python 算法
  • 减少代码开发工作的Java库lombok及注解的使用学习
    目录前言Lombok是什么安装对于eclipse对于 IDEAQuickStart@Setter/@Getter@ToStringexclude 参数doNotUseGetters ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作