2015-03-18 9 views
6

Cercando di scaricare le informazioni da una pagina web specifica, e anche se si apre bene in qualsiasi browser, RCurl dice che non esiste:Rcurl: url.exists restituisce false quando URL non esiste

url.exists("http://www.transfermarkt.es/liga-mx-apertura/startseite/wettbewerb/MEXA") 
[1] FALSE 

stessi risultati usando ".de".

url.exists("http://www.transfermarkt.de/liga-mx-clausura/startseite/wettbewerb/MEX1") 
[1] FALSE 

Inoltre restituisce un errore quando si utilizzano altre funzioni del RCurl

> htmlParse("http://www.transfermarkt.es/liga-mx-apertura/startseite/wettbewerb/MEXA") 
Error: failed to load HTTP resource 

> htmlTreeParse("http://www.transfermarkt.es/liga-mx-apertura/startseite/wettbewerb/MEXA") 
Error: failed to load HTTP resource 

> htmlParse(getURL("http://www.transfermarkt.es/liga-mx-apertura/startseite/wettbewerb/MEXA")) 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
<html> 
<head><title>403 Forbidden</title></head> 
<body bgcolor="white"> 
<center><h1>403 Forbidden</h1></center> 
<hr> 
<center>nginx</center> 
</body> 
</html> 

Perché succede questo? Come si può usare con successo htmlParse con questa pagina Web?

EDIT:

mi sto familiarità con il pacchetto HTTR, e questo funziona bene:

content(GET("http://www.transfermarkt.es/liga-mx-apertura/startseite/wettbewerb/MEXA")) 

risposta

4

Questo server web sembra restituire un errore 403 Forbidden quando la richiesta HTTP non include una stringa user-agent. RCurl per impostazione predefinita non passa un user-agent. È possibile impostarne uno con il parametro useragent=.

myurl<-"http://www.transfermarkt.es/liga-mx-apertura/startseite/wettbewerb/MEXA" 
url.exists(myurl, useragent="curl/7.39.0 Rcurl/1.95.4.5") 
# [1] TRUE 
htmlTreeParse(getURL(myurl, useragent="curl/7.39.0 Rcurl/1.95.4.5")) 

Il pacchetto httr è un po 'più bello di RCurl per fare richieste HTTP a mio parere (e imposta una stringa user-agent per impostazione predefinita). Ecco il codice corrispondente

library(httr) 
GET(myurl)