Продолжение ... Извлечение данных из API с использованием R - PullRequest
0 голосов
/ 07 февраля 2019

Я супер новичок в этом и работаю над R для моей диссертации.Код в этом ответе наконец сработал для меня ( Извлечение данных из API с использованием R ), но я не могу понять, как добавить в него цикл.Я продолжаю получать первую страницу API, когда мне нужны все 3360. Вот код:

    library(httr)
    library(jsonlite)
    r1 <- GET("http://data.riksdagen.se/dokumentlista/? 
    sok=&doktyp=mot&rm=&from=2000-01-01&tom=2017-12- 31&ts=&bet=&tempbet=&nr=&org=&iid=&webbtv=&talare=&exakt=&planering=&sort=rel&sortorder=desc&rapport=&utformat=json&a=s#soktraff")

r2 <- rawToChar(r1$content)

class(r2)
r3 <- fromJSON(r2)

r4 <- r3$dokumentlista$dokument

К тому времени, когда я достигну r4, это уже фрейм данных.

Пожалуйста, и спасибоyou!

Редактировать: изначально я не мог получить URL, на котором была страница как информация.Теперь у меня есть это (ниже).Я до сих пор не смог зациклить это.«http://data.riksdagen.se/dokumentlista/?sok=&doktyp=mot&rm=&from=2000-01-01&tom=2017-12-31&ts=&bet=&tempbet=&nr=&org=&iid=&webbtv=&talare=&exakt=&planering=&sort=rel&sortorder=desc&rapport=&utformat=json&a=s&p="

1 Ответ

0 голосов
/ 07 февраля 2019

Я думаю, что вы можете извлечь URL следующей страницы из r3 следующим образом:

next_url <- r3$dokumentlista$`@nasta_sida`
# you need to re-check this, but sometimes I'm getting white spaces within the url, 
# you may not face this problem, but in any case this line of code solved the issue 
next_url <- gsub(' ', '', n_url)

GET(next_url)

Обновление

Я пробовал URL со страницейчисло с 10 страницами, и это сработало

my_dfs <- lapply(1:10, function(i){
  my_url <- paste0("http://data.riksdagen.se/dokumentlista/?sok=&doktyp=mot&rm=&from=2000-01-01&tom=2017-12-31&ts=&bet=&tempbet=&nr=&org=&iid=&webbtv=&talare=&exakt=&planering=&sort=rel&sortorder=desc&rapport=&utformat=json&a=s&p=", i)
  r1 <- GET(my_url)
  r2 <- rawToChar(r1$content)
  r3 <- fromJSON(r2)
  r4 <- r3$dokumentlista$dokument
  return(r4)
})

Обновление 2:

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

my_dfs %>% lapply(function(df_0){
      # Do some stuff here with the data, and choose the variables you need
      # I chose the first 10 columns to check that I got 200 different observations
      df_0[1:10]
    }) %>% do.call(rbind, .)
...