我想抓取 http://ifsfd.fudan.edu.cn/fdurmb/indexchart1.jsp 里flash的数据
用chrome的审查元素 -》Network -》XHR 刷新页面 就能看出取数据的地址是 http://ifsfd.fudan.edu.cn/fdurmb/data?df=2000%2F01%2F03&type=0%2C1%2C2&dt=2013%2F01%2F16
这是json格式,好在R里面有读取JSON的包rjson
<br />
require(rjson)<br />
require(RCurl)<br />
fdjson <- getURL("http://ifsfd.fudan.edu.cn/fdurmb/data?df=2000%2F01%2F03&type=0%2C1%2C2&dt=2013%2F01%2F16")<br />
fdlist <- fromJSON(fdjson)<br />
</p>
这样读取的json是list
</p>
<p>> fdlist[[1]]<br />
$d<br />
[1] "2000-01-03"</p>
<p>$v0<br />
[1] 100.995</p>
<p>$v1<br />
[1] 105.7158</p>
<p>$v2<br />
[1] 105.1078<br />
</p>
我希望得到一个数据框,所以要做一下处理
<br />
n <- length(fdlist)</p>
<p>for(i in 1:n){<br />
if(i == 1){<br />
res <- as.data.frame(fdlist[[i]])<br />
}else{<br />
res <- rbind(res,as.data.frame(fdlist[[i]]))<br />
}<br />
}</p>
<p>res$d <- as.character(res$d)</p>
<p>
</p>
有没有其他办法呢,搜了一下,下面是几种方法
<br />
# 用plyr包里的ldply函数<br />
require(plyr)<br />
fddf <- ldply(fdlist,data.frame)</p>
<p># 用do.call<br />
n <- length(fdlist)<br />
for(i in 1:n){<br />
fdlist[[i]] <- data.frame(fdlist[[i]])<br />
}</p>
<p>fddf <- do.call("rbind",fdlist)</p>
<p># 用rbind.fill<br />
require(plyr)<br />
fddf <- rbind.fill(fdlist)<br />
</p>