2016-01-08 6 views
0

Я новичок в веб-соскабливании, и я пытаюсь избавиться от данных бюджета фильма от IMDb. Вот мой код:RSelenium web scraping всегда возвращает Null

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