對於我自己的一個小項目,我試圖從一些比賽中獲得結果。 我可以訪問帶有結果的頁面並從頁面中的表格下載數據。但是,每頁只有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)以某種方式檢查所有鏈接是否存在。我嘗試使用RCurl包中的url.exists。但這不起作用。它對所有頁面返回TRUE,因爲頁面存在,它只是沒有表格(所以對我來說這將是誤報)。不知何故,我需要一些代碼來檢查頁面中的表是否存在,但我不知道如何去做。
2)抑制來自readHTMLTable的錯誤消息,使循環連續,但我不知道這是可能的。
對這兩種方法或任何其他建議的任何建議?
謝謝!工作得很好,我從來沒有遇到過tryCatch,有用的功能! – egilio