使用Nokogiri刮掉groupon交易

时间:2012-03-19 23:21:16

标签: ruby-on-rails ruby-on-rails-3 nokogiri

我正在关注Nokogiri railscast为Groupon编写一个刮刀。当我运行我的rb文件时,我一直收到以下错误。

Flamingo Conference Resort and Spa Deal of the Day | Groupon Napa / Sonoma
traveldeal_scrape.rb:9:in `block in <main>': undefined method `text' for 
nil:NilClass (NoMethodError)

这是我的scrape文件。

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

url = "http://www.groupon.com/deals/ga-flamingo-conferences-resort-spa?c=all&p=0"
doc = Nokogiri::HTML(open(url))
puts doc.at_css("#content//h2/a").text

title = doc.at_css("#content//h2/a").text
price = doc.at_css("#amount").text[/[0-9\.]+/]
puts "#{title} - #{price}"
puts doc.at_css(".deal")[:href]

已编辑:上面的代码现在有效!

我使用了与教程完全相同的rubular表达式。我也不确定我的CSS标签是否正确。谢谢!

2 个答案:

答案 0 :(得分:1)

我认为你有疏忽:

doc.css(".deal").each do |deal|
  title = item.at_css("#content//a").text
  price = item.at_css("#amount").text[/\[0-9\.]+/]
  puts "#{title} - #{price}"
  puts item.at_css(".deal")[:href]
end

应该是:

doc.css(".deal").each do |deal|
  title = deal.at_css("#content//a").text
  price = deal.at_css("#amount").text[/\[0-9\.]+/]
  puts "#{title} - #{price}"
  puts deal.at_css(".deal")[:href]
end

答案 1 :(得分:1)

你的正则表达式的问题在于它错过了你想要逃脱的美元符号:.text[/\$[0-9\.]+/]