JSON применяется над фреймом данных в R

Я использовал ниже на одном сайте, и он дал отличный результат:

ищем ключевое слово: Emaar вставляется в конце запроса:

library(httr)
library(jsonlite)



query<-"https://www.googleapis.com/customsearch/v1?key=AIzaSyA0KdZHRkAjmoxKL14eEXp2vnI4Yg_po38&cx=006431301429107149113:as7yqcm2qc8&q=Emaar"

result11 <- content(GET(query))
print(result11)
result11_JSON <- toJSON(result11)
result11_JSON <- fromJSON(result11_JSON)
result11_df <- as.data.frame(result11_JSON)

Теперь я хочу применить ту же функцию к data.frame, содержащему ключевые слова:

поэтому я сделал тестирование файла.csv ниже:

     Company Name
[1]  ADES International Holding Ltd
[2]  Emirates REIT (CEIC) Limited
[3]  POLARCUS LIMITED

назвал это Тестирование сайта Extraction.csv

используемый код:

test_companies <- read.csv("... \\Testing Website Extraction.csv")

#removing space and adding "+" sign then pasting query before it (query already has my unique google key and search engine ID
test_companies$plus <- gsub(" ", "+", test_companies$Company.Name)


query <- "https://www.googleapis.com/customsearch/v1?key=AIzaSyCmD6FRaonSmZWrjwX6JJgYMfDSwlR1z0Y&cx=006431301429107149113:as7yqcm2qc8&q="

test_companies$plus <- paste0(query, test_companies$plus)

a <- test_companies$plus
length(a)
function_webs_search <- function(web_search) {content(GET(web_search))}



result <- lapply(as.character(a), function_webs_search)

Здесь результат показывает список длины 3 (3 условия поиска) и подсписок внутри каждого термина, содержащий: url (список [2]), запросы (список [2]), ... элементы (список [10]), и это то же самое для каждого поискового запроса (одинаковой длины отдельно), моя проблема здесь заключается в применении оставшейся части кода

#when i run:
result_JSON <- toJSON(result)
result_JSON <- as.list(fromJSON(result_JSON))

Я получаю список из 6 списков, в которых есть подсписки

и поместить его в аккуратный фрейм данных, где результаты перечислены друг под другом (не отдельно), оказывается трудным

Также обратите внимание, что я попытался взять из списка "результат", который имеет 3 отдельных списка в каждом из них, но это много ручного труда, если у меня есть более длинный список ключевых слов

Ожидаемый конечный результат должен включать 30 наблюдений по 37 переменным (для каждого поискового термина 10 наблюдений по 37 переменным, и все они находятся друг под другом.

Вещи, которые я попытался безуспешно:

These work to flatten the list:
#do.call(c , result)
#all.equal(listofvectors, res, check.attributes = FALSE)
#unlist(result, recursive = FALSE)
# for (i in 1:length(result))  {listofvectors <- c(listofvectors, result[[i]])}
#rbind()
#rbind.fill()

даже после сглаживания я не знаю, как организовать их в аккуратный окончательный вывод для взаимодействия с пользователем, не являющимся пользователем R.

Любая помощь здесь будет принята с благодарностью,

Я здесь на случай, если что-то не понятно по моему вопросу,

Всегда рад узнать больше о R, поэтому, пожалуйста, потерпите меня, потому что я только начинаю догонять.

Всего наилучшего и заранее спасибо!

1 ответ

По сути, я извлек только те столбцы, которые мне нужны, из списка данных, ниже приведен окончательный код:

library(httr)
library(jsonlite)
library(tidyr)
library(stringr)
library(purrr)
library(plyr)


test_companies <- read.csv("c:\\users\\... Companies Without Websites List.csv")

test_companies$plus <- gsub(" ", "+", test_companies$Company.Name)


query <- "https://www.googleapis.com/customsearch/v1?key=AIzaSyCmD6FRaonSmZWrjwX6JJgYMfDSwlR1z0Y&cx=006431301429107149113:as7yqcm2qc8&q="

test_companies$plus <- paste0(query, test_companies$plus)

a <- test_companies$plus
length(a)
function_webs_search <- function(web_search) {content(GET(web_search))}



result <- lapply(as.character(a), function_webs_search)

function_toJSONall <- function(all) {toJSON(all)}

a <- lapply(result, function_toJSONall)


function_fromJSONall <- function(all) {fromJSON(all)}

b <- lapply(a, function_fromJSONall)


function_dataframe <- function(all) {as.data.frame(all)}

c <- lapply(b, function_dataframe)

function_column <- function(all) {all[ ,15:30]}

result_final <- lapply(c, function_column)

results_df <- rbind.fill(c[])
Другие вопросы по тегам