2009-11-09 103 views
0

我已經閱讀了大量的教程來幫助和Hpricot下,我發現它不是所有的Html可以說話的問題。我會詳細說明:Hpricot HTML刮(使用Ruby on Rails)

我試圖刮掉html的網站是http://yellowpages.com.mt/Malta-Search/Radio-In-Malta-Gozo.aspx

我需要獲取作爲結果列出的鏈接(我需要這樣做可能在上述網站上的任何網址,因此RSS或這樣做是不利的,因爲我需要該程序來讀取它們在現場,飛給出的任何URL我喂。)

我想盡一切辦法拉斷的特定ID我需要(在直接XPATH給予等等的等等),但我意識到,當我這樣做

doc = Hpricot(open("http://yellowpages.com.mt/Malta-Search/Radio-In-Malta-Gozo.aspx", 'User-Agent'=>'ruby')) str = doc puts str 

所提供的結果排除了所有與我需要的鏈接相關的html!所以哪一種方法我用來刮,它沒有找到所需的元素,因爲他們不在那裏根據hpricot。

當我在Firefox中查看源代碼時,我確實看到它們,所以我很困惑。有沒有人知道如何解決這個問題?我一直在努力尋找自己的方式,我無法找到解決方案! 任何幫助將不勝感激

+0

我想要的元素存在於: html/body/form/table // tr/td/div/table [2] // tr [2]/td [2]/div/table/table // tr/td/div/div/table/tbody/tr/td/h6 (其中//表示tbody) 但Hpricot不會讀取過去 html/body/form/table // tr/td/div/table [2] // tr [2]/td [2]/div 有什麼想法? – Erika

回答

2

它看起來像網站正在做的用戶代理。如果我更改該屬性以匹配我的Firefox版本,我會得到完整的響應主體。當我把這個物業當作「紅寶石」時,迴應並不完整。不知道根本原因是什麼,但這似乎緩解了症狀。

require 'rubygems' 
require 'hpricot' 
require 'open-uri' 

doc = open("http://yellowpages.com.mt/Malta-Search/Radio-In-Malta-Gozo.aspx", 'User-Agent'=>'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.1.2) Gecko/20090729 Firefox/3.5.2') { |f| Hpricot(f) } 
puts doc.search('h6') 

希望這有助於!

+0

工作就像一個魅力! 非常感謝你!你是一個救生員<3 – Erika