Следующий код работает:R программирование: rvest: для данных цикла перезаписи Царапины
library(rvest)
library(plyr)
alaska <- c(1:49)
for (i in alaska) {
url <- "http://www.50states.com/facts/alaska.htm"
nodespath <- paste('//*[@id="content"]/div[1]/div[4]/ol/li[',i,']')
alaskafacts <- data.frame(facts = url %>% html() %>%
html_nodes(xpath =nodespath) %>% html_text())
alaskafacts$nm <- i
alaskafacts$facts <- alaskafacts$facts
result <- rbind.fill(result,alaskafacts)
}
Я получаю это в результате:
Я знаю, что цикл работает потому, что если изменить код следующим образом:
alaska <- c(1:48)
Я получаю это в результате:
Проблема Я бегу в цикл пишет над собой. Я ожидаю 49 строк фактов - я предполагаю, что цикл стирает предыдущий факт, а затем пишет новый - последний факт всегда будет фактом в data.frame.
Я нашел здесь пример: How can I use a loop to scrape website data for multiple webpages in R? и вышеописанный код следует за кодом в примере. И затем я ссылался на этот пример: here. И код, как мне кажется, следует за ним.
Звонок, который у меня внизу, следует за двумя аналогичными примерами, которые я нашел на SO, но не сохраняет, как ожидалось.
Любые предложения?
работает отлично. как вы знаете, что «ol.stripedList li» - это то, что мне нужно? –
Это вопрос поиска кода html для определения интересующих блоков HTML-кода. Иногда немного проб и ошибок. Если вы посмотрите на виньетку rvest, в ней объясняется, как использовать инструмент «selectorgadget», который упрощает процесс. – Dave2e
вы бы по-прежнему не рекомендуем использовать цикл for, если я хочу запускать все состояния, где 'states <- c (" все состояния ")' и что-то похожее на 'for (i во всех состояниях)' - Я думаю, что цикл был бы необходим, если бы это была моя игровая проблема. Как вы думаете? –