什么是 Jsoup?
无抓取抓取浏览器在云浏览器中运行动态页面,以便 Java 应用程序可以使用 jsoup 等解析器处理生成的 HTML。
Jsoup,通常由项目以 jsoup 的形式呈现,是一个 Java 库,用于获取、解析、查询和修改 HTML。它从 URL、文件或字符串构建文档树,并允许应用程序提取元素、属性和文本。它还支持使用显式安全列表清理不受信任的 HTML。
对于 Java 应用程序,jsoup 可以将公共文章页面转换为标题、正文和链接集合而无需启动浏览器。它不执行目标页面的 JavaScript。根据您所需的内容选择获取方法,然后使用 jsoup 解释生成的标记。
Jsoup 如何将标记转换为文档
Jsoup 将输入解析为包含元素和其他可遍历和选择的节点的文档。其 HTML 解析器遵循 HTML 解析规则,并旨在适应现实世界的标记,包括不完美的嵌套。 jsoup HTML 处理接口 将获取、提取和文档修改引入 Java 库。
生成的树在提取方面比将整个页面视为不区分的字符串更有用。一个标题属于一个部分,一个链接有一个地址属性,一个卡片包含属于一个实体的字段。您的提取规则可以表达这些关系,而不是依赖任意的文本位置。
解析并不能证明文档是您打算收集的那一个。响应可能包含网站导航页面、访问通知或应用程序外壳。在选择字段之前建立预期的文档标记,以便库解析不完美标记的能力不会掩盖获取问题。
获取 URL 或解析现有 HTML
Jsoup 可以获取和解析网页 URL,或解析其他组件已经获得的标记。直接连接对于一个简单的公共页面来说是方便的。当应用程序有单独的 HTTP 层、读取存储的文档或从浏览器工作流接收渲染快照时,现有 HTML 是有用的。
这些路径应共享提取合同。解析器需要接受的标记,并且当链接很重要时,文档的基本地址。获取组件应保留响应上下文,例如来源和最终 URL。不要仅仅因为解析方法可以直接返回文档而丢弃该信息。
在请求策略更易于控制时,将获取与解析分开。Java 服务可能已经有时间限制、目标验证和身份验证的约定。在一个提取层中保持这些约定可能比在每个提取方法内部实施第二个策略更清晰。
存储的 HTML 还支持专注的维护。一个允许的代表文档让您在不重复联系源的情况下检查选择器更改。将该文档视为测试输入,并且不要将从中获得的结果展示为实时集合。保存的输入验证解析行为,而不是当前源的可用性。
CSS 选择器和文档遍历
Jsoup 选择器通过标签、属性、类和结构关系查找元素。 jsoup CSS 选择器接口 可用于文档和元素,这使得提取可以从记录容器开始,并在该本地上下文中继续。
对于一个示例公共课程目录,在阅读其标题、持续时间和详细链接之前,选择每个课程卡片。有些课程可能会省略持续时间。本地选择保持该缺失与正确的课程相关,而不是在独立收集的列表之间移动值。
当通过树表达关系更容易时,请使用遍历。标签及其相邻值可能没有方便的类,但其父区域仍然可以提供一个稳定的边界。当可以获得项目级关系时,避免依赖从文档根开始的完整位置链。
在应用程序中还要明确期望的值数量。一个旨在具有一个标题的字段不应默默接受所有合并的标题。如果多个合理的元素匹配,要么细化规则,要么保留模糊性以供审核。返回非空字符串是一种弱的正确性检查。
文本、HTML 和属性需要单独的输出规则
Jsoup 可以暴露纯文本、标记和属性值,但这些输出服务于不同的下游目的。搜索索引可能需要标准化文本。受控内容渲染器可能需要清理标记。链接表需要解析的地址和源上下文。
文本提取可以包括后代内容,因此所选容器可能包含不属于该字段的标签或导航。一个课程标题容器可能还包括一个徽章。检查所选择的提取范围是否只产生标题,而不是假设每个附近的单词都是其中的一部分。
在标准化其显示形式之前,保留结构化值。课程代码可能具有有意义的标点符号和前导零。持续时间标签可能包含单位,这些单位应与数字金额分开存储。将相同的文本清理应用于每个字段可能会损坏身份,即使页面已正确解析。
| 输出 | 对 | 重要边界 |
|---|---|---|
| 纯文本 | 搜索、摘要和字段值 | 选择正确的后代范围。 |
| HTML 标记 | 受控丰富内容显示 | 应用适合输出的清理策略。 |
| 属性 | 标识符和源元数据 | 保留字段的原始含义。 |
| 绝对链接 | 发现和存储引用 | 使用正确的基本地址。 |
相对链接需要基本URI
Jsoup使用文档的基本URI解析相对链接。读取普通地址属性可能返回源的相对值,而绝对URL助手则解析该值。 jsoup URL解析模型 使基本地址成为正确解析上下文的一部分。
保存的HTML字符串不一定携带其收集位置。如果您加载该字符串而未提供适当的基址,则相对详细链接可能无法如预期那样解析。请将地址与输入一起存储,以便从保存和新获取的文档中提取遵循相同的规则。
解析与接纳也不同。一个语法上有效的绝对URL可以指向超出集合的预期源范围。解析后,请在调度另一个请求之前检查方案和目标。这可以防止普通页面链接将狭窄的目录任务扩展到不相关的集合中。
清理HTML与提取文本不同
Jsoup的清理器应用了白名单来确定哪些HTML元素、属性和值可以保留在输出中。当收集或用户提供的标记将作为HTML显示时,这很重要。这是一个与解析文档或读取其文本分开的操作。
该 jsoup白名单清理器 在解析结构上工作。应用程序选择适合输出上下文的策略。允许强调和链接的描述字段可能需要与应只包含纯文本的字段不同的策略。
保持输出上下文的具体性。HTML清理不会将任意内容转换为安全的JavaScript、SQL或文件系统路径。根据每个目标使用适当的处理。在集合管道中,当允许和对诊断有用时,将源标记与已清理的显示内容分开。
清理器还可以删除数据集所需的信息。如果提取依赖于被显示白名单排除的属性,则在准备富文本显示版本之前提取该字段。这种顺序可以避免数据收集和展示策略在一个可变文档上意外竞争。
Jsoup停止的地方与浏览器获取的开始
Jsoup在处理所提供的文档时停止;它不运行交互式浏览器会话。单页面应用程序可以返回引用脚本的HTML,但省略实际的课程卡。准确解析该响应仍然不会得到课程,因为所需的状态尚未创建。
Scrapeless抓取浏览器 为这些情况提供云浏览器执行。使用浏览器工作流程达到所需的页面状态,然后将相关的HTML交给您的Java提取层。在拍摄快照之前定义完成的含义,特别是在过滤器或分页更改显示内容时。
该 抓取浏览器介绍 解释了管理浏览器操作,相关的 浏览器收集实践 提供操作上下文。保持Java记录架构独立于获取方法,以便添加渲染不需要重新定义每个输出字段。
评估 Scrapeless定价 围绕您的来源实际需要的浏览器工作。一个普通的HTML文档可能通过直接请求可用,而同一项目中的另一个页面可能依赖于交互。按页面类型对这些需求进行分类,而不是将一个沉重的获取方法分配给所有内容。
结论
Jsoup是一个实用的Java库,用于将真实的HTML转换为结构化数据和受控标记。保持文档身份、基本地址和记录边界明确。对于需要的输出上下文使用清理,当所需内容依赖于页面执行时引入浏览器获取。
将动态HTML引入您的Java工作流程
通过Scrapeless抓取浏览器获取您的Java应用程序所需的页面状态,然后保持提取和HTML清理的明确性。
今天注册并获得 $5的免费信用 — 无需信用卡.
领取您的$5信用→常见问题解答
问:Jsoup能直接获取一个URL吗?
Jsoup可以通过其连接接口获取和解析HTTP或HTTPS URL。它还可以解析在其他地方获取的字符串和文件。选择适合您应用程序请求策略的路径,并在需要解析相对链接时保留文档地址。
问:Jsoup能运行JavaScript吗?
Jsoup不执行下载文档中的JavaScript。它可以在另一个组件渲染相关页面状态后解析HTML。因此,空选择可以表示缺少呈现的内容,而不是选择器的问题。
问:解析HTML是否使其安全显示?
仅解析HTML并不能确保该标记适合在您的应用程序中显示。Jsoup提供了一个具有白名单策略的单独清理器,用于此目的。为实际输出上下文选择策略,并将纯文本字段与富内容字段分开。
问:为什么提取的链接不完整?
一个链接可以在源文档中是相对的,因此其普通属性值可能不是完整地址。提供正确的基本URI,并使用jsoup的绝对URL解析功能。在将其添加到爬取中之前检查解析的目标。