2017-09-06 99 views
0

有没有什么办法在同一个数据流中执行多个GetHTMLElement?我想scrapy某些属性首先执行GetHTMLElement(选择属性)和执行UpdateAttribute处理器Apache中的多个GetHTML属性Nifi

(attrib: ${HTMLElement}) 

这第一部分工作得很好,但是当我尝试执行第二GetHTMLElement,它不能解析后的任何从flowContent ...

我在2种独立的方式执行他们,并MergeContent和工作合并他们......但现在我需要执行2 在流动的不同部分“获取”(拆分后)并且合并将不起作用...

谢谢你的帮助......我tryed问它在Hortonworks社区(https://community.hortonworks.com/questions/131614/multiple-gethtmlelement.html

回答

0

这样做的原因是,GetHTMLElement可以把提取的元素成flowfile 属性或flowfile 内容,具体取决于配置的Destination属性值。 GetHTMLElement有四个关系能够输出:

  • 未找到要素 - 元素不能在HTML文件中找到。原始HTML输入将保持不变的FlowFile内容。这种情况下,不会调用“原始”关系。
  • 成功 - 成功解析的HTML元素
  • 原始 - 原始HTML输入
  • 无效的HTML - 输入HTML语法无效

成功关系,则结果流文件将具有提取的元素的内容,或者如果该元素被放入属性中,则无内容。这是因为元素匹配的方式(请参阅GetHTMLElement#186)。您可以将原始关系路由到第二个GetHTMLElement处理器以提取元素,但正如您所描述的那样,您将拥有两个独特的流程文件,每个流程文件都包含一个元素。

我提起吉拉NIFI-4356通过保持在所得flowfiles原始内容当目的地是属性改善这种情况下的处理。

+0

非常感谢!对于可以添加的每个属性实现CSS Selector会很好,只需使用一个处理器就可以从HTML中获取许多属性(如EvaluateJSONPath或EvaluateXPath) –