2015-03-18 32 views
6

Đang cố gắng để tải thông tin từ một trang web cụ thể, và mặc dù nó sẽ mở ra tốt trong bất kỳ trình duyệt, RCurl nói nó không tồn tại:Rcurl: url.exists trả về false khi url không tồn tại

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

kết quả tương tự khi sử dụng ".de".

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

Nó cũng trả về một lỗi khi sử dụng các chức năng khác của 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> 

Tại sao điều này xảy ra? Làm cách nào để sử dụng thành công htmlParse với trang web này?

EDIT:

Tôi nhận được quen thuộc với gói httr, và điều này làm việc tốt:

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

Trả lời

4

Đó webserver dường như trả về một lỗi 403 Forbidden khi yêu cầu HTTP của bạn không bao gồm chuỗi tác nhân người dùng. RCurl theo mặc định không vượt qua tác nhân người dùng. Bạn có thể đặt một tham số với thông số 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")) 

Gói httr là một chút đẹp hơn RCurl để làm các yêu cầu HTTP theo ý kiến ​​của tôi (và nó đặt ra một chuỗi user-agent theo mặc định). Đây là mã tương ứng

library(httr) 
GET(myurl) 
Các vấn đề liên quan