刮除跨多个行的单元格的维基百科表格

时间:2018-07-23 08:42:03

标签: r web-scraping html-table rvest

我正在尝试使用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)

0 个答案:

没有答案