似乎我第一次没有问这个问题。继续下去了。
我正在尝试按照此教程: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英寸,文字填满了屏幕
这是我从第一张图片中得到的图像。
除此之外,我相信这里的图像是我需要的吗?它只是把它拿出来。
由于 萨姆
答案 0 :(得分:1)
这里的主要问题是价格是在javascript中写的而不是html itslef。 Nokogiri只解析XML和HTML,因此您需要很棒的REGEX帮助。在您阅读完整代码之前,请先阅读一些解决方法。
首先,我使用以下代码搜索名为<script>
的所有标记:
doc.xpath("//script[@type='text/javascript']/text()").each
它返回超过100个对象,所以我需要找到其中哪些可以找到名称和价格。因此我发现我需要阅读的特定javascript中有一些独特的文本,所以我循环遍历所有&gt; 100个对象并测试它是否包含该唯一字符串。以下是您可以理解的图片:
当我找到那些和平时,我只是用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