相关疑难解决方法(0)

Rcurl:当url存在时,url.exists返回false

尝试从特定网页下载信息,虽然它在任何浏览器中都可以正常使用,但RCurl表示它不存在:

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

使用".de"时的结果相同.

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

使用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>
Run Code Online (Sandbox Code Playgroud)

为什么会这样?如何在这个网页上成功使用htmlParse?

编辑:

我熟悉httr包,这很好用:

content(GET("http://www.transfermarkt.es/liga-mx-apertura/startseite/wettbewerb/MEXA"))
Run Code Online (Sandbox Code Playgroud)

r rcurl httr

8
推荐指数
1
解决办法
2836
查看次数

如何确定url对象是否返回'404 Not Found'?

简单地说:如果

x <- read.csv(url)
Run Code Online (Sandbox Code Playgroud)

存在,然后R将返回该URL的内容.一个很好的例子,如果你想尝试一下,可能是" http://ichart.finance.yahoo.com/table.csv?s=IBM&a=00&b=1&c=2008&d=03&e=4&f=2014&g=d&ignore=.csv ".该特定URL如果被分配给url并按上述方式运行,则会将包含过去5年IBM股票数据的Yahoo网站的data.frame加载到x中.

但是,如何预先知道,如果任何给定的网址会让你404?

就像是:

is.404.or.not(url)
Run Code Online (Sandbox Code Playgroud)

或者可能

status(connect.to(url))
Run Code Online (Sandbox Code Playgroud)

谢谢!

url r http-status-code-404

7
推荐指数
1
解决办法
3080
查看次数

标签 统计

r ×2

http-status-code-404 ×1

httr ×1

rcurl ×1

url ×1