我正在尝试在此Wikipedia页面上抓一张桌子:
https://en.wikipedia.org/wiki/United_Kingdom_Parliament_constituencies
具体来说,“英格兰”部分下的表格。这是我的代码:
install.packages("rvest")
library("rvest")
install.packages("xml2")
library("xml2")
install.packages("magrittr")
library("magrittr")
url <- "https://en.wikipedia.org/wiki/United_Kingdom_Parliament_constituencies"
read_html(url)
list <- url %>% html_nodes(xpath='//*[@id="mw-content-text"]/div/table[2]') %>%
`html_table()
list<- list[[1]]
但是,我遇到了两个错误:
list <- url %>%
+ html_nodes(xpath='//*[@id="mw-content-text"]/div/table[2]') %>%
+ html_table()
UseMethod(“ xml_find_all”)中的错误: 没有将适用于“ xml_find_all”的适用方法应用于“字符”类的对象
list<- list[[1]]
列表[[1]]中的错误:“内置”类型的对象不可子集化
有人可以帮忙吗?
答案 0 :(得分:0)
您的第一个错误是因为您试图将read_html
(html_nodes
)的方法直接应用于网址。您需要将read_html(url)
放在命令链中:
items <- read_html(url) %>% html_nodes(xpath='//*[@id="mw-content-text"]/div/table[2]') %>% html_table()
第二个错误(与我上面重命名您的变量有关); list是一种内置方法,因此不应用作变量名。重命名曾经使用过的变量:
items <- items[[1]]
我可能会改写为使用更快的CSS类选择器和html_node
方法来仅检索一个表。然后使用更具描述性的名称。
constituency_table <- read_html(url) %>% html_node('.wikitable') %>% html_table()