È 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()
http://stackoverflow.com/search?q=[r]+webscraping –
@ 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. –
@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? –