使用R快速查询URL

时间:2014-04-08 14:31:20

标签: r url benchmarking

你必须查询一个网站10000次我正在寻找一个真正快速的方法来做R

作为模板网址:

url <- "http://mutationassessor.org/?cm=var&var=7,55178574,G,A"

我的代码是:

url  <- mydata$mutationassessorurl[1]
rawurl  <- readHTMLTable(url)
Mutator  <- data.frame(rawurl[[10]])

for(i in 2:27566) {
  url  <- mydata$mutationassessorurl[i]
  rawurl  <- readHTMLTable(url)
  Mutator  <- smartbind(Mutator, data.frame(rawurl[[10]]))  
  print(i)
}

使用microbenchmark我有680毫秒的查询时间。我想知道是否有更快的方法来做到这一点!

由于

1 个答案:

答案 0 :(得分:7)

加速http连接的一种方法是保持连接打开 请求之间。以下示例显示了它的不同之处 对于httr。第一个选项与默认行为最相似 RCurl。

library(httr)
test_server <- "http://had.co.nz"

# Return times in ms for easier comparison
timed_GET <- function(...) {
  req <- GET(...)
  round(req$times * 1000)
}

# Create a new handle for every request - no connection sharing
rowMeans(replicate(20, 
  timed_GET(handle = handle(test_server), path = "index.html")
))

##      redirect    namelookup       connect   pretransfer starttransfer 
##          0.00         20.65         75.30         75.40        133.20 
##         total 
##        135.05

test_handle <- handle(test_server)
# Re use the same handle for multiple requests
rowMeans(replicate(20, 
  timed_GET(handle = test_handle, path = "index.html")
))

##      redirect    namelookup       connect   pretransfer starttransfer 
##          0.00          0.00          2.55          2.55         59.35 
##         total 
##         60.80

# With httr, handles are automatically pooled
rowMeans(replicate(20,
  timed_GET(test_server, path = "index.html")
))

##      redirect    namelookup       connect   pretransfer starttransfer 
##          0.00          0.00          2.55          2.55         57.75 
##         total 
##         59.40

注意namelookup和connect的区别 - 如果你正在共享一个 处理你只需要执行一次这些操作,这样可以节省 很长一段时间。

有很多内部请求变化 - 平均最后两个 方法应该非常相似。