Ошибка при использовании purrr для очистки нескольких страниц - PullRequest
1 голос
/ 13 января 2020

Я пытаюсь очистить несколько веб-страниц (например: https://www.foreign.senate.gov/hearings/120314am), которые настроены аналогичным образом. Созданная мной функция работает при использовании одного URL, но при попытке сопоставления нескольких страниц выдает ошибку.

Вот упрощенная версия функции.

scrape <- function(url){
   url <- paste0("https://www.foreign.senate.gov/hearings/", hearing_name)

      product <- url %>%
      read_html() %>%
      html_nodes("#main_column")

      names <- product %>%
      html_nodes(".fn") %>%
      html_text() %>% 
      gsub("\\n", "",.) %>% 
      gsub("\\t", "",.) 

      tibble(Witness_Name = names)
    }

При сохранении URL-адресов в объекте и попытке сопоставления я получаю сообщение об ошибке.

hearing_name <- c("the-ebola-epidemic-the-keys-to-success-for-the-international-response",
              "120314am")

map_df(hearing_name, scrape)


Error in doc_parse_file(con, encoding = encoding, as_html = as_html, options = options) : 
Expecting a single string value: [type=character; extent=2]. 

Я попытался использовать lapply () и реорганизовать для минималистского подхода, но безуспешно , Надеюсь, кто-нибудь может мне помочь!

1 Ответ

1 голос
/ 13 января 2020

Внутри функции вместо 'url' есть жестко запрограммированное имя слушания

url <- paste0("https://www.foreign.senate.gov/hearings/", hearing_name)

Если мы изменим это значение на URL

scrape <- function(url){
   url <- paste0("https://www.foreign.senate.gov/hearings/", url)

      product <- url %>%
      read_html() %>%
      html_nodes("#main_column")

      names <- product %>%
      html_nodes(".fn") %>%
      html_text() %>% 
      gsub("\\n", "",.) %>% 
      gsub("\\t", "",.) 

      tibble(Witness_Name = names)
    }

, код будет работать нормально

out <- map_df(hearing_name, scrape)
dim(out)
#[1] 8 1
out
# A tibble: 8 x 1
#  Witness_Name        
#  <chr>               
#1 Ellen JohnsonSirleaf
#2 PaulFarmer          
#3 AnnePeterson        
#4 PapeGaye            
#5 JavierAlvarez       
#6 DanielRussel        
#7 Richard C.Bush III  
#8 SophieRichardson    
...