Я пытаюсь очистить некоторый текст с веб-сайта, используя функцию цикла, но моя функция цикла не переходит к выбору следующего элемента в моем векторном списке. Рад любым полезным советам. Спасибо
library(rvest)
library(xml2)
ID <- c(1:2)
Land <- c('Afghanistan','Ägypten')
url <- c('afghanistan', 'aegypten')
Text <- (NA)
data <- data.frame(ID, Land, Text)
for(i in url) {
nam <- paste("https://www.reporter-ohne-grenzen.de", i, sep = "/")
assign(nam, i)
webpage <- read_html(paste0(nam, i))
data$Text <- i <- webpage %>% html_nodes('div.text') %>% .[[1]] %>% html_text()
}
Хм, не уверен, что ясно изложил свою проблему. Вот пример моего желаемого вывода данных.
library(rvest)
library(xml2)
ID <- c(1:2)
Land <- c('Afghanistan','Ägypten')
url <- c('afghanistan', 'aegypten')
Text <- (NA)
data <- data.frame(ID, Land, Text)
afghanistan <- 'https://www.reporter-ohne-grenzen.de/afghanistan'
afghanistan <- read_html(afghanistan)
afghanistan <- html_nodes(afghanistan,'div.text')
afghanistan <- html_text(afghanistan)[[1]]
aegypten <- 'https://www.reporter-ohne-grenzen.de/aegypten'
aegypten <- read_html(aegypten)
aegypten <- html_nodes(aegypten,'div.text')
aegypten <- html_text(aegypten)[[1]]
# desired data output
data$Text <- c(afghanistan, aegypten)
Я не хочу повторять эти строки для 180 стран.
aegypten <- 'https://www.reporter-ohne-grenzen.de/aegypten'
aegypten <- read_html(aegypten)
aegypten <- html_nodes(aegypten,'div.text')
aegypten <- html_text(aegypten)[[1]]
Вот решение:
library(rvest)
library(xml2)
ID <- c(1:4)
Land <- c('Afghanistan','Ägypten','Deutschland','Italien')
Url <- c('afghanistan', 'aegypten','deutschland','italien')
Text <- NA
data <- data.frame(ID, Land, Text)
website <- 'https://www.reporter-ohne-grenzen.de'
for (i in ID) {
country <- Url[i]
html_url <- paste(website,country,sep='/')
output <- read_html(html_url)
output <- html_nodes(output,'div.text')
output <- html_text(output)[[1]]
data$Text[i] <- output
}
assign
? Переменнойnam
должно быть достаточно для использования в read_html, зачем снова добавлятьi
. Я бы предложил использоватьsapply
илиlapply
, потому что тогда вы получаете результаты в списке, а затем можете просто удалить его из списка и создать из него data.frame. - person hannes101   schedule 18.11.2019