1

我使用 R 的 XML 和 RCurl 包从网站获取数据。该脚本需要废弃 6,000,000 页,因此我创建了一个循环。

for (page in c(1:6000000)){

 my_url = paste('http://webpage.....')
 page1 <- getURL(my_url, encoding="UTF-8")
 mydata <- htmlParse(page1, asText=TRUE, encoding="UTF-8")
 title <- xpathSApply(mydata, '//head/title', xmlValue, simplify = TRUE, encoding="UTF-8")

.....
.....
.....}

但是,经过几个循环后,我收到错误消息:

curlPerform 中的错误(curl = curl,.opts = opts,.encoding = .encoding):连接超时

问题是我不明白“超时”是如何工作的。有时该过程在 700 页之后结束,而其他时候在 1000、1200 等页面之后结束。台阶不稳定。当连接超时时,我在 15 分钟内无法从笔记本电脑访问此网页。我想过每报废 1000 页使用命令将进程延迟 15 分钟

if(page==1000) Sys.sleep(901)

,但没有任何改变。

任何想法出了什么问题以及如何克服这个问题?

4

2 回答 2

2

curl您可以使用命令在 R 中调用本机安装System()。这样,您可以访问curl当前不支持的所有选项,RCurl例如--retry <num>. 该选项--retry <num>将导致发出的curl查询在每次失败后以更长的时间重复重试,即在第一次失败后重试 1 秒,在第二次失败后 2 秒,在第三次失败后 4 秒,等等。cURL 站点http://curl.haxx.se/docs/manpage.html也提供了其他时间控制选项。

于 2012-11-26T22:53:52.503 回答
1

我解决了。只是添加Sys.sleep(1)到每次迭代中。

于 2011-11-05T10:43:00.750 回答