2013-01-09 9 views
8

Qualcuno ha mai compilato un modulo Web in remoto da R?Come compilare un modulo online e ottenere risultati in R

Mi piacerebbe fare alcune statistiche sugli archi in R usando i miei punteggi. C'è una pagina web molto utile, che ti dà la classificazione e gli handicap http://www.archersmate.co.uk/, che naturalmente vorrei includere nel mio foglio delle statistiche.

È possibile compilare questo modulo in remoto e riportare i risultati su R ???

Altrimenti dovrei ottenere tutte le tabelle di handicap e inserirle in un database personalmente.

UPDATE: Abbiamo ridotto il problema al fatto che il pulsante di invio del modulo è scritto in javascript.

+3

http://stackoverflow.com/search?q=[r]+webscraping –

+0

@ AriB.Friedman che non è davvero sufficiente .. :) questa domanda implica la comprensione di [hcalc.js] (http: // www .archersmate.co.uk/scripts/ajax_hcalc.js) javascript, analizzando le funzioni 'ajaxCalc()' e 'ajaxiCalc()' per costruire la stringa 'url' usata nella chiamata'/functions/iclass.php'. non vedo un esempio di tutto ciò che usa R su S.O. –

+0

@AnthonyDamico ho sospettato che non lo sarebbe stato. Ma le dà un punto di partenza e un vocabolario, e quindi una speranza di restringere la sua domanda.Hai svolto nobilmente e abilmente molto del lavoro di restringimento della domanda, quindi forse potresti modificare la domanda per essere più mirata? –

risposta

0

Si potrebbe voler dare un'occhiata a Rcurl di postFormhere e c'è anche un bel tutorial here

+0

Non penso che RCurl possa risolverlo, dato che non è un modulo HTML convenzionale. –

0

questo non si potrebbe aiutare, come io sto cercando una risposta a un problema simile, ma guardando l'URL vuoi per raschiare, i moduli da compilare sono Actuall moduli HTML, e si può ottenere la descrizione da:

url <- "http://www.archersmate.co.uk/" 
forms <- getHTMLFormDescription(url) 

veda anche il pacchetto "RHTMLForms" a omegahat.org

0

Questo non può essere fatto in RCurl perché il modulo attiva un evento Ajax, quindi la funzione postForm non sarà sufficiente.

9

È possibile utilizzare il pacchetto RSelenium per compilare e inviare moduli Web e recuperare i risultati.

Il seguente codice sfruttando RSelenium scaricherà i dati per un ingresso ad esempio (Uomo, Under 18, Longbow, Bristol V, 500):

library(RSelenium) 

# Start Selenium Server -------------------------------------------------------- 

checkForServer() 
startServer() 
remDrv <- remoteDriver() 
remDrv$open() 


# Simulate browser session and fill out form ----------------------------------- 

remDrv$navigate('http://www.archersmate.co.uk/') 
remDrv$findElement(using = "xpath", "//input[@value = 'Male']")$clickElement() 
Sys.sleep(2) 
remDrv$findElement(using = "xpath", "//select[@id = 'drpAge']/option[@value = 'Under 18']")$clickElement() 
remDrv$findElement(using = "xpath", "//input[@value ='Longbow']")$clickElement() 
remDrv$findElement(using = "xpath", "//select[@id = 'rnd']/option[@value = 'Bristol V']")$clickElement() 
remDrv$findElement(using = "xpath", "//input[@id ='scr']")$sendKeysToElement(list('5', '0', '0')) 
remDrv$findElement(using = "xpath", "//input[@id = 'cmdCalc']")$clickElement() 

# Retrieve and download results injecting javascript --------------------------- 

Sys.sleep(2) 
clsf <- remDrv$executeScript(script = 'return $("#txtClass").val();', args = list())[[1]] 
hndcp <- remDrv$executeScript(script = 'return $("#txtHandicap").val();', args = list())[[1]] 

remDrv$quit() 
remDrv$closeServer() 

Il browser predefinito per RSelenium è Firefox. Tuttavia, RSelenium supporta anche la navigazione headless utilizzando PhantomJS. Per sfruttando PhanomJS non vi resta che

  • download PhantomJS e posizionarlo nel percorso di utenti
  • sostituire i frammenti di codice all'inizio e alla fine, come descritto di seguito

navigazione di default (come mostrato sopra):

checkForServer() 
startServer() 
remDrv <- remoteDriver() 

... 

remDrv$quit() 
remDrv$closeServer() 

navigazione senza testa:

pJS <- phantom() 
remDrv <- remoteDriver(browserName = 'phantomjs') 

... 

remDrv$close() 
pJS$stop() 
+0

Dal codice sorgente come sapevi scegliere: using = "xpath", "// input [@value = 'Male']" ?? Come faccio a sapere come compilare il testo su questa pagina web: https://ois.dk/ –

Problemi correlati