Веб-очистка файлов json в R

#r #json #web-scraping

Вопрос:

Я пытаюсь удалить общедоступные данные с веб-сайта УВКБ ООН https://data2.unhcr.org/en/situations/mediterranean#
Я хочу загрузить все данные с расширением json. Ссылки на данные выделены желтым цветом, и вы можете увидеть ниже

введите описание изображения здесь

Чтобы сделать это, я начал с кода, но понятия не имею, как его обработать.

 library(jsonlite)
url <- 'https://data2.unhcr.org/en/situations/mediterranean#'


# Removes last character, i.e. amp;
url <- substr(url, 1, nchar(url)-1)

# Encodes URL to avoid errors
url <- URLencode(url)

# Extracts JSON from URL
json_extract <- fromJSON(url)

# Converts relevant list into a data.frame
df <- data.frame(json_extract[['items']])
 

Итак, может ли кто-нибудь помочь мне с кодом, как загрузить эти данные в таблицу, подобную таблице ниже

введите описание изображения здесь

Ответ №1:

Щелкните правой кнопкой мыши на странице и выберите «Проверить». Затем перейдите на вкладку «Сеть». Нажмите на одну из кнопок JSON, и вы увидите, как отобразится выполняемый запрос. Это URL-адрес, который вам нужно использовать.

 url <- 'https://data2.unhcr.org/population/get/timeseries'
query <- '?widget_id=267293amp;sv_id=11amp;population_group=4797,4798amp;frequency=monthamp;fromDate=2015-01-01'

# Extracts JSON from URL
json_extract <- fromJSON(paste0(url, query))

# Extracts data.frame from list (there might be other info in the list you want too)
df <- json_extract$data$timeseries

# Others
# https://data2.unhcr.org/population/?widget_id=267298amp;sv_id=11amp;population_group=4797,4798amp;year=latest # Total Arrivals
# https://data2.unhcr.org/population/?widget_id=267299amp;sv_id=11amp;population_group=4797amp;year=latest # Sea Arrivals
 

Дает:

 tail(df)
   month year unix_timestamp individuals
76     5 2021     1622160000        9401
77     6 2021     1624838400        9245
78     7 2021     1627430400       12565
79     8 2021     1630108800       15749
80     9 2021     1632787200       16052
81    10 2021     1635379200        1902