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

使用R语言rvest包获取谷歌搜索首个非广告链接的报错排查

修复谷歌搜索首个非广告链接获取失败的问题

问题根源

你代码里的html_nodes(".g:not(.g .adsbygoogle)")写法错误,CSS的:not()伪类内部不能直接嵌套这种后代选择器写法,rvest依赖的CSS解析器无法识别,导致抛出Expected ')', got .的语法错误。

修复方案

  1. 修正CSS选择器:使用:has()伪类筛选不包含广告元素的.g容器,这是判断父元素是否存在特定子元素的标准写法。
  2. 处理中转链接:谷歌搜索结果的href会带有/url?q=的跳转前缀,需要提取其中的真实链接地址,仅用URLdecode()无法完成这一步。

完整修复代码

library(rvest)
library(stringr)

url <- "https://www.google.com/search?q=Kendrick+Lamar+aoty"

search_page <- read_html(url)

first_link <- search_page %>%
  # 筛选不包含.adsbygoogle子元素的.g容器
  html_nodes(".g:not(:has(.adsbygoogle))") %>%
  html_node("a") %>%
  html_attr("href") %>%
  # 提取/url?q=后的真实链接,去除后续&参数
  str_extract("(?<=/url\\?q=)[^&]+") %>%
  URLdecode()

print(first_link)

关键说明

  • 替换后的选择器.g:not(:has(.adsbygoogle))精准筛选出不含广告模块的搜索结果块,避免了解析语法错误。
  • 通过str_extract提取真实链接,解决了谷歌搜索链接的中转跳转问题,最终能得到预期的https://www.albumoftheyear.org/artist/1881-kendrick-lamar/。

内容的提问来源于stack exchange,提问作者J.Q

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 05:15:12