2011-04-25 72 views
1

我开始使用R.我设计了一个小小的R代码里面做这样一个测试网页加载时间的想法玩:使用Rcurl计算页面元素的加载时间? (R)

page.load.time <- function(theURL, N = 10, wait_time = 0.05) 
{ 
    require(RCurl) 
    require(XML) 
    TIME <- numeric(N) 
    for(i in seq_len(N)) 
    { 
     Sys.sleep(wait_time) 
     TIME[i] <- system.time(webpage <- getURL(theURL, header=FALSE, 
               verbose=TRUE))[3] 
    } 
    return(TIME) 
} 

,并欢迎您的帮助在几个方面:

  1. 是否可以这样做,但也知道页面的哪些部分需要加载哪些部分? (有点像雅虎YSlow
  2. 我有时碰到下面的错误 -

错误curlPerform(卷曲=卷曲, .opts =选择采用,.encoding = .encoding): 故障时接收从 等时间数据停在:0.03 0 43.72

是什么原因造成这一点,如何捕捉这样的错误,并放弃他们有什么建议?

你能想出改善上述功能的方法吗?

更新:我redid函数。它现在是痛苦的慢...

one.page.load.time <- function(theURL, HTML = T, JavaScript = T, Images = T, CSS = T) 
{ 
    require(RCurl) 
    require(XML) 
    TIME <- NULL 


    if(HTML) TIME["HTML"] <- system.time(doc <- htmlParse(theURL))[3] 
    if(JavaScript) { 
     theJS <- xpathSApply(doc, "//script/@src") # find all JavaScript files 
     TIME["JavaScript"] <- system.time(getBinaryURL(theJS))[3] 
    } else (TIME["JavaScript"] <- NA) 
    if(Images) { 
     theIMG <- xpathSApply(doc, "//img/@src") # find all image files 
     TIME["Images"] <- system.time(getBinaryURL(theIMG))[3] 
    } else (TIME["Images"] <- NA) 
    if(CSS) { 
     theCSS <- xpathSApply(doc, "//link/@href") # find all "link" types 
     ss_CSS <- str_detect(tolower(theCSS), ".css") # find the CSS in them 
     theCSS <- theCSS[ss_CSS] 
     TIME["CSS"] <- system.time(getBinaryURL(theCSS))[3] 
    } else (TIME["CSS"] <- NA) 

    return(TIME) 
} 



page.load.time <- function(theURL, N = 3, wait_time = 0.05,...) 
{ 
    require(RCurl) 
    require(XML) 
    TIME <- vector(length = N, "list") 
    for(i in seq_len(N)) 
    { 
     Sys.sleep(wait_time) 
     TIME[[i]] <- one.page.load.time(theURL,...) 
    } 
    require(plyr) 
    TIME <- data.frame(URL = theURL, ldply(TIME, function(x) {x})) 
    return(TIME) 
} 

a <- page.load.time("http://www.r-bloggers.com/", 2) 
a 

回答

2

你的getURL调用将只做一个请求,并获得网页的源HTML。它不会得到CSS或Javascript或其他元素。如果这就是你的网页的'部分'的意思,那么你将不得不为这些部分(在SCRIPT标签或CSS引用等)刮取源HTML,并分别按时间获取它们。

+0

谢谢,有关如何做到这一点的任何建议将有所帮助:) – 2011-04-25 09:28:28

+0

取决于你想要它有多复杂。一些网页将使用Ajax抓取东西,这意味着运行Javascript ... – Spacedman 2011-04-25 09:38:30

+0

mmm ...你知道是否有可能使用R运行Javascript? – 2011-04-25 09:53:48

1

也许来自Omegahat的Spidermonkey可以工作。 http://www.omegahat.org/SpiderMonkey/

+0

感谢格雷格,我怀疑我不会在不久的将来进入这一点,但这是很好的知道。 – 2011-04-25 13:36:38