используя rvest для очистки веб-страницы - PullRequest
0 голосов
/ 13 сентября 2018

Я пытаюсь почистить таблицу времен высшего образования

ссылка

Я использовал следующий код, но в результате получается пустая таблица.Что я делаю не так?

pacman::p_load(rvest)

webpage <- read_html(paste0('https://www.timeshighereducation.com/rankings/', 
                            'united-states/2018#!/page/0/length/-1/sort_by/', 
                            'stats_salary/sort_order/desc/cols/stats'))


d <- html_nodes(webpage, xpath = '//table') %>% 
  html_table()

d

[[1]]
 [1] rank order           Rank                  Name                  Node ID              
 [5] Overall                                     Resources                                  
 [9] Engagement                                  Outcomes                                   
[13] Environment                                                                            
[17]                                                                                        
[21] Tuition and Fees      Room and Board        Salary after 10 years
<0 rows> (or 0-length row.names)

1 Ответ

0 голосов
/ 14 сентября 2018

Я нашел данные!Оказывается, что timeshighereducation.com использует javascript для вызова данных, поэтому использование обычной процедуры rvest не будет работать.

Я нашел ссылку ниже полезной, чтобы увидеть, как работать с веб-страницами, отображающими данные с использованием javascript: rvest и V8

Первым делом я увидел, какой узел возвращает нужный мне скрипт.Это оказалось номер 9 в списках.Затем я преобразовал его в HTML-текст.

t <- html_nodes(webpage, 'script') %>% 
  '['(9) %>% 
  html_text()

После дальнейшей проверки HTML-текста я обнаружил, что внутри скрипта есть файл JSON.И я действительно могу увидеть данные, если наберу URL в Chrome.

Так что, казалось, довольно легко получить данные с помощью многих доступных пакетов R, которые работают с JSON.Я выбрал jsonlite.Это так просто, как только получается, всего 5 строк кода для получения данных.Я сейчас очень счастлив:)

library(jsonlite)
college_json <- fromJSON(paste0(
  'https://www.timeshighereducation.com/sites/default/files/the_data_rankings/', 
  'united_states_rankings_2018_limit0_efdb24148bae97278bbfe6ecfd71cdd9.json'))

college_dat <- college_json$data
...