htmlparsing在一个包含大型列表的循环中(18000 urls)

时间:2015-06-05 19:48:51

标签: r

我是R的新手并且一直试图弄清楚我可以做些什么来推动这一切。我知道循环不是最好用的东西,但它是我能想到的全部。我已经搜索了这里和网络,并且看到了像tapply这样的选项,但是我无法弄清楚它是否是我做错了什么,或者是不是tapply isn'与此类数据兼容。我认为它是后者,但我是新的,我知道什么。 HA!

我有一个data.frame,用于保存从之前的解析中播放的所有玩家,其数量超过18000行。如果他们去年玩过,下面的脚本将获取该URL并抓取另一个URL。我可以做些什么来使这个更快或更少的记忆猪,因为它约15分钟后常规将我的公羊钉在99%?谢谢你的帮助!

#GET YEARS PLAYED LINKS


yplist = NULL

playerURLs <- paste("http://www.baseball-reference.com",datafile[,c("hrefs")],sep="")

for(thisplayerURL in playerURLs){

doc <- htmlParse(thisplayerURL)
yplinks <- data.frame(
  names =  xpathSApply(doc, '//*[@id="all_standard_batting"]/div/ul/li[2]/ul/li[. = "2014"]/a',xmlValue),
  hrefs = xpathSApply(doc, '//*[@id="all_standard_batting"]/div/ul/li[2]/ul/li[. = "2014"]/a',xmlGetAttr,'href'))

yplist = rbind(yplist, yplinks)

}

yplist[,c("hrefs")]

playerURL中的示例数据文件列表(有2个mel皇后,不同)

  X  names      hrefs
1 1 Jason Kipnis /players/k/kipnija01.shtml
2 2 Tom Qualters /players/q/qualtto01.shtml
3 3 Paul Quantrill /players/q/quantpa01.shtml
4 4 Bill Quarles /players/q/quarlbi01.shtml
5 5 Billy Queen /players/q/queenbi01.shtml
6 6 Mel Queen /players/q/queenme01.shtml
7 7 Mel Queen /players/q/queenme02.shtml

如果这些人中的任何一个人在2014年上场,我上面的脚本会返回一个类似于以下内容的data.frame

  X  names      hrefs
1 1 Jason Kipnis players/gl.cgi?id=kipnija01&t=b&year=2014
2 2 Tom Qualters /players/gl.cgi?id=qualtto01&t=b&year=2014
3 3 Paul Quantrill /players/gl.cgi?id=quantpa01&t=b&year=2014
4 4 Bill Quarles /players/gl.cgi?id=quarlbi01&t=b&year=2014
5 5 Billy Queen /players/gl.cgi?id=queenbi01&t=b&year=2014
6 6 Mel Queen /players/gl.cgi?id=queenme01&t=b&year=2014
7 7 Mel Queen /players/gl.cgi?id=queenme02&t=b&year=2014

0 个答案:

没有答案