2012-03-19 7 views
1

Groupon에 스크레이퍼를 작성하려면 Nokogiri railscast을 따르고 있습니다. 내 rb 파일을 실행할 때 계속 다음과 같은 오류가 발생합니다.Nokogiri를 사용하여 groupon 거래를 마칩니다.

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) 

여기 내 스크래핑 파일입니다.

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] 

EDITED : 위 코드가 작동합니다!

튜토리얼과 완전히 동일한 루블 표현을 사용했습니다. 나는 또한 나의 CSS 꼬리표가 정확한지 확실하지 않다. 감사!

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 

가되어야한다 :

+0

아마도 이미 전환했습니다. 그러나 아직 작업하고 있다면 Groupon이 훌륭한 API를 가지고 있다는 것을 알고 있습니까? https://sites.google.com/site/grouponapiv2/home –

답변

1

나는 당신이 감독있어 생각

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 
+0

고마워요, 근접. 이 문제를 수정하고 위의 코드를 변경했습니다. 정의되지 않은 메소드 '텍스트'가져 오기 nil : Nil 클래스 (NoMethodError). 또한 rubular 표현 경고가 계속 표시됩니다. 이것을 무시할 수 있습니까? – Huy

+0

글쎄, 이걸'irb '에 던져서'doc.css (". deal"). first.title'을 실행했는데 오류가 발생했습니다. 반환되는 것은 제목이 없습니다. XML을 검사하는 데 어려움을 겪고 있지만, 내가 당신을 위해 무엇을 생각해 낼 수 있는지 알아볼 것입니다. – Nic

+0

Mine은'puts doc.at_css ("content # h2/a")를 사용하면 제목 문자열을 올바르게 출력합니다. text' – Huy

1

정규 표현식의 문제는 당신이 탈출하려고하고있는 달러 기호를 놓치고 있다는 것입니다 : .text[/\$[0-9\.]+/]

+0

감사합니다, michaelmichael. 그것은 경고를 고쳤다. – Huy

관련 문제