Ho un elenco di circa 13.000 URL da cui estrarre informazioni da, tuttavia, non tutti gli URL esistono effettivamente. In effetti la maggioranza no. Ho appena provato a passare tutti i 13.000 urls tramite html()
ma ci vuole molto tempo. Sto cercando di capire come vedere se gli URL esistono realmente prima di analizzarli su html()
. Ho provato a utilizzare le funzioni httr
e GET()
e le funzioni rcurls
e url.exists()
. Per qualche motivo, url.exist()
restituisce sempre i valori FALSE
anche quando l'URL esiste, e il modo in cui sto usando GET()
restituisce sempre un successo, penso che questo sia dovuto al fatto che la pagina viene reindirizzata.R: Verifica esistenza di url, problemi con httr: GET() e url.exists()
I seguenti URL rappresentano il tipo di pagine che sto parsing, il primo non esiste
urls <- data.frame('site' = 1:3, 'urls' = c('https://www.deakin.edu.au/current-students/unitguides/UnitGuide.php?year=2015&semester=TRI-1&unit=SLE010',
'https://www.deakin.edu.au/current-students/unitguides/UnitGuide.php?year=2015&semester=TRI-2&unit=HMM202',
'https://www.deakin.edu.au/current-students/unitguides/UnitGuide.php?year=2015&semester=TRI-2&unit=SLE339'))
urls$urls <- as.character(urls$urls)
Per GET()
, il problema è che la seconda URL in realtà non esiste ma viene reindirizzata e quindi i rendimenti un successo".
urls$urlExists <- sapply(1:length(urls[,1]),
function(x) ifelse(http_status(GET(urls[x, 'urls']))[[1]] == "success", 1, 0))
Per url.exists()
, ottengo tre FALSO tornato, anche se esistono primo e terzo URL.
urls$urlExists2 <- sapply(1:length(urls[,1]), function(x) url.exists(urls[x, 'urls']))
ho controllato questi due posti 1, 2 ma io preferirei non usare un UserAgent, semplicemente perché non sono sicuro come trovare mia o se possa cambiare per diverse persone che utilizzano questo codice su altri computer. Pertanto rendere il codice più difficile da raccogliere e utilizzare da altri. Entrambe le risposte ai post suggeriscono di utilizzare GET()
in httr
. Sembra che il metodo GET()
sia probabilmente il metodo preferito, ma avrei bisogno di capire come gestire il problema di reindirizzamento.
Qualcuno può suggerire un buon modo in R per verificare l'esistenza di un URL prima di analizzarli su html()
? Sarei anche felice per qualsiasi altro lavoro suggerito in giro per questo problema.
UPDATE:
Dopo esaminando il valore restituito da GET()
ho capito un lavoro in giro, vedere le risposte per i dettagli.
hai un problema concettuale qui. Con molti server Web, se provi ad accedere a una pagina che non esiste, otterrai comunque una pagina! Quello che vuoi veramente fare è verificare il ritorno di un errore 404. –
Grazie a Tim, il tuo commento mi ha aiutato a capire cosa stavo tornando dalla funzione 'GET()'. Penso di aver capito un lavoro. L'ho aggiunto in fondo alla domanda. – Adam