Очистка веб-страниц в R: один и тот же элемент очищается несколько раз. Как я мог это исправить? - PullRequest
1 голос
/ 17 октября 2019

Я пытаюсь почистить некоторые URL-адреса с сайта о нарушении голландского поезда . Проблема в том, что на каждой странице первый URL очищается 7 раз. HTML-код содержит URL-адрес только один раз, поэтому я не понимаю, почему он очищается несколько раз.

Проблема возникает одинаково на каждой странице: каждый раз первый URL-адрес очищается 7 раз, а на остальныхстраницы только один раз.

Я использую следующий скрипт:

library(tidyverse)
library(rvest)

scrape_css_attr <- function(css,group,attribute,html_page){
  txt <- html_page %>%
    html_nodes(group) %>%
    lapply(.%>% html_nodes(css) %>% html_attr(attribute) %>% ifelse(identical(.,character(0)),NA,.)) %>%
    unlist()
  return(txt)
}

get_element_data <- function(link){  
  if(!is.na(link)){
    html <- read_html(link)
    Sys.sleep(2)
    datum <- html %>%
      html_node(".disruption-cause") %>%
      html_text()
    return(tibble(datum=datum))
  }
}

get_elements_from_url <- function(url){
  html_page <- read_html(url)
  Sys.sleep(2)
  element_urls <- scrape_css_attr(".resolved","div","href",html_page)
  element_urls <- element_urls[!is.na(element_urls)]
  element_urls <- paste0("https://www.rijdendetreinen.nl", element_urls)
  element_data_detail <- element_urls %>%
    map(get_element_data) %>%
    bind_rows()
  elements_data <- tibble(element_urls=element_urls)
  elements_data_overview <- elements_data[complete.cases(elements_data[,1]), ]
  return(bind_cols(elements_data_overview,element_data_detail))
}

scrape_write_table <- function(url){
  list_of_pages <- str_c(url, 1)
  list_of_pages %>%
    map(get_elements_from_url) %>%
    bind_rows()
}

trainDisruptions <- scrape_write_table("https://www.rijdendetreinen.nl/storingen?lines=&reasons=&date_before=31-12-2018&date_after=01-01-2018&page=")

View(trainDisruptions)
...