使用 Rselenium 抓取 google 知识图谱

问题描述 投票:0回答:1

我正在尝试访问谷歌搜索右侧的元素,有时称为知识图。我特别对简短的个人简介(通常是维基百科片段)以及个人网站和社交媒体链接的外部链接感兴趣。

似乎可以直接使用 SerpAPI 等 API 来完成此操作,但不幸的是它没有集成到 R 中。我尝试使用类、id 和 xpath 来获取 SelectorGadget 的链接,但似乎都不起作用。问题似乎是,无论我做什么,我总是会得到 URL 的总列表(包括 lhs 上主搜索页面中的 URL)。


rD = rsDriver(browser="chrome", chromever = "123.0.6312.105", verbose = F, port = free_port(), check = FALSE)
  remDr <- rD[["client"]]
  goto_url = paste("https://www.google.com/search?q=", URLencode("Paolo Giordano"))
  remDr$navigate(goto_url)
  
  # Accept cookies
  remDr$switchToFrame("ect-cookie-dialog")
  btn1 <- remDr$findElement(using = "id", 'L2AGLb')
  btn1$clickElement()
  
  webElem <- remDr$findElement(using = "css selector", ".kno-rdesc")  # Adjust this selector based on the actual content class
  bio_snippet <- webElem$getElementText()[[1]]
  bio_snippet <- gsub("^Description\\s+|\\s+Wikipedia$", "", bio_snippet)
  # this is ok 
    
  rhs = remDr$findElement(using = "id", "rhs")
  links = rhs$findElement(using = "class", "sATSHe")
  
  page_source = links$getPageSource()
  html_source = read_html(page_source |> unlist())
  
  
  html_source |> html_elements("a") |> html_attr("href")

根据这段代码,我最终得到了大约 150 个网址,而不是我期望的 3 或 4 个网址,这就是谷歌搜索中出现的所有网址。我尝试过使用不同的选择器,例如

remDr$findElements(using = "css selector", ".sATSHe a")

 rhs <- remDr$findElement(using = "xpath", '//*[@id="_yngnZt_vD6K8i-gPgYa10AI_55"]/div/div/div[2]/div/div/div[1]/div/g-link/a')

但似乎没有一个能够隔离 RHS。

r web-scraping rvest rselenium
1个回答
0
投票

我最终找到的解决方案是切换到

rvest
进行html解析:

  page_source = remDr$getPageSource()
  html_page = read_html(page_source[[1]])
  results = html_page |> html_elements(".kno-vrt-t") |> html_elements("a") |> html_attr("href")

此结果正确

> results
[1] "https://twitter.com/paologiordano"           "https://www.instagram.com/pg_paologiordano/"
© www.soinside.com 2019 - 2024. All rights reserved.