Как мне webscrape .dpbox таблицу с помощью selectorgadget с R (rvest)?

Я пытался скопировать данные с определенного веб-сайта с помощью selectorgadget в R. Например, я успешно перешел на веб-страницу с http://www.dotabuff.com/heroes/abaddon/matchups раньше. Обычно я просто нажимаю на таблицы, которые хочу использовать расширение Chrome selectorgadget, и помещаю результат выбора CSS в код следующим образом.

urlx <- "http://www.dotabuff.com/heroes/abaddon/matchups"
rawData <- html_text(html_nodes(read_html(urlx),"td:nth-child(4) , td:nth-child(3), .cell-xlarge"))

В этом случае функция html_nodes возвращает целую группу узлов (340)

{xml_nodeset (340)}

Однако, когда я пытаюсь перейти на сайт http://www.dotapicker.com/heroes/Abaddon используя selectorgadget, который оказывается таким кодом:

urlx <- "http://www.dotapicker.com/heroes/abaddon"
rawData <- html_text(html_nodes(read_html(urlx),".ng-scope:nth-child(1) .ng-scope .ng-binding"))

К сожалению, после вызова функции html_nodes на самом деле никакие узлы не появляются, и я получаю результат

{xml_nodeset (0)}

Я чувствую, что это как-то связано с вложением таблицы в раскрывающийся список (по сравнению с предыдущим, таблица была прямо на самой веб-странице), но я не знаю, как это обойти.

Спасибо, и я ценю любую помощь!


person Tan Yi Zu    schedule 02.09.2017    source источник


Ответы (1)


Кажется, что эта страница динамически загружает некоторые данные с помощью XHR. В Chrome вы можете проверить это, перейдя в режим проверки, а затем на вкладку сети. Если вы это сделаете, вы увидите, что загружается несколько файлов json. Вы можете напрямую очистить эти файлы json, а затем проанализировать их, чтобы извлечь нужную информацию. Вот краткий пример:

library(httr)
library(jsonlite)

heroinfo_json <- GET("http://www.dotapicker.com/assets/json/data/heroinfo.json")
heroinfo_flat <- fromJSON(content(heroinfo_json, type = "text"))
#> No encoding supplied: defaulting to UTF-8.

winrates_json <- GET("http://www.dotapicker.com/assets/dynamic/winrates10d.json")
winrates_flat <- fromJSON(content(winrates_json, type = "text"))
#> No encoding supplied: defaulting to UTF-8.
person LVG77    schedule 02.09.2017