使用RSelenium抓取谷歌知识图谱(RHS)元素的问题排查
抓取谷歌搜索右侧知识图谱(RHS)链接的RSelenium解决方案
先锁定RHS根容器,避免抓取左侧结果
谷歌知识图谱的右侧区域有专属的容器节点,先定位这个容器,后续所有元素查找都基于它,就能彻底和左侧主搜索结果划清界限。用XPath定位比类名更稳定(毕竟谷歌常改类名):
library(RSelenium) # 初始化会话(根据你的驱动配置调整端口和浏览器) remDr <- remoteDriver(port = 4445L, browserName = "chrome") remDr$open() # 搜索目标关键词 remDr$navigate("https://www.google.com/search?q=你的目标关键词") # 等待页面加载 Sys.sleep(3) # 定位RHS根容器(XPath适配当前谷歌页面结构,若失效可F12重新确认) rhs_container <- remDr$findElement(using = "xpath", value = "//div[contains(@class, 'kp-blk') and contains(@class, 'c2xzTb')]")
针对性抓取你需要的链接
从锁定的RHS容器内,分别抓取不同类型的链接:
- 维基百科简介链接
直接筛选容器内包含维基域名的a标签:
wiki_links <- rhs_container$findElements(using = "xpath", value = ".//a[contains(@href, 'wikipedia.org')]") wiki_urls <- sapply(wiki_links, function(elem) elem$getElementAttribute("href"))
- 个人/官方网站链接
这类链接一般在RHS的「网站」模块里,定位模块内的a标签即可:
official_links <- rhs_container$findElements(using = "xpath", value = ".//div[contains(@class, 'QqG1Sd')]//a") official_urls <- sapply(official_links, function(elem) elem$getElementAttribute("href"))
- 社交媒体外链
以Twitter为例,筛选容器内对应社交域名的链接,其他平台同理替换域名:
twitter_links <- rhs_container$findElements(using = "xpath", value = ".//a[contains(@href, 'twitter.com')]") twitter_urls <- sapply(twitter_links, function(elem) elem$getElementAttribute("href"))
重要提示
- 谷歌页面结构会不定期更新,如果上述XPath失效,直接用浏览器F12查看RHS容器的最新属性,调整定位符
- 所有子元素查找都用相对XPath(开头带
.),确保只在RHS容器内搜索 - 遇到页面加载慢的情况,延长
Sys.sleep()的时间,或者用remDr$waitForElement()等待容器加载完成
内容的提问来源于stack exchange,提问作者Manfredo
相关产品推荐
相关产品推荐

