Web Scraping с Nokogiri :: HTML и Ruby - Как вы справляетесь, когда то, что вы ищете, не существует? - PullRequest
0 голосов
/ 30 марта 2011

У меня есть скрипт, который работает на 99% страниц, которые я хочу почистить, но только некоторые из них не имеют того, что я ищу, и мои ошибки скрипта с

undefined method `attribute' for nil:NilClass (NoMethodError) 

Код немного некрасивый из-за возни и отладки, но вот что я делаю.Ошибка находится в третьей строке и объясняется просто тем, что в случаях ошибки нет .entry-content img:

doc = Nokogiri::HTML(open(url))
image_link = doc.css(".entry-content img")
temp = image_link.attribute('src').to_s

Как я могу обнаружить это и обработать ошибку, когда ссылка на изображение, возвращаемая Nokogiri, отсутствуетт ноль?

1 Ответ

6 голосов
/ 30 марта 2011
doc = Nokogiri::HTML(open(url))
if image_link = doc.at_css(".entry-content img")
  temp = image_link['src']
else
  # Whatever else
end

В качестве альтернативы, вы можете использовать селектор XPath для непосредственного получения значения атрибута:

doc = Nokogiri::HTML('<div class="entry-content"><img src="bar"></div>')
src = doc.at_xpath('//*[@class="entry-content"]//img/@src').to_s
# src is "bar"; if the html didn't have such an item, it would be "" (nil.to_s)
...