2012-11-25 72 views
1

我從飛行結果中提取總價格(css selector ='.total')有一些困難。難度屏幕刮取http://www.momondo.com使用nokogiri

http://www.momondo.com/multicity/?Search=true&TripType=oneway&SegNo=1&SO0=KUL&SD0=KBR&SDP0=31-12-2012&AD=2&CA=0,0&DO=false&NA=false#Search=true&TripType=oneway&SegNo=1&SO0=KUL&SD0=KBR&SDP0=31-12-2012&AD=2&CA=0,0&DO=false&NA=false 

我得到的錯誤 「未定義的方法'文本」的零:NilClass引入nokogiri」。

我的代碼

desc "Fetch product prices" 
task :fetch_details => :environment do 
    require 'nokogiri' 
    require 'open-uri' 
    include ERB::Util 

    OneWayFlight.find_all_by_money(nil).each do |flight| 
    url = "http://www.momondo.com/multicity/Search=true&TripType=oneway&SegNo=1&SO0=KUL&SD0=KBR&SDP0=31-12-2012&AD=2&CA=0,0&DO=false&NA=false#Search=true&TripType=oneway&SegNo=1&SO0=KUL&SD0=KBR&SDP0=31-12-2012&AD=2&CA=0,0&DO=false&NA=false" 
    doc = Nokogiri::HTML(open(url)) 
    price = doc.at_css(".total").text[/[0-9\.]+/] 
    flight.update_attribute(:price, price) 
    end 
end 

回答

1

你試圖刮掉出現內容被JS在頁面加載後進行填充。要看到自己,檢查的文件div#flight_results內容您目前解析:

url = 'http://www.momondo.com/multicity/?Search=true&TripType=oneway&SegNo=1&SO0=KUL&SD0=KBR&SDP0=31-12-2012&AD=2&CA=0,0&DO=false&NA=false#Search=true&TripType=oneway&SegNo=1&SO0=KUL&SD0=KBR&SDP0=31-12-2012&AD=2&CA=0,0&DO=false&NA=false' 

doc = Nokogiri::HTML(open(url)) 
doc.at_css('div#flight_results').to_html #=> '<div id="flight_results"></div>' 

雖然這是這個問題的範圍之外,通常可以重建用於填充內容你JS請求之後。