我正在尝试访问谷歌搜索右侧的元素,有时称为知识图。我特别对简短的个人简介(通常是维基百科片段)以及个人网站和社交媒体链接的外部链接感兴趣。
似乎可以直接使用 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。
我最终找到的解决方案是切换到
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/"