2011-10-01 213 views
1

我使用R的XML和RCurl包來從網站獲取數據。 該腳本需要廢棄6,000,000頁,所以我創建了一個循環。RCurl,錯誤:連接超時

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") 

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

然而,幾圈後,我得到的錯誤信息:

Error in curlPerform(curl = curl, .opts = opts, .encoding = .encoding) : connection time out

的問題是,我不明白的「超時」是如何工作的。有時候,這個過程會在700頁之後結束,而其他時間則在1000,1200頁之後結束。這一步並不穩定。 當連接超時時,我無法從筆記本電腦訪問此網頁15分鐘。 我想用一個命令來拖延這一進程15分鐘,每1000頁報廢

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

,但什麼都沒有改變。

任何想法出了什麼問題,以及如何克服?

+0

可能重複的[RCurl,錯誤:無法連接到主機](http://stackoverflow.com/questions/7620123/rcurl-error-couldnt-connect-to-host) – csgillespie

+1

我認爲你需要處理HTTP錯誤,如果你打算通過6M頁面。另外,你說「一個網站」 - 如果你打的是同一個網站,我敢打賭,某種自適應防火牆正在踢,暫時阻止你。 (你是尊重robots.txt,對吧?) –

+0

我解決了它。剛添加Sys.sleep(1)到每個迭代 – Def

回答

1

我解決了它。每次迭代只需添加Sys.sleep(1)

2

您可以使用命令System()在R中撥打本地安裝curl。這樣,您可以訪問RCurl當前不支持的所有curl選項,例如--retry <num>。選項--retry <num>將導致發出的curl查詢在每次失敗後的更長時間內重複嘗試,即,第一次失敗後1秒,第二次失敗後2秒,第三次失敗後4秒等等。其他時間控制選項也可在cURL站點http://curl.haxx.se/docs/manpage.html處獲得。