雁起平沙的网络日志

数量金融与R

用R获取flash中的数据

| Comments

本文主要讨论如何用R语言从flash中获取数据

某天我需要获取复旦人民币汇率指数的数据。此前我们介绍过从网页抓取数据的两种方法

  1. 用url给服务器提交参数获取数据文件,例如用R获取大连商品交易所历史数据这篇文章里提到的方法
  2. 解析html代码以获取数据,例如用R获取郑州商品交易所历史数据这篇文章里提到的方法

而复旦的这个网页,不提供数据文件的下载,从html中也不能解析出数据。实际上,该网页中的flash向服务器发送请求,服务器返回数据给flash并显示出图形和表格。

http://cos.name/cn/topic/107729Xiao Nan版主介绍的办法,我用chrome看了下页面

network -> XHR

可以看到,上图中的表是从2012年12月12日到2013年2月10日的数据,对应的数据来自http://ifsfd.fudan.edu.cn/fdurmb/data?type=0%2C1%2C2&df=2012%2F12%2F12&dt=2013%2F02%2F10,打开这个链接,可以看出这是JSON格式,用R的rjson和RJSONIO包都可以解析JSON格式的数据。

我们来研究一下上面的这个链接,df=2012%2F12%2F12&dt=2013%2F02%2F10规定了从开始到结束的日期,如果开始日期是YYYY年MM月DD日,结束日期是yyyy年mm月dd日,那么对应的字符串是df=YYYY%2FMM%2FDD&dt=yyyy%2Fmm%2Fdd

那么文本开头提出的问题,可用下面的代码解决

(readFudan.r) download
1
2
3
4
5
6
7
8
9
10
11
12
13
# 从复旦人民币汇率指数网站读取数据 http://ifsfd.fudan.edu.cn/fdurmb/indexchart1.jsp
# 更多细节请看 http://cos.name/cn/topic/109132

require(RCurl)
require(rjson)

fdjson <- getURL("http://ifsfd.fudan.edu.cn/fdurmb/data?type=0%2C1%2C2&df=2012%2F12%2F12&dt=2013%2F02%2F10")
fdlist <- fromJSON(fdjson)
fdm <- matrix(unlist(fdlist),ncol=4,byrow=T)
fddf <- data.frame(fdm, stringsAsFactors = F)
fddf[,2:4] <- sapply(fddf[,2:4],as.numeric)
colnames(fddf) <- c("date","人民币名义有效汇率指数","人民币实际有效汇率指数","人民币盯住一篮子货币模拟汇率指数")
write.csv(fddf,"fudan.csv",row.names = F )

Comments