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

如何使用rvest获取谷歌搜索结果中的超链接

解决rvest获取谷歌搜索结果链接的问题

你的代码返回全NA的核心原因是:XPath选中了<h3>元素,但<h3>本身没有href属性——搜索结果的链接属性是在包裹<h3>的<a>标签上的。另外,谷歌会拦截无标识的爬虫请求,需要模拟浏览器UA才能正常获取页面内容。

以下是修正后的代码,可直接将搜索结果的标题和对应链接存入dataframe:

library(rvest)
library(tidyverse)
library(httr)

# 设置浏览器请求头,避免被谷歌反爬拦截
headers <- 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"
)

# 目标搜索URL
url <- 'https://www.google.com/search?q=Mario+Torres+Mexico'

# 获取页面内容
first_page <- GET(url, headers) %>% read_html()

# 提取标题、原始跳转链接和清理后的真实链接
search_results <- first_page %>%
  # 定位到包含搜索结果的容器,选中包裹h3的a标签
  html_elements(xpath = "//div[contains(@class, 'g')]//a[h3]") %>%
  transmute(
    # 提取结果标题
    result_title = html_element(., "h3") %>% html_text(),
    # 提取谷歌的跳转链接
    raw_google_link = html_attr(., "href"),
    # 从跳转链接中提取真实目标URL
    clean_target_link = str_extract(raw_google_link, "^/url\\?q=([^&]+)") %>% 
      str_remove("^/url\\?q=")
  )

# 查看最终结果
print(search_results)

关键说明:

  • 请求头设置:谷歌会拦截默认的rvest爬虫标识,添加浏览器UA能绕过基础反爬机制
  • XPath调整://div[contains(@class, 'g')]//a[h3] 精准定位到每个搜索结果的链接载体(包含h3的a标签),避免选中无关链接
  • 链接清理:谷歌返回的href是跳转格式(/url?q=真实链接&参数),通过字符串处理提取出真正的目标URL

如果后续谷歌调整页面结构导致XPath失效,可通过浏览器右键「检查」功能查看当前DOM结构,对应调整选择器即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 11:20:27