思路概览一:下载存储
股票数据量大,有一定的涨跌模式,为了节约看股时间,今天我们用python3,量化分析有关股票数据。
总体思路:使用通达信获得所有股票代码,然后通过requests 模块下载http://hq.sinajs.cn/list=股票数据,然后以日期为主键保存到sqlite3数据库。
模块概览:
本文设计了五个模块:分别是Spider模块、File模块、SQL模块、SinaStockData模块和Stock模块,各部分功能如下:(这里说明一下,之前上一期写了python3爬取uumtu图片,发现代码重用率太高,所以决定把代码包装成类,方便后续使用)
Spider模块:这里比较简单,就是使用爬虫通用框架下载指定路径的股票数据,如:http://hq.sinajs.cn/list=sh601818的数据是这样的:
var hq_str_sh601818="光大银行,3.580,3.590,3.560,3.590,3.560,3.560,3.570,74935705,267661999.000,5622218,3.560,4639800,3.550,1195300,3.540,512000,3.530,273400,3.520,83600,3.570,2495580,3.580,3009400,3.590,2424100,3.600,2471000,3.610,2020-04-21,15:00:16,00,";
代码如下:
这里因为给页面coding为gb2312,在linux下转换有乱码问题,因此注释掉了File模块:主要功能是把股票代码从000001读入文件后,通过Spider测试后转换成sh000001模式,方面获得每只股票的链接,如http://hq.sinajs.cn/list=sh601818。同时加入异常处理机制,将发生错误的数据库操作,写入log文件。File模块功能如下:
打包成类,还不用自己关闭文件了,真是方便,说一下如果程序较小,文件不关闭是没有问题的,但是如果反复打开,不关闭就容易发生内存错误。SQL模块:连接数据库,读取,关闭数据库,很简单
这里注意,要及时使用commit函数提交数据库,不然直到程序结束才会提交,容易因意外退出而半途而废SinaStockData模块:类似于正则表达式,本人还没学习相关模块,就直接用string函数处理了
将股票处理成用”,”分割的字符串sh601818,光大银行,3.580,3.590,3.56..最后生成列表,方便数据提取Stock模块:把SinaStockData的列表数据打包成类,把各段数据转换成stock.get_code()的模式,代码如下:
解析每个字段,方便数据库的读写,然后最后方便调试,谢了to_string函数,来源于java思想。最后书写主函数,处理数据库的插入,读取,列表数据的插入,然后写一个脚本,每天15:00以后自动运行程序即可,并把错误写入log文件。代码如下:
功能如下:一、从代码列表中读取sh000001格式的代码,使用SQL创建表;二、获得股票页面数据,插入数据库,如果异常写入当日日志,同时使用进度表示处理游标。运行界面如下:
如果出现错误,打印schema,这里发现出现错误的都是当日没开盘的股票运行结果如下:
可以按照日期删选,方便后续分析
网友评论