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[])