我是XPath新手,對我來說似乎有點棘手;有時候我發現它不是我認爲它應該工作的方式。XPath與nokogiri一起;教程/例子嗎?
當我湊使用XPath和引入nokogiri從網站的數據,我覺得很難,如果網站具有複雜的結構吧。我使用FirePath來獲取元素的XPath,但有時它似乎不起作用。我必須刪除瀏覽器添加的額外標籤,如tbody
。
我真的很想知道,如果有一些很好的教程和XPath和引入nokogiri的例子。在Google搜索後我找不到多少東西。
我是XPath新手,對我來說似乎有點棘手;有時候我發現它不是我認爲它應該工作的方式。XPath與nokogiri一起;教程/例子嗎?
當我湊使用XPath和引入nokogiri從網站的數據,我覺得很難,如果網站具有複雜的結構吧。我使用FirePath來獲取元素的XPath,但有時它似乎不起作用。我必須刪除瀏覽器添加的額外標籤,如tbody
。
我真的很想知道,如果有一些很好的教程和XPath和引入nokogiri的例子。在Google搜索後我找不到多少東西。
使用Nokogiri或任何XML/HTML解析器查找元素或元素組的最大訣竅是從一個簡短的訪問器開始,找到所需的一般附近,然後迭代地添加對它進行微調,直到你有你想要的。
第二個技巧是記住使用//
來啓動XPath,而不是/
,除非您確定要從文檔的根目錄開始。 //
就像是Linux中的命令行中的'**/*'
通配符。它到處搜索。
此外,不要信任由瀏覽器提供的XPath或CSS訪問。他們會對HTML源代碼進行各種修正,包括tbody
,就像您看到的一樣。相反,使用Ruby的OpenURI或curl
或wget
來檢索原始來源,並使用編輯器(如vi
或vim
)或使用less
或cat
來查看它到屏幕。沒有機會以這種方式對文件進行任何更改。最後,使用XPath將搜索分解爲塊通常更容易/更快,然後讓Ruby遍歷事物,而不是嘗試想出難以維護或更脆弱的複雜XPath。
Nokogiri本身很容易。大部分您想要做的事情都是兩種不同方法的簡單組合:search
和at
。兩者都採用CSS或XPath選擇器。 search
,以及其兄弟方法xpath
和css
,返回一個NodeSet
,它基本上是一個可以迭代的節點數組。 at
,css_at
和xpath_at
返回與CSS或XPath訪問器匹配的第一個節點。在所有這些方法中,...xpath
變體接受XPath,而...css
變體接受CSS訪問器。
一旦你有一個節點,通常你會想做兩件事之一,要麼提取一個參數,要麼得到它的文本/內容。您可以使用[attribute_to_get]
和使用text
的文本輕鬆獲取屬性。
使用這些方法,我們可以搜索頁面中的所有鏈接,並返回其文本和相關HREF,使用類似:
require 'awesome_print'
require 'nokogiri'
require 'open-uri'
doc = Nokogiri::HTML(open('http://www.example.com'))
ap doc.search('a').map{ |a| [a['href'], a.text] }[0, 5]
,輸出:
[
[0] [
[0] "/",
[1] ""
],
[1] [
[0] "/domains/",
[1] "Domains"
],
[2] [
[0] "/numbers/",
[1] "Numbers"
],
[3] [
[0] "/protocols/",
[1] "Protocols"
],
[4] [
[0] "/about/",
[1] "About IANA"
]
]
Nokogiri很容易。在我的答案中查看我的其他文字。 –
我還發現,有使用引入nokogiri和XPath在開始時相當陡峭的學習曲線,但大量的試驗和錯誤後,我現在已經成功地利用這兩者的懸掛,所以掛在那裏! Nokogiri非常強大,非常值得學習。
關於教程/例子,我想你已經看到了引入nokogiri tutorials page。我可以想像,如果你不習慣的XPath,XML解析等
一些其他可能的資源,這些教程的水平可能是有點高:
在XPath上,我建議閱讀this summary in five paragraphs。其核心XPath非常簡單,只是非常不直觀!我發現CSS更容易記住,我不認爲我是唯一。
但在最後,而教程將幫助,你能做的最好的事情就是剛剛破解打開控制檯,require 'nokogiri'
開始埋頭苦幹。過了一段時間,它將開始有意義。
感謝您的回答。我知道我需要練習很多才能到達start_making_sense的地方。祝你好運,再次感謝。 –
而且,我從這個答案中學到了一些關於xpath的優秀的東西:http://stackoverflow.com/questions/2080799/how-to-use-xpath-nokogiri?lq=1 –
很高興我可以幫忙!祝你好運。 –
最好的例子是我發現真正有用的是在下面的鏈接。它顯示了不同的教程,可以用來從xml文件中導航/查找信息的各種方法越來越困難。
http://www.zvon.org/xxl/XPathTutorial/General/examples.html
希望你覺得它有用呢! 祝你好運!
關於Nokogiri的好處之一是它也支持CSS訪問器。有時CSS是更快的路徑,有時XPath是。如有必要,請隨意互換使用。 –
是的,我使用兩個,CSS選擇器和XPath。兩者結合使用確實更加強大。 –