美文网首页
一键下载A股所有上市公司的季报年报数据

一键下载A股所有上市公司的季报年报数据

作者: 诗与星空 | 来源:发表于2017-06-19 14:24 被阅读3521次

    收到知乎上一名知友友情赠送的Python代码,可以一键获取3000多支股票的全部财务数据。由于他抽取的是2016年的年报数据,考虑到2017年季报数据大部分都已公告,为了更好的进行数据对比分析,我研究了一下代码,决定写一个Ruby的。

    本程序可以实现所有股票的资产负债表、利润表、现金流量表和主要指标表的下载,保存为程序容易识别的CSV格式。

    程序完善之后我会对数据进行整理分析,相对于年报,季报核心项目发生重大变化的,都会悉数用程序跑出来。

    本代码使用了网易财经的报表接口。数据为该公司上市以来所有季报、年报数据,按季度排列:

    知友对年报数据进行了整理,可以方便的查询分析,本程序完善后,我也会做一个类似的A股全市场分析报表。

    程序执行界面:

    # -*- coding: UTF-8 -*-
    require 'rubygems'
    require 'hpricot'
    require 'open-uri'
    x = 0
    
    #获取股票列表文件stocklist.txt的总行数
    def wc(filename)
      $nline = $nword = $nchar = 0 #$符号表示全局变量,普通变量不在def外起作用
      File.open(filename) do |io|
        io.each_line do |line|
          words = line.split(/\s+/).reject{|w| w.empty? }
          #本例中使用了split方法分割单词,当行首有空白字符时,split方法的执行结果中会产生空白字符串,因此我们
          #会删除该空白字符串。
          $nline += 1
          $nword += words.length
          $nchar += line.length
        end
      end
      #puts "文件的行数为:#{$nline}\n文件的单词数为:#{$nword}\n文件的字符数为:#{$nchar}"
      puts "股票池股票数:#{$nword}\n"
    
    end
    wc("d:/rb/stock/downreports/stocklist.txt")
    #puts  $nword
    
    #循环开始
    
    while x <=  $nword - 1
    
    #puts "轮询中:"
    
    stock_lines = File.readlines("d:/rb/stock/downreports/stocklist.txt");  
    
    
    s_code = stock_lines[x]
    scode = s_code.chomp  # chomp用来删除文本里带过来的换行符
    
    
    puts "====================="
    puts "正在下载#{scode}的资产负债表"
    
    #确定csv文件命名规则
    file1_path = "d:\\stock\\zcfzb\\"
    file1_name = scode + "zcfzb.csv"
    file1_name_path = file1_path + file1_name
    
    #将网易财经接口的数据保存为csv文件
    File.open(file1_name_path, 'wb') {|f| f.write(open('http://quotes.money.163.com/service/zcfzb_' + "#{scode}"+'.html') {|f1| f1.read})}
    
    #防止接口调用过频被踢,暂停3秒
    sleep(3)
    
    puts "资产负债表下载完毕"
    
    puts "====================="
    puts "正在下载#{scode}的利润表"
    
    #确定csv文件命名规则
    file2_path = "d:\\stock\\lrb\\"
    file2_name = scode + "lrb.csv"
    file2_name_path = file2_path + file2_name
    
    #将网易财经接口的数据保存为csv文件
    File.open(file2_name_path, 'wb') {|f| f.write(open('http://quotes.money.163.com/service/lrb_' + "#{scode}"+'.html') {|f1| f1.read})}
    
    #防止接口调用过频被踢,暂停3秒
    sleep(3)
    
    puts "利润表下载完毕"
    
    puts "====================="
    puts "正在下载#{scode}的现金流量表"
    
    #确定csv文件命名规则
    file3_path = "d:\\stock\\xjllb\\"
    file3_name = scode + "xjllb.csv"
    file3_name_path = file3_path + file3_name
    
    #将网易财经接口的数据保存为csv文件
    File.open(file3_name_path, 'wb') {|f| f.write(open('http://quotes.money.163.com/service/xjllb_' + "#{scode}"+'.html') {|f1| f1.read})}
    
    #防止接口调用过频被踢,暂停3秒
    sleep(3)
    
    
    puts "现金流量表下载完毕"
    
    puts "====================="
    puts "正在下载#{scode}的主要财务指标表"
    
    #确定csv文件命名规则
    file4_path = "d:\\stock\\zycwzb\\"
    file4_name = scode + "zycwzb.csv"
    file4_name_path = file4_path + file4_name
    
    #将网易财经接口的数据保存为csv文件
    File.open(file4_name_path, 'wb') {|f| f.write(open('http://quotes.money.163.com/service/zycwzb_' + "#{scode}"+'.html') {|f1| f1.read})}
    
    #防止接口调用过频被踢,暂停3秒
    sleep(3)
    
    puts "主要财务指标表下载完毕"
    x = x + 1
    end
    

    相关文章

      网友评论

          本文标题:一键下载A股所有上市公司的季报年报数据

          本文链接:https://www.haomeiwen.com/subject/xrbgqxtx.html