【问题标题】:Screen scraping in clojureclojure 中的屏幕抓取
【发布时间】:2012-11-21 12:44:04
【问题描述】:

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

我使用 enlive 进行一些基本的屏幕抓取,但有时需要 XPath 选择器的强大功能。所以这里是:

对于 clojure (java) 是否有任何与 Nokogiri 或 lxml 等价的东西? “纯java Nokogiri”的状态如何?有什么方法可以使用 clojure 中的库?还有比this hack更好的选择吗?

【问题讨论】:

标签: ruby clojure screen-scraping nokogiri


【解决方案1】:

这里有几种可能性。

其中一些需要半格式良好的 XML 才能工作。如果你没有它,我会将clj-tagsouphiccup 配对以生成 XML(使用 clj-tag-soup 解析,它会生成一个打嗝并写为 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 的示例,我可以提供一些示例代码。

【讨论】:

  • 没什么复杂的,只是从 HTML 中爬取和提取值。但是在 XPath 中容易完成的一些事情用 CSS 选择器做起来很痛苦,所以 Enlive 不会做。希望 clj-tagsoup + hiccup + clj-xpath 会。
猜你喜欢
  • 2011-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多