在clojure中进行屏幕抓取

时间:2012-12-03 23:23:32

标签: ruby clojure screen-scraping nokogiri

我用Google搜索,但我找不到满意的答案。 This所以问题是相关的,但有点旧,以及与我正在寻找的完全相反:使用XPath进行屏幕抓取的方法,而不是CSS选择器。

我已经使用了一些基本的屏幕抓取活动,但有时候需要XPath选择器的强大功能。所以这就是:

对于clojure(java),有没有相当于Nokogiri或lxml的内容? “纯java Nokogiri”的状态是什么?有什么方法可以使用clojure中的库?比this hack更好的替代方案?

1 个答案:

答案 0 :(得分:3)

这里有几种可能性。

其中一些需要半良好的XML才能工作。如果你没有它,我会将clj-tagsouphiccup配对以产生XML(用clj-tag-soup解析,产生一个打嗝并写成XML的形式)并使用这一点。

首先,只使用本机JDK功能。假设文档已经足够好,请尝试使用clj-xpath,它提供了本机JDK解析的包装。

如果这还不够,可以考虑采用更多基于Clojure数据结构的路由。更简单的路径可以使用TagSoup的输出以及地图,过滤器和nth的组合。

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

对于任何复杂的事情,使用本机结构是我的首选路径,因为您可以充分利用该语言的全部功能。

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