Сообщение об ошибке: .htm «значение» не существует в текущем рабочем каталоге, но оно является частью моего webscraping dataframe - PullRequest
0 голосов
/ 31 марта 2020

Я знаю, что это может быть наивный вопрос с простым решением.

Basi c упражнение по очистке веб-страниц, все в моем df и структурировано. как вы можете видеть из кода ниже

library(rvest)
library(dplyr)
library(tidyr)


#load webpage
pres.library <- read_html(x = "http://stateoftheunion.onetwothree.net/texts/index.html")

#get URL of links
links <- pres.library %>%
  html_nodes("#text li a") %>%
  html_attr("href")

#get link text
text <- pres.library %>%
  html_nodes("#text li a") %>%
  html_text()

#combine into df, add structure 
sotu <- data.frame (text = text, links = links, stringsAsFactors = F) %>%
  separate(text, c("President", "Date", "Year"), ",")

#check for unneccesary whitespaces
sotu$President <- trimws(sotu$President)
sotu$links <- trimws(sotu$links)
sotu$Date <- trimws(sotu$Date)
sotu$Year <- trimws(sotu$Year)

#remove data from pre-modern era
sotu.modern <- sotu[-c(1:156),]

#separate democrats from republicans
democrats <- c("Harry S. Truman", "John F. Kennedy", "Lyndon B. Johnson", "Jimmy Carter", "William J. Clinton", "Barack Obama")
sotu.modern$Party <- ifelse(sotu.modern$President %in% democrats, "Democrat", "Republican")

все работает до тех пор, пока здесь. Приведенный здесь код используется для извлечения текста из каждой ссылки в каталог

for (i in seq(nrow(sotu.modern))) {
  sotu.text <- read_html(sotu.modern$links[i]) %>%
    html_nodes("#text li a") %>% 
    html_text()
  filename <- paste0("SOTU", President,"-", Date, Year, ".txt")
  sink(file = filename) %>%
    cat(text) %>%
    sink()
}

. При выполнении кода выше выдается следующее сообщение об ошибке:

'19460121.html' does not exist in current working directory ('C:/Users/User/Desktop/R/R Projects/SOTU project')

"19460121. html" это первый элемент столбца sotu.modern $ link, поэтому я не понимаю, почему он говорит, что его нет в каталоге.

1 Ответ

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

Вы поставляете не полный URL в read_html. Например, в первой итерации было указано 20200204.html, вместо полного URL http://stateoftheunion.onetwothree.net/texts/20200204.html

я также исправляю html_node и filename.

for (i in seq(nrow(sotu.modern))) {
  sotu.text <- read_html(paste0("http://stateoftheunion.onetwothree.net/texts/",sotu.modern$links[i])) %>%
    html_nodes("#text") %>% 
    html_text()

  filename <- paste0("SOTU", sotu.modern$President[i],"-", sotu.modern$Date[i], sotu.modern$Year[i], ".txt")
  cat(sotu.text, file=filename)
}
...