tutorial scraping hacer example espaƱol con como r api loops

scraping - API Query para bucle



web scraper python 3 (1)

La primera parte de esto:

library(jsonlite) library(httr) library(lubridate) library(tidyverse) base_url <- "http://api.kuroganehammer.com" res <- GET(url = base_url, path = "api/characters") content(res, as="text", encoding="UTF-8") %>% fromJSON(flatten=TRUE) %>% as_tibble() -> chars

Te da un marco de datos de los personajes.

Esta:

pb <- progress_estimated(length(chars$id)) map_df(chars$id, ~{ pb$tick()$print() Sys.sleep(sample(seq(0.5, 2.5, 0.5), 1)) # be kind to the free API res <- GET(url = base_url, path = sprintf("api/characters/%s/detailedmoves", .x)) content(res, as="text", encoding="UTF-8") %>% fromJSON(flatten=TRUE) %>% as_tibble() }, .id = "id") -> moves

Obtiene un marco de datos de todos los "movimientos" y agrega el "id" para el personaje. También obtienes una barra de progreso gratis.

A continuación, puede left_join() según sea necesario o agrupar y anidar los datos de movimientos en una columna nido de listas por separado. Si quieres eso para empezar, puedes usar map() vs map_df() .

Déjalo en el código de pausa de tiempo. Es una API gratuita y es probable que aumente los tiempos de pausa para evitar hacer su sitio.

Estoy tratando de extraer algunos datos de una API para incluirlos en un único marco de datos. Intento poner una variable en la URL desde la que estoy extrayendo y luego recorrerla para extraer datos de 54 claves. Esto es lo que tengo hasta ahora con notas.

library("jsonlite") library("httr") library("lubridate") options(stringsAsFactors = FALSE) url <- "http://api.kuroganehammer.com" ### This gets me a list of 58 observations, I want to use this list to ### pull data for each using an API raw.characters <- GET(url = url, path = "api/characters") ## Convert the results from unicode to a JSON text.raw.characters <- rawToChar(raw.characters$content) ## Convert the JSON into an R object. Check the class of the object after ## it''s retrieved and reformat appropriately characters <- fromJSON(text.raw.characters) class(characters) ## This pulls data for an individual character. I want to get one of ## these for all 58 characters by looping this and replacing the 1 in the ## URL path for every number through 58. raw.bayonetta <- GET(url = url, path = "api/characters/1/detailedmoves") text.raw.bayonetta <- rawToChar(raw.bayonetta$content) bayonetta <- fromJSON(text.raw.bayonetta) ## This is the function I tried to create, but I get a lexical error when ## I call it, and I have no idea how to loop it. move.pull <- function(x) { char.x <- x raw.x <- GET(url = url, path = cat("api/characters/",char.x,"/detailedmoves", sep = "")) text.raw.x <- rawToChar(raw.x$content) char.moves.x <- fromJSON(text.raw.x) char.moves.x$id <- x return(char.moves.x) }