我正在努力从维基百科上刮桌子,结果我陷入了僵局。我以2014年世界杯足球队为例。在这种情况下,我想从“2014年国际足联世界杯足球队”页面的目录中提取参赛国家名单,并将其存储为矢量。我已经走了这么远:

library(tidyverse)
library(rvest)
library(XML)
library(RCurl)

(Countries <- read_html("https://en.wikipedia.org/wiki/2014_FIFA_World_Cup_squads") %>%
  html_node(xpath = '//*[@id="toc"]/ul') %>%
  htmlTreeParse() %>%
  xmlRoot())

这会吐出一堆html代码,我不会在这里复制/粘贴它们。我特别希望提取标签<span class="toctext">的所有行,如“组a”、“巴西”、“喀麦隆”等,并将它们保存为向量。什么功能会导致这种情况发生?

最佳答案

您可以使用html_text()从节点读取文本。

url <- "https://en.wikipedia.org/wiki/2014_FIFA_World_Cup_squads"
toc <- url %>%
    read_html() %>%
    html_node(xpath = '//*[@id="toc"]') %>%
    html_text()

这给你一个单一的字符向量。然后,可以在\n字符上分割结果,将结果作为向量(并且可以清除空白)。
contents <- strsplit(toc, "\n")[[1]]

contents[contents != ""]

# [1] "Contents"                                   "1 Group A"                                  "1.1 Brazil"
# [4] "1.2 Cameroon"                               "1.3 Croatia"                                "1.4 Mexico"
# [7] "2 Group B"                                  "2.1 Australia"                              "2.2 Chile"
# [10] "2.3 Netherlands"                            "2.4 Spain"                                  "3 Group C"
# [13] "3.1 Colombia"                               "3.2 Greece"                                 "3.3 Ivory Coast"
# [16] "3.4 Japan"                                  "4 Group D"                                  "4.1 Costa Rica"
# [19] "4.2 England"                                "4.3 Italy"                                  "4.4 Uruguay"
# ---
# etc

通常,要读取html文档中的表,可以使用html_table()函数,但在这种情况下,不会读取目录。
url %>%
    read_html() %>%
    html_table()

09-17 14:46