JSoup 教程是 JSoup HTML 解析器的入门指南。 在本教程中,我们将解析 HTML 字符串,本地 HTML 文件和网页中的 HTML 数据。 我们将清理数据并执行 Google 搜索。
JSoup
JSoup 是用于提取和处理 HTML 数据的 Java 库。 它实现了 HTML5 规范,并将 HTML 解析为与现代浏览器相同的 DOM。 该项目的网站是 jsoup.org 。
JSoup 功能
使用 JSoup,我们能够:
- 从 URL,文件或字符串中抓取并解析 HTML
- 使用 DOM 遍历或 CSS 选择器查找和提取数据
- 处理 HTML 元素,属性和文本
- 根据安全的白名单清除用户提交的内容,以防止 XSS 攻击
- 输出整洁的 HTML
JSoup Maven 依赖项
在本教程的示例中,我们使用以下 Maven 依赖关系。
JSoup 类
JSoup
类通过其静态方法为 jsoup 功能提供了核心公共访问点。 例如,clean()
方法清理 HTML 代码,connect()
方法创建与 URL 的连接,或者parse()
方法解析 HTML 内容。
JSoup 解析 HTML 字符串
在第一个示例中,我们将解析一个 HTML 字符串。
com/zetcode/JSoupFromStringEx.java
该示例分析 HTML 字符串并输出其标题和正文内容。
此字符串包含简单的 HTML 数据。
使用 Jsoup 的parse()
方法,我们解析 HTML 字符串。 该方法返回一个 HTML 文档。
文档的title()
方法获取文档的 title 元素的字符串内容。
文档的body()
方法返回 body 元素; 其text()
方法获取元素的文本。
JSoup 解析本地 HTML 文件
在第二个示例中,我们将解析本地 HTML 文件。 我们使用重载的Jsoup.parse()
方法,该方法将File
对象作为其第一个参数。
index.html
对于示例,我们使用上面的 HTML 文件。
com/zetcode/JSoupFromFileEx.java
该示例将分析src/main/resources/
目录中的index.html
文件。
我们使用Jsoup.parse()
方法解析 HTML 文件。
使用文档的getElementById()
方法,我们通过元素的 ID 获得元素。
使用元素的text()
方法检索标签的文本。
JSoup 读取网站的标题
在以下示例中,我们将抓取并解析网页,然后检索 title 元素的内容。
com/zetcode/JSoupTitleEx.java
在代码示例中,我们读取了指定网页的标题。
Jsoup 的connect()
方法创建到给定 URL 的连接。 get()
方法执行 GET 请求并解析结果; 它返回一个 HTML 文档。
使用文档的title()
方法,我们获得 HTML 文档的标题。
JSoup 读取 HTML 源码
下一个示例检索网页的 HTML 源。
com/zetcode/JSoupHTMLSourceEx.java
该示例打印网页的 HTML。
html()
方法返回元素的 HTML; 在我们的案例中,整个文档的 HTML 源代码。
JSoup 获取信息
HTML 文档的元信息提供有关网页的结构化元数据,例如其描述和关键字。
com/zetcode/JSoupMetaInfoEx.java
该代码示例检索有关指定网页的元信息。
文档的select()
方法查找与给定查询匹配的元素。 first()
方法返回第一个匹配的元素。 使用attr()
方法,我们获得content
属性的值。
JSoup 解析链接
下一个示例分析 HTML 页面中的链接。
com/zetcode/JSoupLinksEx.java
在该示例中,我们连接到网页并解析其所有链接元素。
要获取链接列表,我们使用文档的select()
方法。
JSoup 清理 HTML 数据
Jsoup 提供了用于清理 HTML 数据的方法。
com/zetcode/JSoupSanitizeEx.java
在示例中,我们清理并清理 HTML 数据。
HTML 字符串包含不推荐使用的 center 元素。
isValid()
方法确定字符串是否为有效的 HTML。 白名单是可以通过清除程序的 HTML(元素和属性)列表。 Whitelist.basic()
定义了一组基本的干净 HTML 标记。
借助Cleaner
,我们清理了脏的 HTML 文档。
这是程序的输出。 我们可以看到中心元素已被删除。
JSoup 执行 Google 搜索
以下示例使用 Jsoup 执行 Google 搜索。
com/zetcode/JsoupGoogleSearchEx.java
该示例为“银河”一词创建搜索请求。 它会打印十个与该术语匹配的域名。
Google 搜索返回长链接,我们要从中获取域名。 为此,我们使用正则表达式模式。
getDomainName()
使用正则表达式匹配器从搜索链接返回域名。
这是我们的搜索词。
这是执行 Google 搜索的网址。
我们连接到 URL,设置 5 s 超时,然后发送 GET 请求。 返回 HTML 文档。
从文档中,我们选择链接。
我们寻找不具有 class =“ _ Zkb”属性并且具有 href =“ / url?q =”属性的链接。 请注意,这些是硬编码的值,将来可能会更改。
最后,我们将域名打印到终端。
这些是“银河”一词的 Google 顶级搜索结果。
本教程专门针对 Jsoup HTML 解析器。