我正在尝试用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)
提前致谢。
答案 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;这个解决方案,但那是可测试/可验证的。