jsoup 1.15.4已经发布,其中包括一些改进,特别是在漂亮的HTML打印时,以及错误的修复。
jsoup是一个用于处理真实世界的HTML的Java库。它为提取和处理数据提供了一个非常方便的API,使用了HTML5 DOM方法和CSS选择器的精华。
现在就下载jsoup。
改进之处
增加了转义CSS选择器(标签、ID、类)的功能,以匹配不遵循常规CSS语法的元素。例如,要通过类名<p class=”one.two”>来匹配,使用document.select(“p.one\.two”); #838
在打印的时候,要包住<br>标签后面的文本。#1858
当pretty-printing时,将自定义标签中自闭标签后的换行符规范化。#1852
当pretty-printing时,在block和inline标签之间折叠非重要的空白。#1802
在Element.forEach()和Node.forEachNode()中,使用java.util.function.Consumer,而不是之前的Android兼容shim org.jsoup.helper.Consumer。随后,后者已被弃用。#1870
增加了一个新方法Document.forms(),可以方便地检索到一个包含文档中<form>元素的List<FormElement>。
增加了一个新的方法Document.expectForm(),用来查找第一个匹配的FormElement,否则就炸掉。
错误修正
含有和<code>等字符的URL没有被正确转义,在获取的时候会抛出一个MalformedURLException。#1873
Element.cssSelector()会在标签名、ID或类名需要转义的情况下创建无效的选择器(例如,如果类名中含有:或.)。#1742
Element.text()在block和inline元素之间应该有一个空格。#1877
如果一个节点或一个元素被替换成自己,该节点会被错误地变成孤儿。#1843
在newRequest()中,前一个请求的表单数据被复制到一个新的请求中,导致在执行多步骤表单提交时,表单数据的累积,或者数据被错误地发送到后来的请求中。现在,newRequest()只复制会话相关的设置(cookie、代理设置、用户代理等),而不复制请求数据或正文。#1778
修正了Safelist.removeAttributes()中的一个问题,当使用:all伪属性时,可能会引发ConcurrentModificationException。
考虑到嵌套极深的HTML,Element中的一些方法可能会因为过度递归而抛出StackOverflowError。也就是说。#data(), #hasText(), #parents(), and #wrap(html)。#1864
变化
废弃了未使用的Document.normalise()方法。正常化发生在HTML树的构建过程中,而不再是一个独立的阶段。
我真诚地感谢每一个贡献补丁、建议和错误报告的人。如果你对下一个版本有任何建议,我很乐意听到它们;请直接与我联系。
你也可以在Mastodon/Fediverse上关注我(@jhy@tilde.zone),以收到关于jsoup发布的不定期说明。
Assets 2