R пытается отсортировать URL в списке в зависимости от их существования или нет - PullRequest
0 голосов
/ 01 октября 2018

Я работаю над проектом сбора некоторых данных из https://www.hockey -reference.com / boxscores / .На самом деле я пытаюсь получить каждый стол сезона.Я сгенерировал список URL, составленный путем объединения https://www.hockey -reference.com / boxscores / с каждой датой календаря и названием каждой команды, например "https://www.hockey -reference.com /boxscores / 20171005WSH.html

Я заполнил каждый URL-адрес в список, но некоторые приводят к ошибке 404. Я пытаюсь использовать "пакет Curl" с функцией "url.exists""знать, будет ли ошибка 404 и удалить URL списка. Проблема в том, что каждый URL из списка (включая реально существующий URL) возвращает FALSE с url.exists в цикле for ... Я пыталсяиспользовать эту функцию в консоли с url.exists (мой список [i]), но она возвращает FALSE.

вот мой код:

library(rvest)
library(RCurl)
##### Variables ####
team_names = c("ANA","ARI","BOS","BUF","CAR","CGY","CHI","CBJ","COL","DAL","DET","EDM","FLA","LAK","MIN","MTL","NSH","NJD","NYI","NYR","OTT","PHI","PHX","PIT","SJS","STL","TBL","TOR","VAN","VGK","WPG","WSH")
S2017 = read.table(file = "2018_season", header = TRUE, sep = ",")
dates = as.character(S2017[,1])
#### formating des dates ####
for (i in 1:length(dates)) {
  dates[i] = gsub("-", "", dates[i])
}
dates = unique(dates)
##### generation des url ####
url_list = c()
for (j in 1:2) { #dates
  for (k in 1:length(team_names)) {
    print(k)
    url_site = paste("https://www.hockey-reference.com/boxscores/",dates[j],team_names[k],".html",sep="")
    url_list = rbind(url_site,url_list)
  }
}
url_list_raffined = c()
for (l in 1:40) {
  print(l)
  if (url.exists(url_list[l], .header = TRUE) == TRUE) {
    url_list_raffined = c(url_list_raffined,url_list[l])
  }
}

Есть идеи для моих проблем?

спасибо

1 Ответ

0 голосов
/ 01 октября 2018

Вместо RCurl вы можете использовать пакет httr:

library(httr)
library(rvest)
library(xml2)
resp <- httr::GET(url_address, httr::timeout(60)) 
if(resp$status_code==200) {
    html <- xml2::read_html(resp)
    txt <- rvest::html_text(rvest::html_nodes(html)) # or similar
    # save the results somewhere or do your operations..
}

здесь url_address - это адрес, который вы пытаетесь загрузить.Может быть, вам нужно поместить это в функцию или цикл для перебора всех ваших адресов.

...