哪里可以下载上市公司的财务报表?

要分析财务报表,首先要获得报表。

一般的获取方式当然是下载上市公司公开的财报,下面介绍一种获取全部上市公司分行业财报数据的方法(适用于有python基础者)。

首先,要获取各个行业股票代码及名称,获取方式见下面的文章。

行走的守望者:selenium爬取上市公司全部行业及分行业股票行情数据​

没时间看文章的可以直接使用文中末尾的代码,代码的爬取结果是下图这样的,其中每个csv文档存储了该行业的所有股票代码,名称,行情等信息。

软银集团股票代码_我要集团股票代码多少_人民电器集团股票代码

下面可以分别读取各个行业的股票代码,并根据股票代码下载相应的财务报表,假设上图的文件存放在E:/hangye/.. 下面以医药制造行业为例爬取该行业所有股票行情及财务数据。

首先,读取医药行业股票代码(其他行业同理),

import pandas as pd
df = pd.read_csv('E:/hangye/医药制造.csv',encoding="gbk",header=None)
stockid = list(df.iloc[:,1].astype(str))
newid = []   #为了将股票代码补齐
for i in stockid:
    i = i.zfill(6)
    newid.append(i)

然后,通过网易财经api直接下载相应股票的财务数据,

#爬取基本财务指标
import re,urllib
from time import sleep
for count in newid:
    url  = 'http://quotes.money.163.com/service/zycwzb_'+str(count)+'.html?type=report'
    print(url)
    while True:
        try:
            content = urllib.request.urlopen(url,timeout=2).read()
            content = content.decode("gbk").encode("utf-8")
            with open('E:/医药行业/cwzb/'+str(count)+'cwzb.csv','wb')as f:
                f.write(content)
            data = pd.read_csv('E:/医药行业/cwzb/'+str(count)+'cwzb.csv')
            break
            sleep(1) 
        except Exception as e:
            print(e,count)
            break
#爬取资产负债表
import re,urllib
from time import sleep
for count in newid:
    url  = 'http://quotes.money.163.com/service/zcfzb_'+str(count)+'.html'
    print(url)
    while True:
        try:
            content = urllib.request.urlopen(url,timeout=2).read()
            content = content.decode("gbk").encode("utf-8")
            with open('E:/医药行业/zcfzb/'+str(count)+'zcfzb.csv','wb')as f:
                f.write(content)
            data = pd.read_csv('E:/医药行业/zcfzb/'+str(count)+'zcfzb.csv')
            break
            sleep(3) 
        except Exception as e:
            print(e,count)
            break
#爬取利润表
import re,urllib
from time import sleep
for count in newid:
    url  = 'http://quotes.money.163.com/service/lrb_'+str(count)+'.html'
    print(url)
    while True:
        try:
            content = urllib.request.urlopen(url,timeout=2).read()
            content = content.decode("gbk").encode("utf-8")
            with open('E:/医药行业/lrb/'+str(count)+'lrb.csv','wb')as f:
                f.write(content)
            data = pd.read_csv('E:/医药行业/lrb/'+str(count)+'lrb.csv')
            break
            sleep(3) 
        except Exception as e:
            print(e,count)
            break
#爬取现金流量表
import re,urllib
from time import sleep
for count in newid:
    url  = 'http://quotes.money.163.com/service/xjllb_'+str(count)+'.html'
    print(url)
    while True:
        try:
            content = urllib.request.urlopen(url,timeout=2).read()
            content = content.decode("gbk").encode("utf-8")
            with open('E:/医药行业/xjllb/'+str(count)+'xjllb.csv','wb')as f:
                f.write(content)
            data = pd.read_csv('E:/医药行业/xjllb/'+str(count)+'xjllb.csv')
            break
            sleep(3) 
        except Exception as e:
            print(e,count)
            break

如图,上面的代码得到了医药制造行业全部260只股票的资产负债表,利润表,现金流量表,

我要集团股票代码多少_软银集团股票代码_人民电器集团股票代码

医药行业全部资产负债表

医药行业全部利润表

软银集团股票代码_人民电器集团股票代码_我要集团股票代码多少

医药行业全部现金流量表

此外,还可以从腾讯财经api获取股票行情数据,

#获取基本行情数据
import re,urllib
import xlwt
import hashlib
from time import sleep
gpdm=[]
gpmc=[]
price=[]
volume =[] 
change = []
changep = []
zsz = []
ltsz=[]
syl=[]
sjl = []
for count in newid:
    if count[0]== '6' or count[0]== '9' :         #这里要加单引号,不是int而是str
        print(count[0])
        url = 'http://qt.gtimg.cn/q=sh'+ str(count)
        print(url)
    else:
        print(count[0])
        url = 'http://qt.gtimg.cn/q=sz'+ str(count)
        print(url)
    while True:
        try:
            content = urllib.request.urlopen(url,timeout=2).read()
            content = content.decode("gbk").encode("utf-8").decode("utf8","ignore")
            #content = content.decode("gbk").encode("utf-8")
            content = content.split('~')
            hq = pd.DataFrame(content)
            #print(hq)
            gpdm.append(hq[0][2])
            gpmc.append(hq[0][1])
            price.append(hq[0][3])
            volume.append(hq[0][6])
            change.append(hq[0][31])
            changep.append(hq[0][32])
            zsz.append(hq[0][45])
            ltsz.append(hq[0][44])        
            syl.append(hq[0][52])
            sjl.append(hq[0][46])
            data = pd.DataFrame([gpdm,gpmc,price,volume,change,changep,zsz,ltsz,syl,sjl])
            hqdata = pd.DataFrame(data.values.T,columns = ['股票代码','股票名称','当前价格','成交量','涨跌','涨跌幅','总市值','流通市值','市盈率','市净率'])
            #print(hqdata)
            #with open('E:/hangqing/'+str(count)+'hq.csv','wb') as f:
                #f.write(hq)
            sleep(0.5)
            #hqdata.to_csv('E:/hangqing/'+str(count)+'hq.csv')
            print(count)
            break
        except Exception as e:
            print(count,e)
            break
        print(count)
hqdata.to_csv('E:/hangqing/hqdata_医药制造.csv')
print('爬取结束')

得到的结果如下

软银集团股票代码_我要集团股票代码多少_人民电器集团股票代码

有了三张报表,就可以做整理和分析了,我参考郭永清的财务报表分析方法,重构了三张财务报表,具体重构方法可以查看下面三篇文章,

行走的守望者:财报分析之资产负债表的重构(1)——以医药制造行业为例​

行走的守望者:财报分析之利润表的重构(2)——以医药制造行业为例​

人民电器集团股票代码_软银集团股票代码_我要集团股票代码多少

行走的守望者:财报分析之综合分析(3)——以医药制造行业为例​

重构后的报表可以与上面爬取得到的股票的行情数据表连接,从而得到可以直接进行分析的联合表(如下图)。由于是同时分析3年的数据,所以该表共有121列,可以按照个性化的指标筛选出相应个股。

不同于同花顺等炒股软件上公布的财务数据和选股方法,我通过直接下载财务报表,可以构建自定义的财务指标,并且按照自己的方法分析财务报表。

另外,其他全部行业的财报都可以按照上述方法获取和分析。比如想选出某行业连续三年净利润为正的股票,可以在上面的表格中直接筛选得到。

未经允许不得转载:原子财经网 » 哪里可以下载上市公司的财务报表?

赞 (0) 打赏

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏