我很难从航班结果中提取总价(css 选择器 = '.total')。
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
我收到错误"nil: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
页面加载后,您尝试抓取的内容似乎由 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 请求。