Вы можете расширить/изменить метод rvest:::html_table.xml_node
следующим образом:
см R комментарии
my_html_table <- function(x, header = NA, trim = TRUE, fill = FALSE, dec = ".", attr_name = ""){
rows <- html_nodes(x, "tr")
n <- length(rows)
cells <- lapply(rows, "html_nodes", xpath = ".//td|.//th")
ncols <- lapply(cells, html_attr, "colspan", default = "1")
ncols <- lapply(ncols, as.integer)
p <- unique(vapply(ncols, sum, integer(1)))
if (length(p) > 1) {
if (!fill) {
stop("Table has inconsistent number of columns. ",
"Do you want fill = TRUE?", call. = FALSE)
}
else {
p <- max(p)
}
}
#############################
## The following line is the only one that was changed
#############################
values <- lapply(cells, html_attr, attr_name)
# insted of
# values <- lapply(cells, html_text, trim = trim)
out <- matrix(NA_character_, nrow = n, ncol = p)
for (i in seq_len(n)) {
row <- values[[i]]
ncol <- ncols[[i]]
col <- 1
for (j in seq_len(p)) {
if (j > length(row))
next
out[i, col] <- row[[j]]
col <- col + ncol[j]
}
}
if (is.na(header)) {
header <- all(html_name(cells[[1]]) == "th")
}
if (header) {
col_names <- out[1, , drop = FALSE]
out <- out[-1, , drop = FALSE]
} else {
col_names <- paste0("X", seq_len(ncol(out)))
}
df <- lapply(seq_len(p), function(i) {
utils::type.convert(out[, i], as.is = TRUE, dec = dec)
})
names(df) <- col_names
class(df) <- "data.frame"
attr(df, "row.names") <- .set_row_names(length(df[[1]]))
df
}
теперь вы можете сделать что-то вроде этого, чтобы «слить» исходные данные с данными подсказки
require(rvest)
doc <- read_html("https://tipping.portadelaidefc.com.au/comp/the-alberton-crowd")
x <- doc %>% html_node("table")
tips <- x %>% my_html_table(attr_name = "title")
dat <- doc %>% html_table() %>% `[[`(1)
tips[,c(1,2,28,29)] <- dat[,c(1,2,28,29)]
tips[1:2,] <- dat[1:2,]
который дает
> head(tips)
X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20 X21
1 Leaderboard Select Round: <NA> NA Overall 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
2 Rank Name NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
3 1 Gilly2311 NA <NA> 11 53 42 72 51 41 5 45 20 75 39 3 41 18 13 7 58
4 2 Harts NA <NA> 27 50 56 57 53 28 15 32 8 63 51 1 26 23 21 6 87
5 3 mygypsyrose NA <NA> 3 49 64 62 35 61 1 37 20 47 53 9 23 0 7 15 38
6 4 Scraggie_93 NA <NA> 19 58 81 32 39 31 12 54 35 44 44 17 25 15 7 16 38
X22 X23 X24 X25 X26 X27 X28 X29
1 18 19 20 21 22 23
2 NA NA NA NA NA NA Margin Score
3 74 52 11 62 80 15 888 146
4 46 63 18 51 79 4 865 145
5 48 56 19 12 78 11 748 142
6 48 53 7 21 75 11 782 142
взглянуть на советы и Дат, чтобы увидеть их результаты