R语言如何遍历查询词列表批量调用Bing新闻搜索API获取数据
错误原因
- 变量赋值逻辑错误:
queryString[i]、response[i]、df[i]是普通向量的元素赋值逻辑,但你需要存储的请求参数、响应对象都是列表结构,需要提前将变量初始化为列表,且用[[i]]做列表元素赋值,否则会触发长度不匹配的警告,导致后续响应对象不合法,调用content()时报错。 - 查询词取值错误:
q = "[i]"是将固定字符串"[i]"作为查询词,没有实际读取查询词列表中的对应值。 - 语法缺失:你给出的循环代码末尾缺少闭合的
}。
循环版正确实现
library(httr) library(jsonlite) # 配置参数 API_KEY <- "替换为你自己的RapidAPI密钥" querylist <- c("query1","query2", "query3") url <- "https://bing-news-search1.p.rapidapi.com/news/search" # 提前初始化存储结果的列表 result_list <- list() for (i in seq_along(querylist)) { # 构造当前查询的参数 current_query <- list( q = querylist[i], safeSearch = "Off", textFormat = "Raw", freshness = "Month" ) # 发起请求 response <- VERB("GET", url, add_headers( 'x-bingapis-sdk' = "true", 'x-rapidapi-host' = "bing-news-search1.p.rapidapi.com", 'x-rapidapi-key' = API_KEY ), query = current_query, content_type("application/octet-stream") ) # 解析返回结果,提取新闻条目 res_json <- content(response, "text") |> fromJSON() result_list[[i]] <- res_json$value # 可选:添加1秒延迟避免触发API限流 Sys.sleep(1) } # 合并所有查询结果为统一数据框 final_df <- do.call(rbind, result_list)
更优实现:purrr向量化迭代
无需手动处理循环索引和赋值,代码更简洁易维护:
library(htTR) library(jsonlite) library(purrr) # 配置参数 API_KEY <- "替换为你自己的RapidAPI密钥" querylist <- c("query1","query2", "query3") url <- "https://bing-news-search1.p.rapidapi.com/news/search" # 定义单查询的请求函数 get_bing_news <- function(keyword) { current_query <- list( q = keyword, safeSearch = "Off", textFormat = "Raw", freshness = "Month" ) response <- VERB("GET", url, add_headers( 'x-bingapis-sdk' = "true", 'x-rapidapi-host' = "bing-news-search1.p.rapidapi.com", 'x-rapidapi-key' = API_KEY ), query = current_query, content_type("application/octet-stream") ) res_json <- content(response, "text") |> fromJSON() Sys.sleep(1) return(res_json$value) } # 批量迭代查询,直接合并为数据框 final_df <- map_dfr(querylist, get_bing_news)
内容的提问来源于stack exchange,提问作者Evan C
相关产品推荐
相关产品推荐

