背景
jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
nifi当然也集成了这个jsoup相关的处理器就是GetHTMLElement、ModifyHTMLElement、PutHTMLElement。
GetHTMLElement处理器基本功能是,从上游的folwfile中拿html解析,然后通过css选择器获取元素,然后根据配置的Output Type类型,选择调用doc不同的api,从元素里边提取html、text、data、attribute值;HTML(ele.html())、Text(ele.text())、Attribute(ele.attr(配置的属性值))、Data(ele.data())。
ModifyHTMLElement处理器基本功能是,从上游的folwfile中拿html解析,然后通过css选择器获取元素,然后根据配置的Output Type类型,选择调用doc不同的api,修改ellement元素的值。HTML(ele.html(modifiedValue))、Text(ele.text())、Attribute(ele.attr(配置的atrribute, 配置的属性修改后的值))
PutHTMLElement处理器基本功能是,从上游的folwfile中拿html解析,然后通过css选择器获取元素,然后根据配置的Element Insert Location Type类型,选择调用doc不同的api,在ellement元素之前或者之后插入新增元素。append-html(ele.append(putValue))、prepend-html(ele.prepend(putValue))
必备技能Css选择器
详见:https://jsoup.org/apidocs/org/jsoup/select/Selector.html
常用如下
| 通配符 | 含义 | 例子 |
| * | 所有元素 | * |
| tag | 元素的标签名称(div元素) | div |
| #id | 元素属性id(div下的id为wrap和id为logo的元素) | div#wrap, #logo |
| .class | 元素属性的class(div下的class为left的元素) | div.left |
| [attr] | 属性匹配(带有href的标签a) | a[href] |
总结
1.这些处理器是用来出来html的文档的,并不能直接从网络上爬取页面。
2.处理器的核心有两点jsoup解析html文档,css选择器筛选html文档元素。
附录一:GetHTMLElement
| 属性 | 含义 |
| URL | 被解析的HTML页面的基本URL。当从HTML元素中提取属性值时,此URL将用于解析绝对URL。 |
| CSS Selector | css选择器用于提取元素 |
| Output Type |
|
| Destination |
|
| Prepend Element Value | 将指定的值前置到结果元素的前面 |
| Append Element Value | 向结果元素追加指定的值 |
| Attribute Name | 当Output Type为HTML时,该值用作确定应该检索所选元素上的哪个属性的键。当Output Type为Attribute时,如果这个值带有'abs:'前缀,那么提取的属性值将使用指定的基URL转换为绝对URL形式。 |
附录二:ModifyHTMLElement
| 属性 | 含义 |
| CSS Selector | css选择器用于提取元素 |
| HTML Character Encoding | 默认UTF-8 Character encoding of the input HTML |
| Output Type |
|
| Modified Value | 命中的元素要更新成的值 |
| Attribute Name | 当Output Type为Attribute时,该值用作键值,以确定选定元素上的哪个属性将被修改为新值。 |
附录三:PutHTMLElement
| 属性 | 含义 |
| CSS Selector | css选择器用于提取元素 |
| HTML Character Encoding | 默认UTF-8 Character encoding of the input HTML |
| Element Insert Location Type |
例子 prepended 原始:<b>Hi</b> 写入:<p>There</p> 结果:<p><b>Hi</b>There</p> Appending 原始:<b>Hi</b> 写入:<p>There</p> 结果:<p>There<b>Hi</b></p> |




