您可以通过设置 UserAgent 来下载文件,如下所示:
require(httr)
UA <- "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36"
my_url <- "http://forecast.weather.gov/MapClick.php?lat=29.803&lon=-82.411&FcstType=digitalDWML"
doc <- GET(my_url, user_agent(UA))
现在看看content(doc, "text")
看看它是你在浏览器中看到的文件
然后你可以通过解析它XML
or xml2
。我发现xml2
更容易,但这只是我的口味。两者都有效。
data <- XML::xmlParse(content(doc, "text"))
data2 <- xml2::read_xml(content(doc, "text"))
为什么我必须使用用户代理?
来自 RCurl 常见问题解答:http://www.omegahat.org/RCurl/FAQ.html
为什么 RCurl 不为某些网站所需的用户代理提供默认值?
这是一个哲学问题。首先,libcurl 没有指定默认值,它是其他人构建应用程序的框架。同样,RCurl 是 R 程序员创建应用程序以发出“Web”请求的通用框架。因此,我们也不设置用户代理。我们希望 R 程序员能够做到这一点。在 R 包中使用 RCurl 向站点发出请求的 R 程序员应使用包名称(以及 R 的版本)作为用户代理,并在所有请求中指定这一点。
基本上,我们希望其他人为 useragent 指定一个有意义的值,以便他们正确地识别自己。
请注意,用户(不推荐程序员)可以通过 R 的 option() 函数设置名为 RCurlOptions 的 R 选项。该值应该是命名的curl 选项的列表。这在每个 RCurl 请求中使用,将这些值与调用中指定的值合并。这允许提供默认值。
我猜测http://forecast.weather.gov/拒绝所有没有 UserAgent 的请求。