如何从SerpApi页面提取query数据并转为R单列数据框?
解决SerpApi谷歌趋势页面提取query关键词的问题
问题原因
你之前的代码返回NA,是因为html_attr("query")试图提取HTML元素的query属性,但页面中没有任何元素带有这个属性。SerpApi的谷歌趋势相关查询数据要么嵌入在页面的可视元素文本中,要么以JSON格式存储在页面的脚本标签内,需要针对性提取。
解决方案
提供两种可靠的提取方式:
方法一:直接提取页面中的可视查询文本
通过定位页面中展示相关查询的HTML元素,提取其文本内容:
library(rvest) library(dplyr) # 读取目标页面 allcom <- read_html("https://serpapi.com/search.html?engine=google_trends&q=coffee&data_type=RELATED_QUERIES&cat=0&date=now+7-d&api_key=317da75462cab4790705a5cf8b6a9c74c9ba9f279150afb87d4b191f95d8d5de") # 定位所有包含query的元素,提取文本 queries <- allcom %>% html_elements(".related-query-item .query") %>% html_text2() # 转换为单列数据框 query_df <- data.frame(query = queries) # 查看结果 print(query_df)
方法二:从页面嵌入的JSON数据提取(更稳定)
SerpApi会将API返回的完整数据以JSON格式嵌入页面的脚本标签中,解析这个JSON可以直接获取所有相关查询:
library(rvest) library(jsonlite) library(dplyr) # 读取目标页面 allcom <- read_html("https://serpapi.com/search.html?engine=google_trends&q=coffee&data_type=RELATED_QUERIES&cat=0&date=now+7-d&api_key=317da75462cab4790705a5cf8b6a9c74c9ba9f279150afb87d4b191f95d8d5de") # 提取存储API数据的脚本内容 json_content <- allcom %>% html_element("#__NEXT_DATA__") %>% html_text() # 解析JSON数据 parsed_data <- fromJSON(json_content) # 提取Top和Rising两类查询的关键词 top_queries <- parsed_data$props$pageProps$search_metadata$raw_html %>% fromJSON() %>% pluck("related_queries", "top") %>% pull(query) rising_queries <- parsed_data$props$pageProps$search_metadata$raw_html %>% fromJSON() %>% pluck("related_queries", "rising") %>% pull(query) # 合并所有关键词并转为数据框 all_queries <- c(top_queries, rising_queries) query_df <- data.frame(query = all_queries) # 查看结果 print(query_df)
内容的提问来源于stack exchange,提问作者kangBaca
相关产品推荐
相关产品推荐

