jsoup 1.18.2 现已发布,新的流解析器提供了混合 DOM + SAX 事件驱动的解析接口、请求进度跟踪和许多其他改进。jsoup 是一个用于处理 real-world HTML 的 Java 库。它使用最好的 HTML5 DOM 方法和 CSS 选择器提供了一个非常方便的 API 用于提取和操作数据。
下载地址:https://jsoup.org/download
具体更新内容包括:
改进
- 优化了整个输入读取和解析流程中的吞吐量和内存使用,堆分配和 GC 下降了 -6% 到 -89% 之间,小输入的吞吐量提高了 +143%。大多数输入大小的吞吐量将增加约 20%。这些性能改进是通过回收用于读取和解析输入的 backing
byte[]
和char[]
数组来实现的。2186 - 当输入包含补充平面中的 UTF 字符时,将
html()
和Entities.escape()
速度优化约49% 。2183 - 现在
FormElement.elements()
返回的表单关联元素会反映出在原始解析之后对 DOM 所做的更改。2140 - 在
TreeBuilder
中,onNodeInserted()
和onNodeClosed()
事件现在也会针对 outermost / root Document node 触发。这将启用 Document 节点的源位置跟踪(以前未设置)。这也使节点遍历器能够看到外部 Document 节点。2182 - 现在可以使用
Elements#set()
,inline 方式交换选定元素的位置。2212
Bug 修复
- 如果元素的类包含
*
字符,Element.cssSelector()
将失效。2169 - 跟踪源范围时,无效 self-closing 元素后面的文本节点可能不会被跟踪。2175
- 当文档没有 doctype,或者 doctype 未命名
html
时,应以 Quirks 模式进行解析。2197 - 使用像
div:has(span + a)
这样的选择器时,has()
组件无法正常工作,因为内部组合查询会导致评估器匹配外部的同级元素,而不是子元素。2187 - 在嵌套的
:has()
中包含多个:has()
组件的选择器查询可能会无法正确执行。2131 - 当响应中的 cookie 名称重复时,通过
Connection.Response#cookies()
提供的 cookie 简单视图将提供最后一个 cookie 集。一般情况下,最好使用 Jsoup.newSession 方法来维护 cookie jar,因为该方法会在发出请求时对 cookie 应用适当的路径选择。1831 - 遵循 tokenizer 中的当前 HTML 规范,允许将
<
作为 tag name 的一部分,而不是将其作为字符节点输出。2230 - 类似地,允许以
<
作为属性名称的开头,而不是创建新元素。1483
详情可查看更新说明:https://github.com/jhy/jsoup/releases/tag/jsoup-1.18.2