我正在关注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标签是否正确。谢谢!
答案 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\.]+/]