【问题标题】:Difficulty screen scraping http://www.momondo.com using nokogiri使用 nokogiri 抓取 http://www.momondo.com 的困难屏幕
【发布时间】:2012-11-25 14:09:50
【问题描述】:

我很难从航班结果中提取总价(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 的未定义方法 `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

【问题讨论】:

    标签: ruby-on-rails ruby nokogiri


    【解决方案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 请求。

    【讨论】:

      猜你喜欢
      • 2017-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-19
      • 1970-01-01
      • 2011-12-09
      相关资源
      最近更新 更多