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

R语言网页爬取Google搜索URL返回character(0)求助

解决Google搜索结果爬取返回character(0)的问题

嘿,我来帮你排查这个问题!你得到character(0)的结果,主要是两个核心原因:Google的页面结构已经更新,以及你的请求被反爬机制拦截了,咱们一步步来修复:

1. 先处理反爬拦截问题

Google会检测请求的User-Agent,默认rvest的请求头会被识别为机器人,导致返回的页面不是正常的搜索结果(可能是空白页或验证页)。所以咱们需要模拟浏览器的请求头:

首先加载httr包来设置请求头,然后发送请求:

library(rvest)
library(httr)

# 构造模拟浏览器的请求头,你可以换成自己浏览器的User-Agent
headers <- add_headers(
  "User-Agent" = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36"
)

# 发送带请求头的请求,解析页面
r_h <- GET(
  url = "https://www.google.com/search?q=google&oq=google&aqs=chrome.0.69i59j0l2j69i60l2j69i65.1101j0j7&sourceid=chrome&ie=UTF-8",
  config = headers
) %>% content(as = "parsed")

2. 更新页面选择器

你之前用的.iUh30类名已经被Google废弃了,现在搜索结果的URL是放在div.g(每个搜索结果的容器)下的<a>标签的href属性里,而且这些href会带有/url?q=的前缀,需要进一步提取真实URL:

# 提取所有搜索结果的a标签href
raw_links <- r_h %>% html_nodes("div.g a") %>% html_attr("href")

# 过滤并提取真实URL:只保留带/url?q=前缀的链接,去掉多余参数并解码
clean_links <- raw_links[grepl("^/url\\?q=", raw_links)] %>%
  sub("^/url\\?q=(.*?)&.*", "\\1", .) %>% # 提取?q=后面到第一个&的内容
  URLdecode() # 解码URL中的特殊字符(比如%2F代表/)

# 查看结果
print(clean_links)

额外提醒

  • Google的反爬机制很严格,不要频繁发送请求,否则你的IP可能会被临时封禁;
  • 如果需要大规模爬取搜索结果,建议使用Google官方的Custom Search API,这是合规且稳定的方式;
  • 页面结构可能会再次更新,要是以后又出现类似问题,记得用浏览器的开发者工具(F12)查看最新的元素选择器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 07:46:53