使用rvest爬取含data_table类网页的tbody返回空列表求助
解决动态表格爬取的tbody空列表问题
问题原因
目标网页的表格数据是通过JavaScript动态渲染生成的,read_html()只能获取页面初始的静态HTML,此时<tbody>标签内还未填充数据,所以XPath查询会返回空列表。
解决方案
方案1:直接抓取整个表格(无需指定tbody)
rvest的html_table()函数可自动解析整个表格结构,无需定位到<tbody>,直接选择表格节点即可:
library(dplyr) library(rvest) link <- "https://www.mariokartcentral.com/mkc/registry/players" page <- read_html(link) # 直接定位表格节点,跳过tbody层级 table_data <- page %>% html_node('#players_list table') %>% html_table(fill = TRUE) # 查看前几行数据 head(table_data)
方案2:模拟浏览器渲染动态内容(适用于滚动/异步加载的表格)
如果表格数据是滚动页面后异步加载的,需要用RSelenium模拟浏览器运行JavaScript,获取完整渲染后的页面:
library(RSelenium) library(rvest) library(dplyr) # 启动Chrome浏览器驱动(需提前安装对应版本的ChromeDriver) driver <- rsDriver(browser = "chrome", port = 4567L) remote_driver <- driver[["client"]] # 访问目标页面 remote_driver$navigate("https://www.mariokartcentral.com/mkc/registry/players") # 获取渲染完成的页面源码 page_source <- remote_driver$getPageSource()[[1]] page <- read_html(page_source) # 提取表格数据 table_data <- page %>% html_node('#players_list table') %>% html_table(fill = TRUE) head(table_data) # 关闭浏览器与驱动 remote_driver$close() driver$server$stop()
内容的提问来源于stack exchange,提问作者Quinten
相关产品推荐
相关产品推荐

