java爬虫——Jsoup讲解[通俗易懂]

java爬虫——Jsoup讲解[通俗易懂]开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第15天,点击查看活动详情 Jsoup是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第15天,点击查看活动详情

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

一、Jsoup的主要功能

  • 从一个URL,文件或字符串中解析HTML

  • 使用DOM或CSS选择器来查找、取出数据

  • 可操作HTML元素、属性、文本

  • 根据安全的白名单清理用户提交的内容,以防止XSS攻击

  • 输出整洁的HTML

二、Jsoup的主要类

1. org.jsoup.Jsoup类

Jsoup类是任何Jsoup程序的入口点,并将提供从各种来源加载和解析HTML文档的方法。

static Connection connect(String url) 创建并返回URL的连接。
static Document parse(File in, String charsetName) 将指定的字符集文件解析成文档。
static Document parse(String html) 将给定的html代码解析成文档。
static String clean(String bodyHtml, Whitelist whitelist) 从输入HTML返回安全的HTML,通过解析输入HTML并通过允许的标签和属性的白名单进行过滤。

2. org.jsoup.nodes.Document类

该类表示通过Jsoup库加载HTML文档。可以使用此类执行适用于整个HTML文档的操作。

3. org.jsoup.nodes.Element类

HTML元素是由标签名称,属性和子节点组成。 使用Element类,您可以提取数据,遍历节点和操作HTML。

三、Jsoup使用

1.maven引入

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

2.加载文档

Document document = Jsoup.connect("http://www.yiibai.com").get();
Document document = Jsoup.parse( new File( "D:/temp/index.html" ) , "utf-8" );```
String html = "<html><head><title>First</title></head><body><p>Parsed</p></body></html>";
Document document = Jsoup.parse(html);

3.解析文档

  1. 根据id查询元素 getElementById
  2. 根据标签获取元素 getElementsByTag
  3. 根据class获取元素 getElementsByClass
  4. 根据属性获取元素 getElementsByAttribute
// 解析文件,获取doc对象 
Document doc = Jsoup.parse(new File("C:\\Users\\myqxin\\Desktop\\set.html"), "utf8"); 
// 1,根据id查询元素 getElementById 
Element element1 = doc.getElementById("people"); 
// 2,根据标签获取元素 getElementsByTag 
Element element2 = doc.getElementsByTag("span").first(); 
// 3,根据class获取元素 getElementsByClass 
Element element3 = doc.getElementsByClass("").first(); 
// 4,根据属性获取元素 getElementsByAttribute 
Element element4 = doc.getElementsByAttribute("").last(); 
// 根据属性和属性值获取 Element element5 = doc.getElementsByAttributeValue("abc","123").last();

4.使用选择器获取元素

selector选择器概述

  • tagname:通过标签查找元素,比如:span
  • #id:通过ID查找元素,比如:#myqxin
  • .class:通过class名称查找元素,比如:class_a
  • [attribute]:利用属性查找元素,比如:[abc]
  • [attr=value]:利用属性值查询元素,比如:[class=s_name]
  • ns|tag: 通过标签在命名空间查找元素,比如:可以用 fb|name 语法来查找 fb:name 元素
  • [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开始的

5. 处理元素数据

  • attr(String key)获取和attr(String key, String value)设置属性
  • attributes() 获得所有属性
  • id()className()classNames()
  • text()获取和text(String value)设置文本内容
  • html()获取和html(String value)设置内部HTML内容
  • outerHtml() 获取外部HTML值
  • data()获取数据内容(例如scriptstyle标签)
  • tag()tagName()

6.操纵HTML和文本

  • append(String html)prepend(String html)
  • appendText(String text)prependText(String text)
  • appendElement(String tagName)prependElement(String tagName)
  • html(String value)

7.从元素中提取属性,文本和HTML

在解析文档并找到一些元素之后,您将需要获取这些元素中的数据。

  • Element.id()
  • Element.tagName()
  • Element.className()Element.hasClass(String className)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/13760.html

(0)

相关推荐

  • 用户画像系统架构——从零开始搭建实时用户画像(二)「终于解决」

    用户画像系统架构——从零开始搭建实时用户画像(二)「终于解决」​ ​ 在《 "什么的是用户画像" 》一文中,我们已经知道用户画像对于企业的巨大意义,当然也有着非常大实时难度。那么在用户画像的系统架构中都有哪些难度和重点要考虑的问题呢? 挑战

    2023-03-04
    135
  • Python工程师如何正确使用mongodb count

    Python工程师如何正确使用mongodb count
    MongoDB是一种基于文档的 NoSQL 数据库,用于处理大型数据集并支持高可用性。在 MongoDB 中,count()方法用于计算集合中文档的数量。在本篇文章中,我们将重点讲解Python工程师如何正确使用mongodb count。

    2024-05-23
    49
  • SQL优化这5个极简法则,直接让查询原地起飞![亲测有效]

    SQL优化这5个极简法则,直接让查询原地起飞![亲测有效]SQL 作为关系型数据库的标准语言,是 IT 从业人员必不可少的技能之一。SQL 本身并不难学,编写查询语句也很容易,但是想要编写出能够高效运行的查询语句却有一定的难度。
    查询优化是一个复杂的工程,涉

    2023-05-30
    119
  • 50个SQL语句(MySQL版) 建表 插入数据[亲测有效]

    50个SQL语句(MySQL版) 建表 插入数据[亲测有效]本学期正在学习数据库,前段时间老师让我们做一下50个经典SQL语句,当时做的比较快,有一些也是百度的,自我感觉理解的不是很透彻。 所以从本篇随笔开始,我将进行50个经典SQL语句的复盘,加深理解。 答

    2023-02-23
    154
  • Mongodb聚合查询_mongodb查询指定字段

    Mongodb聚合查询_mongodb查询指定字段https://www.cnblogs.com/zhoujie/p/mongo1.html mongodb高级聚合查询 在工作中会经常遇到一些mongodb的聚合操作,特此总结下。mongo存储的可以

    2023-02-13
    128
  • 简单记录下mysql 主从同步

    简单记录下mysql 主从同步mysql 主从同步 主 读写 -> 从 同步 环境检查 主从数据库版本一致, 此处版本都为 5.5.64-MariaDB 主服务器配置 vi /etc/my.cnf.d/server.cnf # …

    2023-02-27
    148
  • Python索引库:高效存储和检索数据的利器

    Python索引库:高效存储和检索数据的利器在现代社会中,数据已经成为了重要的资源,数据的存储和检索已经成为了很多公司的核心工作之一。众所周知,Python是一门非常强大的编程语言,它的生态系统非常丰富,提供了很多高效的工具库。在数据存储和检索方面,Python提供了多种好用的索引库,比如SQLite、MySQL、Elasticsearch等。这里我们要重点介绍Python索引库。

    2023-12-25
    125
  • Python Numbers的数据分析和可视化优化

    Python Numbers的数据分析和可视化优化Python是一种易学易懂的编程语言,它已成为许多程序员和工程师的首选语言。Python的丰富库使它成为数据分析和可视化的高效工具。在本文中,我们将详细探讨Python Numbers模块的数据分析和可视化优化,并提供示例代码。

    2024-02-27
    100

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注