Nokugiri网络搜索问题

时间:2016-05-25 13:47:21

标签: ruby-on-rails ruby-on-rails-4 web-scraping

似乎我第一次没有问这个问题。继续下去了。

我正在尝试按照此教程:http://railscasts.com/episodes/190-screen-scraping-with-nokogiri

我目前也试图从这个网站链接中获取价格:http://www.ticketmaster.co.uk/derren-brown-miracle-glasgow-04-07-2016/event/370050789149169E?artistid=1408737&majorcatid=10002&minorcatid=53&tpab=-1

我想要实现的是获得所有这三张票(名称和价格尽可能多的关于票/价格的信息)并在我的网络应用程序中使用它们。

我无法告诉你结果,它的大小非常大,但我可以告诉你,我没有击中第二个byebug,Heres我的代码。

  url = "http://www.ticketmaster.co.uk/derren-brown-miracle-glasgow-04-07-2016/event/370050789149169E?artistid=1408737&majorcatid=10002&minorcatid=53&tpab=-1"
    doc = Nokogiri::HTML(open(url))
    byebug
    doc.css(".item").each do |item|
      title = item.at_css(".fru").text
      byebug
    end

不幸的是,为了帮助你,理想情况下必须自己尝试看看可怕的页面大小!哈哈!

编辑,好吧,请记住我的屏幕是27英寸,文字填满了屏幕

这是我从第一张图片中得到的图像。

huge image of response

除此之外,我相信这里的图像是我需要的吗?它只是把它拿出来。

what i might need!

由于 萨姆

1 个答案:

答案 0 :(得分:1)

这里的主要问题是价格是在javascript中写的而不是html itslef。 Nokogiri只解析XML和HTML,因此您需要很棒的REGEX帮助。在您阅读完整代码之前,请先阅读一些解决方法。

首先,我使用以下代码搜索名为<script>的所有标记:

doc.xpath("//script[@type='text/javascript']/text()").each

它返回超过100个对象,所以我需要找到其中哪些可以找到名称和价格。因此我发现我需要阅读的特定javascript中有一些独特的文本,所以我循环遍历所有&gt; 100个对象并测试它是否包含该唯一字符串。以下是您可以理解的图片:

enter image description here

enter image description here

当我找到那些和平时,我只是用REGEX来提取价格和名字。这是工作代码。只需复制粘贴并运行它即可。

require 'rubygems'
require 'nokogiri'
require 'open-uri'

def get_name_and_price
  ticketmaster_url = "http://www.ticketmaster.co.uk/derren-brown-miracle-glasgow-04-07-2016/event/370050789149169E?artistid=1408737&majorcatid=10002&minorcatid=53&tpab=-1"
  doc = Nokogiri::HTML(open( ticketmaster_url ))
  event_name = nil
  ticket_price = nil
  doc.xpath("//script[@type='text/javascript']/text()").each do |text|
    if text.content =~ /TM\.Tracking\.satellite/
      event_name = text.content[/"eventName":".*?"/].gsub!('"eventName":', '').gsub!('"', '')
    elsif text.content =~ /more_options_on_polling/
      ticket_price = text.content[/"total_price":"\d+\.\d+"/].gsub!('"total_price":', '').gsub!('"', '').to_f
    end
  end

  puts "Event name: " + event_name
  puts "Ticket price: " + ticket_price.to_s
end

get_name_and_price