Очистка таблицы википедии с помощью Rvest (ошибка) - PullRequest
0 голосов
/ 28 марта 2020

Я пытаюсь почистить таблицу на этой странице википедии:

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]]: объект типа 'builtin' не может быть подмножеством

Кто-нибудь может помочь?

1 Ответ

0 голосов
/ 28 марта 2020

Ваша первая ошибка заключается в том, что вы пытаетесь применить метод для read_html (html_nodes) непосредственно к URL-адресу. Вам нужно поместить 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()
...