Это то, что вам нужно:
library("rvest")
url <- 'http://www.google.com/trends/fetchComponent?hl=pl&cat=0-47&geo=US&cmpt=q&tz=Etc/GMT-1&tz=Etc/GMT-1&content=1&cid=TOP_ENTITIES_0_0&export=5&w=300&h=420'
top_searches <- url %>%
read_html() %>%
html_nodes(xpath='//*[@class="trends-bar-chart-name"]') %>%
html_text(trim=TRUE)
# [1] "Car - Transportation mode" "Sales - Industry"
# [3] "Chevrolet - Automobile Company" "Ford - Automobile Make"
# [5] "Tire - Industry" "Craigslist Inc. - Advertising company"
# [7] "Truck - Truck" "Engine - Literature Subject"
# [9] "Kelley Blue Book - Company" "Toyota - Automobile Make"
Читайте дальше, если вам интересно, почему ваш подход не сработал и как мне удалось решить эту проблему.
Эта проблема
Проблема в том, что то, что вы ищете, отсутствует в xml_document
объекте. Данные, которые вам нужны, загружаются динамически, и rvest
не может с этим справиться — он может только получить исходный код веб-сайта и получить все, что там есть, без какой-либо обработки на стороне клиента. Как заявил автор rvest
< /a>, в таких случаях вы должны «перепроектировать протокол связи и запрашивать необработанные данные непосредственно с сервера» или «использовать пакет, такой как RSelenium, для автоматизации веб-браузера».
К счастью, первое решение оказалось относительно простым.
Реверс-инжиниринг Google Trends
На веб-сайте Google, на который вы ссылались, прямо под интересующей вас диаграммой есть маленький значок: </>
. Нажав на нее, вы получите фрагмент HTML, который можно использовать для встраивания этой диаграммы на ваш собственный веб-сайт.
Этот фрагмент в основном выполняет код JavaScript, который создает элемент <iframe>
, отображающий содержимое http://www.google.com/trends/fetchComponent?hl=pl&cat=0-47&geo=US&cmpt=q&tz=Etc/GMT-1&tz=Etc/GMT-1&content=1&cid=TOP_ENTITIES_0_0&export=5&w=300&h=420. Как оказалось, этот сайт содержит данные, которые вы запрашиваете.
Однако вы должны понимать, что Google решил опубликовать только первый фрагмент HTML, и вы должны полностью осознавать последствия этого.
Почему это плохая идея
Во-первых, в дальнейшем никаких обещаний нет. Этот HTML-код под значком </>
будет работать до тех пор, пока Google не решит отключить встраивание Trends, потому что они должны поддерживать сайты, которые решили использовать этот фрагмент, и забыть обо всем этом. Но содержимое вызываемого скрипта, URL-адрес встроенной HTML-страницы или структура HTML могут меняться всякий раз, когда Google сочтет нужным. Код выше может перестать работать завтра.
Во-вторых, Google решил, что они не хотят, чтобы люди вызывали этот URL напрямую. Вы можете это сделать, хотя общепризнанные правила говорят, что не следует. Если вы все же решили это сделать, то не стоит злоупотреблять этим. Можно только догадываться, что считается «злоупотреблением».
Незначительные улучшения кода R
Вернемся к коду R. Я вызвал функцию html_text()
вместо html_table()
. Это потому, что html_nodes()
возвращает список из <span>
элементов, а не <table>
элементов.
person
Mirek Długosz
schedule
28.12.2015
GTrendsR
? - person Mirek Długosz   schedule 28.12.2015gtrendsR
не предоставляет лучшие поисковые запросы для категории. - person kanimbla   schedule 28.12.2015