我想在R中下载以下链接,在浏览器下载后保持文件名。http://www.coingecko.com/price_charts/export/1/usd.xls
请注意,如果您通过浏览器下载文件,文件名将是'btc-usd-max.xls'。然而,如果我运行以下代码,文件名将是'usd.xls'。然而,文件名'btc-usd-max.xls'传达了相关信息。是否可以使用R检索此'btc-usd-max'名称?
link <- 'http://www.coingecko.com/price_charts/export/1/usd.xls'
download.file(url=link, destfile=basename(link), method='auto')
字符串
以下主题中提供的解决方案无法解决此问题。R download.file to a folder keeping original name
上述解依赖于content-disposition
,而content-disposition
不存在。
library(httr)
hd <- HEAD(link)
filename <- gsub(".*name=", "", headers(hd)$`content-disposition`)
型
我试过从httr包中使用HEAD()命令,并使用download.file函数下载文件。
1条答案
按热度按时间sdnqo3pr1#
显示的文件名在一个名为
content-disposition
的响应头中,但只有当你从服务器获得一个状态200时才能显示。在httr中,默认的用户代理会导致服务器返回一个状态403,而不返回这个头,所以你需要添加一个服务器将响应的用户代理。一旦这样做了,它是相当容易提取文件名。
字符串
现在我们有
型
我们可以这样写结果:
型
但奇怪的是,实际的二进制数据似乎是CSV格式而不是xls格式(当我试图在Excel中打开它时,无论是在R中下载还是直接在浏览器中下载,我都会收到警告)。
型
然后将
data
写入根据文件名命名的Excel工作表。