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

基于rvest爬取谷歌搜索内容失效,求适配2022布局的修复方案

修复基于rvest提取谷歌搜索结果的失效代码

问题背景

此前可正常运行的rvest提取谷歌搜索结果标题、文本和链接的代码,现在返回空结果。核心原因有两点:一是谷歌频繁更新搜索页面的HTML结构,旧XPath选择器已不匹配当前元素;二是直接请求未模拟浏览器身份,被谷歌拦截后返回非预期页面内容。

修复方案

1. 模拟浏览器请求

谷歌会拦截无用户代理(User-Agent)的请求,需在read_html中添加浏览器UA头,确保返回正常的搜索结果页面。

2. 更新XPath选择器

根据当前谷歌搜索页面的DOM结构,调整标题、文本和链接的定位路径,匹配最新的结果容器及子节点。

完整修复代码

library(rvest)
library(tidyverse)

# 模拟浏览器的User-Agent,可替换为你常用浏览器的UA字符串
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"

url <- 'https://www.google.com/search?q=Mario+Torres+Mexico'

# 读取页面时添加UA头,避免被拦截
first_page <- read_html(url, user_agent = user_agent)

# 定位每个搜索结果的容器卡片
result_cards <- first_page %>% html_nodes(xpath = "//div[@class='g']")

# 提取标题、链接和描述文本
search_results <- tibble(
  title = result_cards %>% 
    html_node(xpath = ".//h3") %>% 
    html_text(),
  link = result_cards %>% 
    html_node(xpath = ".//a") %>% 
    html_attr("href") %>% 
    str_remove("^/url\\?q=") %>% 
    str_extract("^https.*?(?=&)"),
  text = result_cards %>% 
    html_node(xpath = ".//div[@data-content-feature='1']") %>% 
    html_text()
)

print(search_results)

代码说明

  • User-Agent设置:模拟真实浏览器请求,规避谷歌的反爬拦截
  • 结果容器定位:通过//div[@class='g']定位单个搜索结果的外层容器,这是当前谷歌搜索结果的标准类名
  • 标题提取:直接从容器内的h3节点获取标题文本
  • 链接提取:先获取a标签的href属性,去除谷歌跳转前缀/url?q=后,提取完整的真实链接
  • 描述文本提取:通过div[@data-content-feature='1']定位结果下方的描述文本节点

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:05:34