Извлечь элемент со страницы html в R - PullRequest
1 голос
/ 24 марта 2020

Я новичок в R и пытаюсь почистить данные карты со следующей веб-страницы: https://www.svk.se/en/national-grid/the-control-room/. Карта называется «Поток электричества». Я пытаюсь очистить номера емкости (синим цветом) и соответствующие страны. До сих пор я не мог найти решение о том, как найти названия стран в коде HTML и, следовательно, очистить их.

Вот пример нужных мне данных: enter image description here

У вас есть идеи?

Заранее большое спасибо.

Ответы [ 2 ]

2 голосов
/ 24 марта 2020

Данных нет в таблице, поэтому нам нужно извлечь всю информацию по отдельности.

Вот способ сделать это, используя rvest.

library(rvest)
url <-'https://www.svk.se/en/national-grid/the-control-room/'

webpage <- url %>% read_html() %>%html_nodes('div.island')

tibble::tibble(country = webpage %>% html_nodes('span.country') %>% html_text(),
                watt = webpage %>% html_nodes('span.watt') %>% html_text() %>% 
                         gsub('\\s', '', .) %>% as.numeric(),
                unit = webpage %>% html_nodes('span.unit') %>% html_text())


#  country    watt unit 
#  <chr>     <dbl> <chr>
#1 SWEDEN     3761 MW   
#2 DENMARK     201 MW   
#3 NORWAY     2296 MW   
#4 FINLAND    1311 MW   
#5 ESTONIA     632 MW   
#6 LATVIA      177 MW   
#7 LITHUANIA  1071 MW   
0 голосов
/ 27 марта 2020

Потоковые данные поступают из вызова API, поэтому вам нужно сделать дополнительный xhr (URL-адрес, который вы можете найти на вкладке сети с помощью инструментов dev), чтобы получить эти данные. Вам не нужно указывать значения для метки времени (Ticks) и случайных (rnd) параметров в строке запроса.

library(jsonlite)

data <- jsonlite::read_json('https://www.svk.se/Proxy/Proxy/?a=http://driftsdata.statnett.no/restapi/PhysicalFlowMap/GetFlow?Ticks=&rnd=')

В качестве кадра данных:

library(jsonlite)
library (plyr)

data <- jsonlite::read_json('https://www.svk.se/Proxy/Proxy/?a=http://driftsdata.statnett.no/restapi/PhysicalFlowMap/GetFlow?Ticks=&rnd=')

df <- ldply (data, data.frame)
...