Для небольшого проекта для себя Я пытаюсь получить результаты от некоторых рас. Я могу получить доступ к страницам с результатами и загрузить данные из таблицы на странице. Однако на странице есть только 20 результатов, но, к счастью, веб-адреса построены логически, поэтому я могу их создать и в цикле получить доступ к этим страницам и загрузить данные. Тем не менее, каждая категория имеет различное количество гонщиков и, следовательно, может иметь разное количество страниц. Я хочу избежать необходимости вручную проверять, сколько гонщиков есть в каждой категории.Проверьте, существует ли таблица на веб-сайте R
Моя первая мысль заключалась в том, чтобы просто создать много ссылок, убедившись, что их достаточно (в зависимости от общего количества гонщиков), чтобы получить все данные.
nrs <- rep(seq(1,5,1),2)
sex <- c("M","M","M","M","M","F","F","F","F","F")
links <- NULL
#Loop to create 10 links, 5 for the male age grou 18-24, 5 for women agegroup 18-24. However,
#there are only 3 pages in the male age group with a table.
for (i in 1:length(nrs)) {
links[i] = paste("http://www.ironman.com/triathlon/events/americas/ironman/texas/results.aspx?p=",nrs[i],"&race=texas&rd=20160514&sex=",sex[i],"&agegroup=18-24&loc=",sep="")
}
resultlist <- list() #create empty list to store results
for (i in 1:length(links)) {
results = readHTMLTable(links[i],
as.data.frame = TRUE,
which=1,
stringsAsFactors = FALSE,
header = TRUE) #get data
resultlist[[i]] <- results #combine results in one big list
}
results = do.call(rbind, resultlist) #combine results into dataframe
Как вы можете видеть в этом коде readHTMLTable проливает сообщение об ошибке, как только он встречает страницу, без таблицы, а затем останавливается.
Я думал о двух возможных решениях.
1) Как-то проверьте все ссылки, если они существуют. Я попытался использовать url.exists из пакета RCurl. Но это не работает. Он возвращает TRUE для всех страниц, поскольку страница существует, у нее просто нет таблицы (так что для меня это было бы ложным положительным). Как-то мне понадобится код, чтобы проверить, существует ли таблица на странице, но я не знаю, как это сделать.
2) Подавить сообщение об ошибке из readHTMLTable, чтобы цикл продолжался, но я не уверен, что это возможно.
Любые предложения по этим двум методам или любые другие предложения?
Спасибо! Хорошо работает, я никогда не сталкивался с tryCatch раньше, полезная функция! – egilio