Rcurl: url.exists returns false when url does exist
Rcurl: url.exists returns false when url does exist
尝试从特定网页下载信息,尽管它在任何浏览器中都可以正常打开,但 RCurl 表示它不存在:
url.exists("http://www.transfermarkt.es/liga-mx-apertura/startseite/wettbewerb/MEXA")
[1] FALSE
使用“.de”时结果相同。
url.exists("http://www.transfermarkt.de/liga-mx-clausura/startseite/wettbewerb/MEX1")
[1] FALSE
使用RCurl的其他功能returns也是returns错误
> 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>
为什么会这样?
如何在此网页上成功使用 htmlParse?
编辑:
我越来越熟悉 httr 包了,这很好用:
content(GET("http://www.transfermarkt.es/liga-mx-apertura/startseite/wettbewerb/MEXA"))
当您的 HTTP 请求不包含用户代理字符串时,该网络服务器似乎 return 403 禁止错误。 RCurl 默认不传递用户代理。您可以使用 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"))
在我看来,httr
包在发出 HTTP 请求方面比 RCurl 好一点(它默认设置用户代理字符串)。下面是对应的代码
library(httr)
GET(myurl)
尝试从特定网页下载信息,尽管它在任何浏览器中都可以正常打开,但 RCurl 表示它不存在:
url.exists("http://www.transfermarkt.es/liga-mx-apertura/startseite/wettbewerb/MEXA")
[1] FALSE
使用“.de”时结果相同。
url.exists("http://www.transfermarkt.de/liga-mx-clausura/startseite/wettbewerb/MEX1")
[1] FALSE
使用RCurl的其他功能returns也是returns错误
> 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>
为什么会这样? 如何在此网页上成功使用 htmlParse?
编辑:
我越来越熟悉 httr 包了,这很好用:
content(GET("http://www.transfermarkt.es/liga-mx-apertura/startseite/wettbewerb/MEXA"))
当您的 HTTP 请求不包含用户代理字符串时,该网络服务器似乎 return 403 禁止错误。 RCurl 默认不传递用户代理。您可以使用 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"))
在我看来,httr
包在发出 HTTP 请求方面比 RCurl 好一点(它默认设置用户代理字符串)。下面是对应的代码
library(httr)
GET(myurl)