html_table 丢失的信息

Information lost by html_table

我想从 this website 中删除第三个 table 并将其存储为数据框。下面是一个可重现的例子

第三个table是第一行第三列带有“Isiah YOUNG”的那个。

library(rvest)
library(dplyr)

target_url <-
  "https://flashresults.com/2017_Meets/Outdoor/06-22_USATF/004-2-02.htm"

table <- target_url %>%
  read_html(options = c("DTDLOAD")) %>%
  html_nodes("[id^=splitevents]") # this is the correct node

到目前为止一切顺利。打印table[[1]]显示我想要的内容

table[[1]]
{html_node}
<table id="splitevents" class="sortable" align="center">
 [1] <tr>\n<th class="sorttable_nosort" width="20">Pl</th>\n<th class="sorttable_nosort" width="20">Ln</th>\n<th ...
 [2] <td>1</td>\n
 [3] <td>6</td>\n
 [4] <td></td>\n
 [5] <td>Isiah YOUNG</td>\n
 [6] <td></td>\n
 [7] <td>NIKE</td>\n
 [8] <td>20.28 Q</td>\n
 [9] <td><b><font color="grey">0.184</font></b></td>
[10] <td>2</td>\n
[11] <td>7</td>\n
[12] <td></td>\n
[13] <td>Elijah HALL-THOMPSON</td>\n
[14] <td></td>\n
[15] <td>Houston</td>\n
[16] <td>20.50 Q</td>\n
[17] <td><b><font color="grey">0.200</font></b></td>
[18] <td>3</td>\n
[19] <td>9</td>\n
[20] <td></td>\n
...

但是,将其传递给 html_table 会导致空数据框。

table[[1]] %>%
  html_table(fill = TRUE)
[1] Pl          Ln                      Athlete                 Affiliation Time                   
<0 rows> (or 0-length row.names)

如何获取 table[[1]](显然确实存在)的内容作为数据框?

html 充满了错误并使解析器出错,我还没有找到解决这些问题的简单方法。

在此特定情况下,另一种方法是使用 header 计数来确定适当的列数,然后通过将总 td 数除以列数来得出行数;使用这些转换成矩阵然后数据帧。

library(rvest)
library(dplyr)

target_url <- "https://flashresults.com/2017_Meets/Outdoor/06-22_USATF/004-2-02.htm"

table <- read_html(target_url) %>%
  html_node("#splitevents")

tds <- table %>% html_nodes('td') %>% html_text()
ths <- table %>% html_nodes("th") %>% html_text()
num_col <- length(ths)
num_row <- length(tds) / num_col
  
df <- tds %>%
  matrix(nrow = num_row, ncol = num_col, byrow = TRUE) %>%
  data.frame() %>%
  setNames(ths)