2015-01-31 3 views
-2

Я использую Nokogiri, чтобы очистить данные из HTML-документа, но я бегу в следующее сообщение об ошибке:неопределенный метод `[]» для ноль: NilClass при использовании Nokogiri

`block in <main>': undefined method `[]' for nil:NilClass (NoMethodError) 

Это код воспроизведите проблему:

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

url = "http://www.somewebsite.com/somepage/some" 
doc = Nokogiri::HTML(open(url)) 

puts doc.at_css("title").text 
doc.css(".Info_listing").each do |x| 
    puts x.at_css(".MoreInfo")[:href] 
end 

Кто-нибудь знает, почему я получаю эту ошибку?

ответ

2

at_css вернет nil если нет подходящего элемента.

Если вы хотите получить MoreInfo класса элемент внутри Info_listing -class элемента, вам лучше использовать следующий код:

doc.css(".Info_listing .MoreInfo").each do |x| 
    puts x[:href] 
end 
+0

, а также вы можете сказать мне, как сделать это на следующих страницах? поскольку сайт имеет объект разбивки на страницы, и мне нужны данные до последней страницы. И это решение предназначено только для одной страницы –

+0

@AnshulKalra. URL следующей страницы: 'http: //www.indiacom.com/yellow-pages/ambulance-services/bangalore/? Page = 2'. Измените номер 'page', повторите то же самое, пока не появится ссылка' next'. – falsetru

+0

@AnshulKalra, или найдите кнопку «next» и следуйте по ссылке, повторите, пока не появится более «следующая» ссылка. – falsetru