2014-12-04 5 views
0

Я пытаюсь использовать Nokogiri для анализа этого веб-сайта ASCAP для получения информации о песне/художнике. Вот пример того, что я хотел бы запроситьИспользование Nokogiri для разбора JavaScript скрыт HTML

https://mobile.ascap.com/aceclient/AceClient/#ace/writer/1628840/JAY%20Z

Я не могу показаться, чтобы получить доступ к DOM правильно, потому что источник, кажется, скрывается за каким-то JavaScript. Я довольно новичок в веб-соскабливании, поэтому было довольно сложно найти способ сделать это. Я пробовал использовать Charles, чтобы узнать, были ли данные взяты с другого сайта, и использовали XHelper для генерации точных запросов XPath.

Это возвращает ноль, где он должен вернуться «1, 2 YA'LL»

page = Nokogiri::HTML(open('https://mobile.ascap.com/aceclient/AceClient/#ace/writer/1628840/JAY%20Z')) 

puts page.xpath('/html/body/div[@id="desktopSearch"]/div[@id='ace']/div[@id="aceMain"]/div[@id="aceResults"]/ul[@id="ace_list"]/li[@class="nav"][1]/div[@class="workTitle"]').text 
+0

Этот сайт просматривается Javascript. Вам нужно будет использовать что-то, что может обрабатывать страницу с помощью JS, а затем прочитать полученный DOM. [Этот учебник по Capybara + PhantomJS] (http://www.chrisle.me/2012/12/scraping-html5-sites-using-capybara-phantomjs/) может быть вам полезен. –

+0

Не указывайте нам ссылку в качестве примера данных. Ссылки гниют и ломаются. Вместо этого представьте минимальный пример HTML внутри вопроса. Все остальное препятствует ответам. –

+0

Извините @thetinman, я не мог показать пример, b/c, как описано выше, HTML не отображается, когда вы просматриваете источник. –

ответ

0

Использовал инструменты инспектора Google для регистрации XMLHTTPRequests и был легко в состоянии выяснить, откуда были загружены данные. Благодаря @NickVeys!

0

Шаг № 1, когда индексацию/выскабливание, чтобы отключить JavaScript в вашем браузере, затем посмотреть на страница. То, что вы видите в этот момент, - это то, что видит Нокогири. Если нужные вам данные видны, то шансы действительно хороши, вы можете получить его с помощью синтаксического анализатора.

В этот момент НЕ опирайтесь на список выбора XPath или CSS браузера, который можно увидеть при проверке элемента, который покажет вам путь к узлу (узлам), который вы хотите. Браузеры делают множество исправлений при отображении страницы, и исходное представление обычно отражает их, включая отображение данных, полученных динамически. Другими словами, браузер вам лжет о том, что он изначально извлекал из страницы. Чтобы обойти это, используйте wget, curl или nokogiri http://some_URL в командной строке для извлечения исходной страницы, а затем найдите нужный узел.

Если вы не видите нужный вам узел, вам понадобятся другие инструменты, например, что-то из набора Watir, который позволяет вам управлять браузером, который понимает JavaScript. Браузер может извлекать страницу, интерпретировать JavaScript и извлекать содержимое любой динамической страницы. Затем вы сможете получить разметку и передать ее Нокигири.

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