使用Rcurl计算页面元素的加载时间? (R)
问题描述:
我开始使用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)
}
,并欢迎您的帮助在几个方面:
- 是否可以这样做,但也知道页面的哪些部分需要加载哪些部分? (有点像雅虎YSlow)
- 我有时碰到下面的错误 -
错误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
答
你的getURL调用将只做一个请求,并获得网页的源HTML。它不会得到CSS或Javascript或其他元素。如果这就是你的网页的'部分'的意思,那么你将不得不为这些部分(在SCRIPT标签或CSS引用等)刮取源HTML,并分别按时间获取它们。
答
也许来自Omegahat的Spidermonkey可以工作。 http://www.omegahat.org/SpiderMonkey/
+0
感谢格雷格,我怀疑我不会在不久的将来进入这一点,但这是很好的知道。 – 2011-04-25 13:36:38
谢谢,有关如何做到这一点的任何建议将有所帮助:) – 2011-04-25 09:28:28
取决于你想要它有多复杂。一些网页将使用Ajax抓取东西,这意味着运行Javascript ... – Spacedman 2011-04-25 09:38:30
mmm ...你知道是否有可能使用R运行Javascript? – 2011-04-25 09:53:48