Python与财务【上】--数据采集篇

内容提要

  1. 获取需要下载数据的股票代码列表
  2. 寻找可以下载数据的数据接口
  3. 下载并保存数据

写在之前

本文分文上下两篇,上篇主要说数据采集,下篇主要讲通过财务指标进行比较和分析

有知友问为什么不直接分享代码,其实完成财务分析所需代码简单到爆,任何一个程序员写的都比我漂亮百倍(我只是网工狗里面代码写的较好的,也可能是网工狗里面财务分析较好的),但是一方面当心别有用心的人滥用接口导致接口失效,另一方面爬取别人网站的数据终归是不太好的,所以里面涉及的财务接口并不适合公开出来。基于这些考虑,我之前分享的EXCEL工具也对代码部分加了密。同样,这一篇我也不打算公开分享代码而只分享思路,如果你有心,在主要财经网站都能找的到下载接口。接口都找到了,按照本文思路,很容易获得全市场上市公司财务数据。实在找不到的,可以私信我电子邮件地址,我可以把我的示例代码提供给大家参考。

对于大家提供的电子邮件地址,我个人承诺不会用于除了发送所须资料以外的其他用途。不过也建议大家保护好自己的隐私,尽量不要将联系方式留在评论区而通过私信,这样也方便我回复(放在评论区我经常会找不到,就没法回给你了)

本文虽然简单,但还是需要一定Python基础的,如果大家对Python一无所知但又比较感兴趣的话,建议搜一下""廖雪峰 Python3""的教程(Pyhon2已经过期不用了),写的简单并且免费,本文示例代码基于Python3.5,演示平台为JupyterNotebook。关于环境的搭建,Windows系统可直接安装Anconda,啥都给你安装好。至于Linux等其他系统,我就默认你为IT人士了,想来部署个开发环境应该是小菜一碟。我不准备进行详细介绍。

财务数据的采集

啰嗦完了,言归正传,网络爬虫要解决问题主要有三个:

1) 爬什么?

2) 到哪里去爬?

3) 数据清洗、储存?

一、获取所有股票代码

为了爬取所有上市公司财务数据,我们首先需要取得所有上市公司的公司代码。这个在Python里面已经有了不错的解决方法。那就是使用Tushare财经库,可以获得所有股票代码、沪深300成份股等。如果没有安装,请使用 pip install tushare安装tushare财经库。官网:http://tushare.org

1)看看是tushare是否装好:

新建一个Notebook,在一个cell中键入Python代码

import tushare as t
t.__version__ 

输入后按SHIFT+ENTER运行,显示

这里是最新的0.8.2版。

  1. 获取股票列表(在另一个cell中输入代码):
stocks_df=t.get_stock_basics()
stocks_df 

这两句代码的作用,一是通过tushare财经库获取所有股票列表以及基本信息,并返回一些股票基本信息,如区域、行业、总资产这些数据,返回结果是一个pandas.DataFrame表格。取决于网络环境,该代码大概耗时5-6秒时间。返回结果:

返回值有20多个字段,我们只需要其中的一部分数据,可以使用ix切片,把股票代码,名称,区域,行业切出来。(比如我们只截取 name,area,industry字段)

stock_df=stock_df.ix[:,['name','industry','area']]
# ix[行条件,列条件],这里表示截取所有行,name,industry,area字段,返回一个DATAFRAME
stock_df

如果你对一些新股不敏感,可以把数据保存为csv/xls文件方便多次使用

注意:将股票列表从文件中读出来后,股票代码前的‘0’会被自动处理掉,在做循环下载数据时要将‘0’加上去。

自此股票列表就拿到了。

二、寻找合适财务数据接口

由于Python能够直接处理的文件格式为xml/csv/json/xls文件,因此我们尽量查找能够提供此类格式的文本的数据接口。

另,我比较喜欢csv格式的文本,这种文本内容紧凑,可以说一个无用字节都没有。但是取得的数据可能并非自己所需的格式,所以需要将数据转换为自己需要的内容(为了说明数据清洗及转换过程,我这里专门选择了一个xls格式的财务接口)

2.1. 查找数据接口

很多财经网站都有提供下载财务报表的接口,由于我们已经拿到了所有股票列表,将股票代码依次传入下载接口,就可以获得所有股票财务数据了,我们先来查找可用的财务数据接口。

  1. 打开任意财经网站股票专栏

  2. 输入任意股票代码,比如600660,进入股票详情页

  3. 查找诸如财务报表财务数据财务分析之类的字样,进入细分栏目。

  4. 在这个栏目应该能够找到,下载或者导出之类的功能。现在重点来了,右键点击连接,选择复制链接地址

如果,下载数据 处是一个按钮而不是链接,可以使用Chrome先把数据下载下来,然后按Ctrl+J查看下载历史,就能看到下载地址了,如果还是不行,可能就要使用抓包工具之类的方式了。

  1. 分析链接地址,查看传入股票代码的位置,比如,链接地址是: http://www.stock.com/report.jsp?id=600660那么这个600660就是传入的股票代码了。

2.2. 通过程序下载数据

拿到接口地址后,我们可以通过程序下载数据了。

import requests as ro
stock_code = '600660'
bs_url='http://soft-f9.eastmoney.com/soft/gp15.php?code={co}01&exp=1'.format(co=stock_code)
ct = ro.get(bs_url).text
ct

看到一堆乱码(其实不是乱码,是xml,稍后就说说转化为csv文本)

三、数据的清洗及保存

  1. 数据清洗

获取的数据结构太过复杂,我们还需要将其进行清洗及转换,之前我在《几行代码获取EXCELL有效数据》这篇文章演示了数据的清洗,请参考原文,这里不再重复说明。

  1. 数据保存

财务报表是有效期比较长的数据,为了避免每次使用时反复下载,可以将数据存储到本地。存储方式一般有文件方式或数据库方式。由于数据量不大,直接存为文件csv就可以了。不过为了方便取用,文件命名方式可以稍微注意下,比如命名为报表类型-股票代码.csv,这样以便于读取。

四、编写Python程序下载数据

#!/usr/bin/py
# filename=RPDownloader.py

from modules.Utils import e2csv
from modules.Fi import tcode
import pandas as Pd
import requests as ro

# 下载资产负债表
def downloadBSRP(stocklist):
    num = 0
    for c in stocklist:
        bs_url='http://soft-f9.eastmoney.com/soft/gp15.php?code={co}01&exp=1'.format(co=tcode(c))
        ct = ro.get(bs_url).text
        to_file='bs{co}.csv'.format(co=tcode(c))
        open(to_file,'w').write(e2csv(ct))
        num = num + 1
        
    return num

函数返回值为成功下载报表数目(这里没有做容错处理,如果下载量比较大,需要做容错处理,另外,还须解决程序异常退出后,下次再次进入后避免反复下载已经下载的数据,另外,为了避免IP地址被封,须在下载一个后加上一个延迟,这些内容就留给大家下面去研究了),测试一下代码:

显示成功下载了两个股票资产负债表。

根据以上内容,利润表和现金流量表也就可以下载了。

写到这里,财务数据采集篇就算结束了。下一篇是说说如何使用这些数据进行财务分析。

总结

说了这么多,旨在告诉大家Python这个类目无论是功能性、还是上手程度都碾压其他语言,作为最适合零基础入门的编程语言,想要学习自然不能纸上谈兵,还得沉下心来深入的研究和学习。

只告诉大家学什么但是不给予方向的行为无异于耍流氓,这里也是分享我多年收藏的技术干货,可以共享给喜欢我文章的朋友们,如果你肯花时间沉下心去学习,它们一定能帮到你,干货内容包括:
在这里插入图片描述

上面的所有资料我全部打包好了并且上传至CSDN官方,需要的点击👇获取!

👉[[CSDN大礼包:《python安装包&全套学习资料》免费分享]]安全链接,放心点击

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值