clojure中的屏幕抓取



我在谷歌上搜索了一下,但找不到满意的答案。这个SO问题是相关的,但有点老,而且与我想要的完全相反:一种使用XPath而不是CSS选择器进行屏幕抓取的方法。

我已经使用activize进行了一些基本的屏幕抓取,但有时需要XPath选择器的功能。现在是:

clojure(java)有没有类似于Nokogiri或lxml的东西?"纯java Nokogiri"的状态是什么?有什么方法可以使用clojure中的库吗?有比这次黑客攻击更好的替代方案吗?

这里有几种可能性。

其中一些需要半格式的XML才能工作。如果您没有它,我会将clj-tagsoup与打嗝配对以生成XML(使用clj-tagsoup进行解析,它生成一个打嗝并写成XML的表单)并使用它。

首先,只需使用本地JDK功能。假设文档的格式足够好,那么可以尝试使用clj-xpath,它为本地JDK解析提供了一个包装器。

如果这还不够,可以考虑采用更基于Clojure数据结构的路由。一个更简单的路径可以只使用TagSoup的输出以及映射、过滤器和nths的组合。

如果您需要更高级的东西,可以考虑使用zippers来提供数据周围的结构,使其更易于操作。使用clojure.xml/parseclojure.zip/xml-zip制作拉链,然后从那里开始。有关示例,请访问http://techbehindtech.com/2010/06/25/parsing-xml-in-clojure/.

对于任何复杂的事情,使用原生结构是我的首选途径,因为你可以充分发挥语言的力量。

如果您提供了为什么需要XPath的示例,我可以提供一些示例代码。

最新更新