給定一個像「What popular startup advice is plain wrong?」這樣的頁面,我希望能夠提取右上方主題標題下的第一個主題,在本例中爲「常見誤解」。如何從網頁中提取HTML主題標題?
我在Ruby中這樣做的最佳方式是什麼?是否與Nokogiri或正則表達式?據推測我需要做一些HTML解析?
給定一個像「What popular startup advice is plain wrong?」這樣的頁面,我希望能夠提取右上方主題標題下的第一個主題,在本例中爲「常見誤解」。如何從網頁中提取HTML主題標題?
我在Ruby中這樣做的最佳方式是什麼?是否與Nokogiri或正則表達式?據推測我需要做一些HTML解析?
首先,您幾乎從來沒有想過使用正則表達式來解析/提取/摺疊/旋轉/切割XML或HTML。可能會出錯的方式太多了。正則表達式適用於某些工作,但XML/HTML提取並不適合。
這就是說,這裏就是我想要用做引入nokogiri:
require 'nokogiri'
require 'open-uri'
doc = Nokogiri::HTML(open('http://www.quora.com/What-popular-startup-advice-is-plain-wrong'))
topic = doc.at('span a.topic_name span').content
puts topic
運行輸出:
Common Misconceptions
代碼正在兩個快捷方式,應始終工作:
OpenURI
可以輕鬆訪問Internet資源。這是我的最簡單的平均應用程序。有更強大的工具,但沒有一個方便。doc.at
告訴Nokogiri遍歷文檔,並找到第一次出現的CSS訪問器'span a.topic_name span
',它應該在該頁面中作爲第一個條目保持一致。請注意,Nokogiri支持搜索節點的一些變體:at
與search
。 at
和%
以及諸如css_at
之類的內容找到第一個匹配項並返回Node
,這是一個單獨的標籤或文本或註釋。 search
,/
,那些變體返回一個NodeSet
,它就像一個節點數組。您必須使用某種Array訪問器來遍歷該列表或者提取您想要的單個節點。在上面的代碼中,我可以說doc.search(...).first
得到我想要的節點。
Nokogiri還支持使用XPath訪問器,但對於大多數情況下我通常會使用CSS。它更簡單,更容易閱讀,但你的里程可能會有所不同。
嗨,這真的很有幫助。直到很久以前,突然間,我開始使用503 Service Unavailable(OpenURI :: HTTPError)。我假設這是網站對服務器的請求挑剔。有沒有解決方法? – 2011-12-25 04:29:20
如果他們禁止了你,沒有任何工作。這就是爲什麼按照他們的規則發揮並遵守他們的服務條款非常重要的原因。 503可能意味着他們的服務器是脫機的。 – 2011-12-25 09:00:58