在R中下载csv文件

时间:2015-10-12 04:26:37

标签: r csv url

我正在尝试用R下载我国的历史股票交易。我尝试使用download.file()函数。实际上,下载了一个文件但是是一个空的电子表格。显然,如果我在浏览器中使用此URL,我下载的文件实际上就是我想要的文件。

我很乐意使用quantmod,但该套餐仅适用于较大的市场

url<-"https://www.ccbolsa.cl/apps/script/detalleaccion/Transaccion.asp?Nemo=AFPCAPITAL&Menu=H"
destfile <- "/home/hector/TxHistoricas.xls"
download.file(url, destfile)

提前致谢。

1 个答案:

答案 0 :(得分:0)

如果你不想使用硒,你可以陪审这样的东西:

library(rvest)
library(httr)
library(stringr)

URL <- "https://www.ccbolsa.cl/apps/script/detalleaccion/Transaccion.asp?Nemo=AFPCAPITAL&Menu=H"

获取初始网址:

res <- html_session(URL, timeout(30))

它嵌入了一个表单,它使用javascript提交以获取表单:

inputs <- html_nodes(res, "input")

它使用最后一个javascript条目在页面加载时进行重定向,因此我们需要它的位置:

scripts <- html_nodes(res, "script")
action <- html_text(scripts[[length(scripts)]])

这是要提交的新网址:

base_url <- "https://www.ccbolsa.cl/apps/script/detalleaccion"
loc <- str_match(action, '\\.action *= *"(.*)"')[,2]
doc_url <- sprintf("%s/%s", base_url, loc)

收集所有查询参数:

query <- lapply(inputs, xml_attr, "value")
names(query) <- sapply(inputs, xml_attr, "name")

现在我们必须创建一个新的POST请求,其查询编码为&#34; form&#34;,使用并提供重定向网址(超时对我来说是必要的)。这写了&#34; xls&#34;内容到文件:

ret <- POST(doc_url, 
            body=query, 
            encode="form",
            add_headers(Referer=URL),
            write_disk("fil.xls", overwrite=TRUE),
            timeout(30))

它是一个XLS文件:

ret$headers$`content-type`
## [1] "application/vnd.ms-excel"

但它确实是一个HTML表格,所以你可以真正做到:

ret <- POST(doc_url, 
            body=query, 
            encode="form",
            add_headers(Referer=URL),
            timeout(30))

doc <- read_html(content(ret, as="text"))
dat <- html_table(html_nodes(doc, "table"), fill=TRUE)

获取您正在寻找的内容(dat列表中有两个丑陋的表格,您可能希望将header=TRUE用作html_table的附加参数。

我不确定&#34;动态&#34;这个解决方案,但那是可测试/可验证的。