You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言抓取谷歌搜索结果返回元素为空问题求助

问题原因

  • 直接请求谷歌搜索地址未携带合法请求头,触发谷歌反爬机制,返回的不是正常搜索结果页面,因此定位不到目标元素
  • 所用XPath路径格式错误(开头多写了1个斜杠,应为//而非///),且使用全绝对路径依赖谷歌页面临时结构,谷歌页面结构更新后就会失效
  • 未针对“埃菲尔铁塔”相关内容做筛选逻辑

修正后可运行代码

# 加载依赖包
library(rvest)
library(httr)
library(stringr)

# 构造搜索链接
search_key <- "most popular place in france"
url <- paste0("https://www.google.com/search?q=", URLencode(search_key))

# 携带模拟浏览器的请求头发送请求,规避反爬
res <- GET(url, add_headers(
  `User-Agent` = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
))
first_page <- read_html(res)

# 用更稳定的元素属性定位搜索结果的标题和摘要
titles <- html_nodes(first_page, xpath = '//h3[contains(@class, "LC20lb")]') %>% 
  html_text(trim = TRUE)
contents <- html_nodes(first_page, xpath = '//div[contains(@class, "VwiC3b")]') %>% 
  html_text(trim = TRUE)

# 筛选包含埃菲尔铁塔的结果,兼顾中英文关键词
target_results <- str_subset(c(titles, contents), "Eiffel Tower|埃菲尔铁塔")

print(target_results)

注意事项

  • 谷歌反爬策略会动态更新,请求频率不要太高,否则容易被封禁IP
  • 页面元素的class属性会不定期调整,如果再次出现返回空的情况,可以打开谷歌搜索页按F12重新查看目标元素的对应属性
  • 如果需要抓取中文结果,可以在请求头里加上Accept-Language: zh-CN,zh;q=0.9,返回的内容会以中文为主,筛选关键词直接用埃菲尔铁塔即可

内容的提问来源于stack exchange,提问作者mmorelli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 06:06:03