使用Rvest与XPath提取临床试验网页表格遇阻求助
解决Rvest抓取ClinicalTrials.gov历史表格的问题
问题分析
你用Chrome复制的XPath包含了ctg-card、ctg-history-changes-table这类动态生成的自定义HTML标签,这些标签是页面加载后通过JavaScript渲染出来的,而read_html获取的是服务器返回的初始静态HTML,根本不存在这些标签,所以XPath匹配不到目标元素,导致代码无法运行。
解决方案
改用避开动态标签的通用选择器,直接定位目标表格的父容器或表格本身,以下是修改后的代码:
library(rvest) # 目标页面URL url <- "https://clinicaltrials.gov/study/NCT05817110?tab=history" # 获取静态HTML内容 webpage <- read_html(url) # 方案1:提取页面所有表格后筛选目标表格 all_tables <- webpage %>% html_table(fill = TRUE) # 查看表格结构后选择对应索引(该页面中历史版本表格是第2个) table_data <- all_tables[[2]] # 方案2:用精准的XPath定位父容器下的表格(推荐) table_data <- webpage %>% html_nodes(xpath = '//div[@id="study-record-versions-table"]//table') %>% html_table(fill = TRUE) %>% .[[1]] # 查看结果 print(table_data)
关键说明
- 无需指定
tbody:html_table函数会自动解析整个表格的内容,包括thead和tbody,直接定位到table元素即可。 - 优先用静态元素定位:抓取静态HTML时,尽量依赖服务器返回的固定元素(如
id、通用标签),避开JS动态生成的自定义组件。
内容的提问来源于stack exchange,提问作者Ashok G
相关产品推荐
相关产品推荐

