在R中获取具有‘rvest’包的搜索结果的第一链接

yquaqz18  于 2023-04-18  发布在  其他
关注(0)|答案(1)|浏览(94)

注意:此问题并不违反Google的服务条款。用例和目的符合ToS。
对象url是一个存储URL的原子字符向量:
url <- "https://www.google.com/search?q=Kendrick+Lamar+aoty"
我需要获取Google搜索结果返回的第一个非广告链接,并将其存储为对象link。下面是我现在要做的:

library(rvest)

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

search_page <- read_html(url)

first_link <- search_page %>%
  html_nodes(".g:not(.g .adsbygoogle)") %>%
  html_node("a") %>%
  html_attr("href") %>%
  URLdecode()

我得到以下错误:
Error in parse_simple_selector(stream) : Expected ')', got .
这个问题看起来像是我对html_nodes()函数的调用。我已经用几种方法修改了CSS分类器,但没有成功解决这个错误。我希望根据上面的例子存储在first_link对象中的结果是:
https://www.albumoftheyear.org/artist/1881-kendrick-lamar/
我在html_nodes()函数上做错了什么(或者如果我想得到如上所示的期望输出,我遗漏了其他东西)?

vngu2lb8

vngu2lb81#

这个解决方案对你有好处吗?

library(rvest)

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

links <- search_page |> 
  html_elements("a") |> 
  html_attr("href") 
  
i <- stringr::str_detect(links, "url\\?q\\=")
out <- stringr::str_extract(links[i], "https.*?(?=\\&)")

out

相关问题