4.5 Jsoup与Xsoup

优质
小牛编辑
132浏览
2023-12-01

4.5 Jsoup和Xsoup

WebMagic的抽取主要用到了Jsoup和我自己开发的工具Xsoup

4.5.1 Jsoup

Jsoup是一个简单的HTML解析器,同时它支持使用CSS选择器的方式查找元素。为了开发WebMagic,我对Jsoup的源码进行过详细的分析,具体文章参见Jsoup学习笔记

4.5.2 Xsoup

Xsoup是我基于Jsoup开发的一款XPath解析器。

之前WebMagic使用的解析器是HtmlCleaner,使用过程存在一些问题。主要问题是XPath出错定位不准确,并且其不太合理的代码结构,也难以进行定制。最终我自己实现了Xsoup,使得更加符合爬虫开发的需要。令人欣喜的是,经过测试,Xsoup的性能比HtmlCleaner要快一倍以上。

Xsoup发展到现在,已经支持爬虫常用的语法,以下是一些已支持的语法对照表:

NameExpressionSupport
nodenamenodenameyes
immediate parent/yes
parent//yes
attribute[@key=value]yes
nth childtag[n]yes
attribute/@keyyes
wildcard in tagname/*yes
wildcard in attribute/[@*]yes
functionfunction()part
ora | byes since 0.2.0
parent in path. or ..no
predicatesprice>35no
predicates logic@class=a or @class=byes since 0.2.0

另外我自己定义了几个对于爬虫来说,很方便的XPath函数。但是请注意,这些函数式标准XPath没有的。

ExpressionDescriptionXPath1.0
text(n)第n个直接文本子节点,为0表示所有text() only
allText()所有的直接和间接文本子节点not support
tidyText()所有的直接和间接文本子节点,并将一些标签替换为换行,使纯文本显示更整洁not support
html()内部html,不包括标签的html本身not support
outerHtml()内部html,包括标签的html本身not support
regex(@attr,expr,group)这里@attr和group均可选,默认是group0not support

4.5.3 Saxon

Saxon是一个强大的XPath解析器,支持XPath 2.0语法。webmagic-saxon是对Saxon尝试性的一个整合,但是目前看来,XPath 2.0的高级语法,似乎在爬虫开发中使用者并不多。