之前写公司研究报告时,所有的数据都是通过翻看招股说明书/年报的PDF获取的,把数字从PDF里复制粘贴到EXCEL里再生成图表的过程非常繁琐,而且容易因为看错行/列摘错数据。使用Python可以实现提取财务数据、计算财务指标、可视化呈现等一系列操作的自动化,加之可以通过爬虫从巨潮资讯、雪球等网站批量获取公司财务报表,在没有专用数据库可用的情况下,Python能为财务大数据分析、大范围的公司研究、行业研究提供极大便利。
一、获取报表
巨潮资讯上的数据最权威,但是各个年度数据是分开存放的,而雪球提供财务数据是各年度都在同一个CSV里。由于经营分析涉及趋势研究,需要连续多年的数据,在数据按年度分为多个文件的情况下还得多进行一次遍历,不是很方便,故这里选择从雪球批量获取财务报表。
import pandas as pd
import requests
from multiprocessing.dummy import Pool as ThreadPool
lrb_base_url = 'http://api.xueqiu.com/stock/f10/incstatement.csv?page=1&size=10000&symbol='
llb_base_url = 'http://api.xueqiu.com/stock/f10/cfstatement.csv?page=1&size=10000&symbol='
fzb_base_url = 'http://api.xueqiu.com/stock/f10/balsheet.csv?page=1&size=10000&symbol='
header = {
'User-Agent': 'Mozilla/5.0'}
定义利润表、资产负债表、现金流量表的下载函数:
def download_lrb(url):
r = requests.get(url, headers=headers)
filename = url.split('=')[-1] + '_lrb.csv'
print(filename)
with open(filename, 'wb') as f:
f.write(r.content)
def download_fzb(url):
r = requests.get(url, headers=headers)
filename = url.split('=')[-1] + '_fzb.csv'
print(filename)
with open(filename, 'wb') as f:
f.write(r.content)
def download_llb(url):
r = requests.get(url, headers=headers)
filename = url.split('=')[-1] + '_llb.csv'
print(filename)
with open(filename, 'wb') as f:
f.write(r.content)
股票代码.txt存放需要分析的公司的股票代码,格式为SHXXXXXX或SZXXXXXX
with open('股票代码.txt', 'r', encoding='utf-8') as f:
symbol = [s.strip() for s in f.readlines()]
lrb_urls = [lrb_base_url + i for i in symbol]
fzb_urls = [fzb_base_url + i for i in symbol]
llb_urls = [llb_base_url + i for i in symbol]
pool = ThreadPool(10)
pool.map(download_lrb, lrb_urls)
pool.close(<