2015-03-18 9 views
6

belirli bir web sayfasından bilgi indirmeye çalışma var ve herhangi bir tarayıcıda ince açılır rağmen, RCurl o da mevcut değil diyor false döndürür:Rcurl: url.exists url yaptığında

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

aynı sonuçları ne zaman ".de" kullanarak. Bunun nedeni nedir 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> 

diğer işlevlerini kullanırken

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

Ayrıca hata verir? Bu web sayfası ile htmlParse'i nasıl başarılı bir şekilde kullanabilirsiniz?

DÜZENLEME:

Ben HTTR paketiyle aşina alıyorum ve bu sadece çalışıyor:

web sunucusu HTTP isteği içermez zaman 403 Forbidden hatası verecek şekilde görünür Yani
content(GET("http://www.transfermarkt.es/liga-mx-apertura/startseite/wettbewerb/MEXA")) 

cevap

4

Bir kullanıcı aracı dizesi. RCurl, varsayılan olarak bir kullanıcı aracısını geçmez. useragent= parametresiyle bir tane ayarlayabilirsiniz.

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")) 

httr paket Bence HTTP isteklerini yapmak için RCurl biraz daha güzel (ve varsayılan olarak bir kullanıcı aracısı dizesini ayarlar). İşte ilgili kod

library(httr) 
GET(myurl)