如何用R的rvest提取网页表格<tr>标签的data-id属性?
解决rvest提取标签data-id属性的问题
嘿,我来帮你搞定这个抓取波兰选举选区data-id的问题!你之前得到named character(0)的结果,大概率是因为节点选择的方式不够精准,或者用错了提取属性的函数。咱们一步步来修正:
问题分析
你的原代码嵌套了三次html_nodes(),虽然逻辑上是找表格,但可能中间的过滤步骤不小心排除了带有data-id属性的<tr>标签;另外html_attrs()会返回标签的所有属性组成的列表,而你只需要data-id这一个特定属性,用它反而容易得到空结果。
修正后的代码
直接定位到带有data-id属性的<tr>标签,然后用html_attr()精准提取目标属性:
library(dplyr) library(rvest) # 读取目标页面 page <- read_html("https://wybory.gov.pl/prezydent20200628/pl/wyniki/1/pow/26400") # 提取所有带有data-id属性的<tr>标签的data-id值 district_ids <- page %>% html_nodes('tr[data-id]') %>% # 直接选择有data-id属性的行 html_attr("data-id") # 提取指定属性的值 # 查看结果 print(district_ids)
为什么这样有效?
- 精准定位节点:
tr[data-id]是CSS选择器的写法,直接筛选出所有包含data-id属性的<tr>标签,比多层嵌套找表格更高效,也不会漏掉目标元素。 - 指定提取属性:
html_attr("data-id")会直接返回每个<tr>标签的data-id属性值,没有的话会返回NA,而不是返回所有属性的列表,结果更清晰。
补充说明
如果你的目标表格确实在table-responsive容器和指定class的表格里,也可以加上更具体的筛选(避免页面其他表格干扰):
district_ids <- page %>% html_nodes('.table-responsive .table.table-bordered.table-striped.table-hover tr[data-id]') %>% html_attr("data-id")
这样会先定位到目标表格,再提取其中带data-id的行,更稳妥。
内容的提问来源于stack exchange,提问作者AAAA
相关产品推荐
相关产品推荐

