2016-01-08 87 views
0

我是新來的網絡抓取,我試圖從IMDb垃圾電影預算數據。這裏是我的代碼:RSelenium網站抓取總是返回空

budget=vector() 
for(i in 1:50){ 
remDr$navigate('http://www.imdb.com/search/title?sort=moviemeter,asc&start=1&title_type=feature&year=2011,2011') 
webElems=remDr$findElements('css selector','.wlb_lite+ a') 
webElems[[i]]$clickElement() 
b=remDr$findElements('css selector','.txt-block:nth-child(11)') 
b_text=unlist(lapply(b, function(x){x$getElementText()})) 
if(is.null(b_text)==T){ 
    budget=c(budget,'NULL') 
    } 

if(is.null(b_text)==F){budget=c(budget,'NULL')} 
print(b_text) 
} 

在每個頁面上有50部電影。我想逐一點擊每個鏈接並收集相應的預算數據。如果我不在循環中運行代碼,代碼運行良好。但是當我在循環中運行它時,代碼總是返回'Null'。我擔心這是因爲頁面沒有在循環中完全加載。我嘗試使用'setTimeout'和'setImplicitWaitTimeout'命令,但它們不能很好地工作。有人可以幫我嗎?

回答

2

嘗試

Sys.sleep(time in seconds)

每個循環,而不是setTimeout的。

這已經解決了像我這樣的問題。

+0

謝謝!我試過Sys.sleep,它確實有效!問題是R有沒有辦法檢測網頁是否被加載? – Allen

+0

我猜這在RSelelnium中很直觀。導航到頁面後,只有在加載網頁後才執行下一個代碼行。但是Sys.sleep會給你額外的時間。我猜!!我不確定 – Bharath