如何用RSelenium抓取网页全部条目?求正确XPath/CSS定位路径
抓取Ecartico人物条目:RSelenium元素定位方案
需要抓取网页https://www.vondel.humanities.uva.nl/ecartico/persons/index.php?subtask=browse中的全部50个人物条目,现有RSelenium代码但元素定位逻辑有误,以下是可行的定位方案及修正后的完整代码。
可行的元素定位方案
XPath定位(推荐相对路径,稳定性更高)
- 定位所有人物条目:
//ul[@class='itemlist']/li/a
解释:直接定位到类名为itemlist的列表下所有<li>标签内的<a>元素,这是页面中人物条目的统一容器。 - 定位单个条目(比如第N个):
//ul[@class='itemlist']/li[N]/a(将N替换为数字,比如第一个就是li[1])
CSS选择器定位
- 定位所有人物条目:
ul.itemlist li a - 定位单个条目:
ul.itemlist li:nth-child(N) a(N为条目序号)
修正后的完整R代码
rm(list=ls()) library(tidyverse) library(robotstxt) library(rvest) library(RSelenium) library(netstat) library(wdman) # 启动Selenium服务 remote_driver <- rsDriver( browser = "chrome", chromever = "113.0.5672.63", verbose = F, port = free_port() ) # 创建客户端对象并打开浏览器 remDr <- remote_driver$client remDr$open() remDr$maxWindowSize() # 导航到目标网页 remDr$navigate("https://www.vondel.humanities.uva.nl/ecartico/persons/index.php?subtask=browse") # 定位所有人物条目元素 person_elements <- remDr$findElements(using = "xpath", "//ul[@class='itemlist']/li/a") # 提取所有人物条目文本 person_list <- map_chr(person_elements, ~.x$getElementText()[[1]]) # 转换为数据框(可选,方便后续处理) person_df <- tibble(name = person_list) # 输出结果 print(person_df) # 关闭浏览器和服务 remDr$close() remote_driver$server$stop()
补充说明
- 避免使用绝对XPath(比如原代码中的
/html/body/div[2]/div/ul/li[1]/a),这类路径依赖页面DOM的层级结构,一旦页面布局调整就会失效,相对路径的容错性更强。 - 若遇到加载延迟问题,可以添加
Sys.sleep(2)等待页面完全加载后再执行元素定位。 - 抓取完成后务必关闭浏览器和Selenium服务,避免资源占用。
内容的提问来源于stack exchange,提问作者zachi
相关产品推荐
相关产品推荐

