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
相关产品推荐
相关产品推荐

