1

フライト結果から合計金額 (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 の undefined method `text' 」というエラーが表示されます。

私のコード

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
4

1 に答える 1

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リクエストを再構築できます。

于 2012-11-26T06:37:32.740 に答える