Я хочу извлечь все таблицы вакцин с описанием слева и их описанием внутри таблицы с помощью R,
это ссылка на веб-страницу
вот как выглядит первая таблица на веб-странице:
Я пытался использовать пакет XML, но мне это не удалось, я использовал:
vup<-readHTMLTable("https://milken-institute-covid-19-tracker.webflow.io/#vaccines_intro", which=5)
Я получаю сообщение об ошибке:
Error in (function (classes, fdef, mtable) :
unable to find an inherited method for function ‘readHTMLTable’ for signature ‘"NULL"’
In addition: Warning message:
XML content does not seem to be XML: ''
Как это сделать?
Эта веб-страница не использует таблицы, поэтому причина вашей ошибки. Из-за множества подразделов и скрытого текста форматирование на странице довольно сложное и требует индивидуального нахождения интересующих узлов.
Я предпочитаю использовать пакеты «rvest» и «xml2» для более простого и прямого синтаксиса. Это не полное решение, и оно должно заставить вас двигаться в правильном направлении.
library(rvest)
library(dplyr)
#find the top of the vacine section
parentvaccine <- page %>% html_node(xpath = "//div[@id='vaccines_intro']") %>% xml_parent()
#find the vacine rows
vaccines <- parentvaccine %>% html_nodes(xpath = ".//div[@class='chart_row for_vaccines']")
#find info on each one
company <- vaccines %>% html_node(xpath = ".//div[@class='is_h5-2 is_developer w-richtext']") %>% html_text()
product <- vaccines %>% html_node(xpath = ".//div[@class='is_h5-2 is_vaccines w-richtext']") %>% html_text()
phase <- vaccines %>% html_node(xpath = ".//div[@class='is_h5-2 is_stage']") %>% html_text()
misc <- vaccines %>% html_node(xpath = ".//div[@class='chart_row-expanded for_vaccines']") %>% html_text()
#determine vacine type
#Get vacine type
vaccinetypes <- parentvaccine %>% html_nodes(xpath = './/div[@class = "chart-section for_vaccines"]') %>%
html_node('div.is_h3') %>% html_text()
#dtermine the number of vacines in each category
lengthvector <-parentvaccine %>% html_nodes(xpath = './/div[@role = "list"]') %>% xml_length() %>% sum()
#make vector of correct length
VaccineType <- rep(vaccinetypes, each=lengthvector)
answer <- data.frame(VaccineType, company, product, phase)
head(answer)
Чтобы сгенерировать этот код, необходимо прочитать html-код и определить правильные узлы и уникальные атрибуты для нужной информации.
А также, как вы получили классы? есть ли функция, которую я могу использовать для получения всех классов?
@user432797 user432797 Не имея информации в стандартном формате таблицы, мне пришлось прочитать html и определить общие узлы и атрибуты. Я отредактировал код, добавив информацию о типе вакцины.
Большое спасибо @Dave2e, могу я также добавить столбец с типом вакцины? ДНК, белковая субъединица, РНК и т. д., я хочу немного
Institution VaccineType Phase Country