2014-09-30 13 views
0

Я пытаюсь использовать xpath и nokogiri для извлечения URL-адреса изображений изображений Google. когда я щелкнул правой кнопкой мыши изображение и скопировал его xpath, я получаю следующее:Извлечь ссылку на изображение с помощью Nokogiri и Xpath

// * [@ id = "irc_cc"]/div [3]/div [1]/div [1]/div [ 2]/div [1]/a/img

Однако, когда я помещаю это в вызов nokogiri xpath, ничего не возвращается. Любые идеи о том, как я могу захватить URL-адрес изображения? Спасибо!

require "open-uri" 
require "mechanize" 
require "net/http" 

base_url = "https://www.google.com/search? 
tbm=isch&tbs=isz:lt,islt:vga&q=Analog%20Bar%20San%20Diego%20Burgers" 

doc = Nokogiri::HTML(open(base_url)) 
doc.xpath('//*[@id="irc_cc"]/div[3]/div[1]/div[1]/div[2]/div[1]/a/img').each do |node| 
    puts node 
end 
+0

Я не могу найти какой-либо элемент html с id 'irc_cc' – gotva

+0

Хм, хорошо, поэтому я просмотрел источник, и я ничего не вижу с irc_cc. Способ, которым я получил этот Xpath, - это щелкнуть правой кнопкой мыши изображение в Google и щелкнуть Inspect Element, затем щелкнуть правой кнопкой мыши элемент и щелкнуть Copy XPath. Есть ли лучший способ сделать это? – Brandon

+1

Я действительно понимаю, что «копировать XPATH» удобно и быстро, но похоже, что эта функциональность имеет ошибку ... Вы всегда можете создать XPATH вручную – gotva

ответ

1

Это потому, что браузеры, скорее всего, видят эту страницу по-разному. Ни Nokogiri, ни open-uri не обработают javascript-код. Проверьте содержимое страницы, напечатав его на стандартный вывод или файл (puts open(base_url).read), а затем вы можете построить необходимый XPath - с помощью http://ponderer.org/download/xpath/

Вы также можете попробовать использовать CSS селекторы вместо XPath - http://ruby.bastardsbook.com/chapters/html-parsing/

Метод kss Nokogiri будет служить большинству ваших потребностей. Для веб-страниц, которые нужны , требуется более точный выбор, вы можете перейти в мир синтаксиса XPath и использовать метод xpath Nokogiri.

Смежные вопросы