用R从sina抓取“复权因子”

COS论坛 | 统计之都 COS论坛 | 统计之都 软件应用 S-Plus & R语言 用R从sina抓取“复权因子”

该主题包含 2 条回复,3个帖子,最后由  SkyFx4 月, 1 周 之前 更新。

查看 3 个帖子 - 1 到 3(总计 3 个)
  • 作者
    帖子
  • 1 楼

    xuruilong100
    Participant

    代码:

    #下载复权因子数据
    #
    require('XML')
    require('bitops')
    require('RCurl')
    symbol<-readLines("symbol.txt", n=2571)#获取股票代码
    year<-readLines("year.txt", n=24)#1990-2013
    jidu<-c("4", "3", "2", "1")#季度
    l1<-"http://vip.stock.finance.sina.com.cn/corp/go.php/vMS_FuQuanMarketHistory/stockid/"
    l2<-".phtml?year="
    l3<-"&jidu="
    dim<-c(1,8)
    for (i in 1:2571)
    {
      sym=symbol[i]
      cat('begin\t',sym,'\t',i,'\n')
      for (y in year)
      {
        for (jd in jidu)
        {
          cat(sym,'\t',i,'\t',y,'\t',jd,'\n')
          link<-paste(l1,sym,l2,y,l3,jd,sep="")
          my.doc <-htmlParse(link)
          my.node<-getNodeSet(my.doc,"//table")
          while (length(my.node)==0)#反复链接网站,直到成功为止
          {
            my.doc <-htmlParse(link)
            my.node<-getNodeSet(my.doc,"//table")
          }
          my.tab <-readHTMLTable(my.node[[20]])
          l = length(my.tab$V1)
          if (l<3)
          {
            next
          }
          symlist<-rep(sym,times=l-2)
          tab<-my.tab[3:l,dim]
          tab$s<-symlist#生成数据表
          f<-paste("factor/",sym,".txt",spe="")#写入文件
          write.table(tab,file=f,append=TRUE,quote=FALSE,sep=',',row.names=F,col.names=F)
        }
      }
      cat('end\t',sym,'\n')
    }
    

    以上代码可以成功运行,不过消耗内存随时间线性增长,求大神修改[s:11]

    2 楼

    practix
    Participant
    my.node<-getNodeSet(my.doc,"//table")
    my.tab <-readHTMLTable(my.node[[20]])

    表的ID是FundHoldSharesTable,因此上述语句可简化为:

    my.node<-getNodeSet(my.doc,"//table[@id='FundHoldSharesTable']")
    my.tab <-readHTMLTable(my.node[[1]])
    3 楼

    SkyFx
    Participant

    1、中间过程写函数
    2、不要用显式循环,多用apply
    3、玩多线程

查看 3 个帖子 - 1 到 3(总计 3 个)

您必须先登录才能回复该主题。