2016-03-05 2 views
2

В настоящее время на этом site Я соскабливаю в информации о снимке. Чтобы очистить информацию, мне нужно сделать цикл for для многих снимков. Я нахожу количество снимков, нажимая «Статистика команды» и находя количество попыток цели поля.R Как сделать цикл for без знания длины?

Я хотел бы сделать правильный for loop, не указывая количество снимков.

То, что я сейчас делаю:

shotchart <- data.frame(shot=as.vector(0), class=as.vector(0), data_homeaway=as.vector(0), 
        data_period=as.vector(0), player_id=as.vector(0), data_text=as.vector(0), 
        location=as.vector(0), gamenumber= as.vector(0)) 

for (i in 1:54) 
{ 
text <-paste0("//*[(@class='shots home-team')]//*[(@id)][",i,"]") 
shotchart[nrow(shotchart)+1,1]<- unlist(re$findElement(using='xpath',text)$getElementAttribute('id')) 
shotchart[nrow(shotchart),2]<- unlist(re$findElement(using='xpath', text)$getElementAttribute('class')) 
shotchart[nrow(shotchart),3]<-unlist(re$findElement(using='xpath', text)$getElementAttribute('data-homeaway')) 
shotchart[nrow(shotchart),4]<-unlist(re$findElement(using='xpath', text)$getElementAttribute('data-period')) 
shotchart[nrow(shotchart),5]<-unlist(re$findElement(using='xpath', text)$getElementAttribute('data-shooter')) 
shotchart[nrow(shotchart),6]<-unlist(re$findElement(using='xpath', text)$getElementAttribute('data-text')) 
shotchart[nrow(shotchart),7]<-unlist(re$findElement(using='xpath', text)$getElementAttribute('style')) 
shotchart[nrow(shotchart),8]<-k-1 

} 

Любая помощь будет оценена. Пожалуйста, дайте мне знать, нужна ли какая-либо дополнительная информация.

+0

try 'help ('for')' и почему вы отметили javascript – rawr

+1

Вообще говоря, если вы не знаете точку завершения априори, предпочтительно использовать 'while()' вместо 'for() '. С того времени вы можете проверить на каждой итерации, если вы достигли цели. – RHertel

+3

это может занять некоторое время – baptiste

ответ

3
library(RSelenium) 
checkForServer() 
startServer() 
Sys.sleep(5) 
re<-remoteDriver() 
re$open() 
re$navigate("http://espn.go.com/mens-college-basketball/playbyplay?gameId=400830392") 

shotchart <- data.frame(shot=as.vector(0), class=as.vector(0), data_homeaway=as.vector(0), 
         data_period=as.vector(0), player_id=as.vector(0), data_text=as.vector(0), 
         location=as.vector(0), gamenumber= as.vector(0)) 
error="Error : \t Summary: NoSuchElement\n \t Detail: An element could not be located on the page using the given search parameters.\n \t class: org.openqa.selenium.NoSuchElementException\n" 
i<-1 
element=0 
while ((i>0)&(element[1]!=error)) 
{ 
    text <-paste0("//*[(@class='shots home-team')]//*[(@id)][",i,"]") 
    element<- try(unlist(re$findElement(using='xpath', text)$getElementAttribute('id')),silent = TRUE) 
    if (element[1]==error) 
    break; 
    shotchart[nrow(shotchart)+1,1]<- unlist(re$findElement(using='xpath',text)$getElementAttribute('id')) 
    shotchart[nrow(shotchart),2]<- unlist(re$findElement(using='xpath', text)$getElementAttribute('class')) 
    shotchart[nrow(shotchart),3]<-unlist(re$findElement(using='xpath', text)$getElementAttribute('data-homeaway')) 
    shotchart[nrow(shotchart),4]<-unlist(re$findElement(using='xpath', text)$getElementAttribute('data-period')) 
    shotchart[nrow(shotchart),5]<-unlist(re$findElement(using='xpath', text)$getElementAttribute('data-shooter')) 
    shotchart[nrow(shotchart),6]<-unlist(re$findElement(using='xpath', text)$getElementAttribute('data-text')) 
    shotchart[nrow(shotchart),7]<-unlist(re$findElement(using='xpath', text)$getElementAttribute('style')) 
    shotchart[nrow(shotchart),8]<-i-1 
    i<-i+1 
} 

Я не уверен, что означает ваша переменная k.

Я принял совет со всех комментариев.

+0

Как бы «я когда-нибудь опускался ниже 0? Если это никогда не было, нужно ли это во время условия? –