我使用Google搜索,但找不到滿意的答案。 This這個問題是相關的,但有點舊,以及我正在尋找的完全相反:一種使用XPath而不是CSS選擇器進行屏幕抓取的方式。在clojure中刮屏
我已經使用了一些基本的屏幕抓取活躍,但有時需要XPath選擇器的力量。所以這裏是:
是否有相當於Nokogiri或cloxure(java)的lxml? 「純java Nokogiri」的狀態是什麼?任何方式從clojure使用圖書館?比this hack更好的選擇嗎?
我使用Google搜索,但找不到滿意的答案。 This這個問題是相關的,但有點舊,以及我正在尋找的完全相反:一種使用XPath而不是CSS選擇器進行屏幕抓取的方式。在clojure中刮屏
我已經使用了一些基本的屏幕抓取活躍,但有時需要XPath選擇器的力量。所以這裏是:
是否有相當於Nokogiri或cloxure(java)的lxml? 「純java Nokogiri」的狀態是什麼?任何方式從clojure使用圖書館?比this hack更好的選擇嗎?
這裏有幾種可能性。
其中幾個需要半井結構的XML工作。如果您沒有它,我會將clj-tagsoup與hiccup配對以生成XML(用clj-tag-soup進行解析,這會生成一個打嗝並以XML形式寫出的表單)並使用它。
首先,只使用本地JDK功能。假設文檔格式不錯,請嘗試使用clj-xpath,該文件提供了本機JDK解析的包裝。
如果這還不夠,請考慮採用更多基於Clojure數據結構的路由。更簡單的路徑可以使用TagSoup的輸出以及地圖,過濾器和nths的組合。
如果您需要更高級的東西,請考慮使用拉鍊提供數據結構,使其更易於操作。使用clojure.xml/parse
和clojure.zip/xml-zip
生產拉鍊,然後從那裏出發。一個例子可以在http://techbehindtech.com/2010/06/25/parsing-xml-in-clojure/找到。
使用本機結構是我首選的任何複雜的路線,因爲您可以充分利用該語言的力量。
如果您提供了一個您需要XPath的原因的示例,我可以提供一些示例代碼。
沒有什麼複雜的,只是一些從HTML中提取和提取值。但是在XPath中很容易完成的一些事情是使用CSS選擇器的一種痛苦,所以Enlive不會這樣做。希望clj-tagsoup + hiccup + clj-xpath會。 – kliron
檢出http://stackoverflow.com/questions/2861/options-for-html-scraping – Ankur
爲什麼不使用JVM附帶的XPath庫?使用Clojure比使用純Java更容易。 – Bill