我正在尝试使用rvest软件包中的html_table从Wikipedia表中抓取信息。但是,在随后检查表时,由于原始表的单元格跨越多行,因此列未对齐。我知道html_table的插图表示该函数假定表不包含跨越多行的单元格,所以我想问其他方法吗?
htmltable不适用于我,因为我在一个循环中刮擦了很多表,而且它们的长度也不尽相同,因此该函数无法真正处理该问题(并返回错误:项目数替换不是替换长度的倍数)。用html_table下载表格后,是否有可能解决不对齐问题?
一些可复制的代码:
musicians <- c("Bob Dylan", "John Lennon")
link <- character()
for(j in seq_along(musicians)){
link[j] <- paste0('https://en.wikipedia.org/wiki/',
musicians[j], ' discography')
}
使用htmltab不能正常工作,我猜是因为表的长度不同?
info <- list()
for(p in seq_along(link)){
info[p <- htmltab(wik[p], which = '//*[@id="mw-content-text"]/div/table[2]')
}
和read_html一起,正在下载的表未对齐(列的顺序不再适合)
for(k in seq_along(link)){
info[k] <- read_html(link[k]) %>%
html_nodes(xpath = '//*[@id="mw-content-text"]/div/table[2]') %>%
html_table(fill = TRUE, header = FALSE)
}
有人知道这些问题的解决方案吗?我很高兴,即使其中一种解决了问题,哪怕只是在下载后找到一种自动方式来编辑未对齐的列(而不必查找列是否适合每个数据帧的地方),我也很高兴,因为目前,我还真的不知道如何从这里继续前进。
编辑: 我今天为自己的问题找到了解决方案,并希望与他人分享,以防其他人也面临着与我错位的柱子一样的困难。一个html表。 有一个名为xml_remove的函数,可以排除引起不对齐问题的恼人节点。
使用属于上述表的节点的xpath的示例代码:
url <- read_html(url)
xml_remove(html_nodes(url,
xpath = '//*[@id="mw-content-text"]/div/table[2]/tbody/tr[1]/th[4]'))
tab <- html_nodes(url, xpath = '//*[@id="mw-content-text"]/div/table[2]') %>%
html_table(fill = TRUE)