对于我自己的一个小项目,我试图从某些比赛中获得结果。 我可以访问带有结果的页面,并从页面中的表格下载数据。但是,每页只有20个结果,但幸运的是,Web地址是逻辑构建的,因此我可以创建它们,并在循环中访问这些页面并下载数据。但是,每个类别都有不同数量的参赛者,因此可以有不同的页数。我想避免手动检查每个类别中有多少赛车手。
我的第一个想法是只生成很多链接,确保有足够的(基于参赛者总数)来获取所有数据。
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中删除错误消息,使循环连续,但我不确定是否可能。
对这两种方法或任何其他建议的任何建议?