# 数据源
基金费率信息我们的数据源主要来自于:
谁牛基金蛋卷基金- 韭圈儿
其中谁牛基金(基金决策宝)的数据需要先查询基金前面的对应码,然后拼接字符(SZxxx)才能请求接口,调用比较麻烦; 蛋卷基金的命中率太低;所以最后使用韭圈儿结合蛋卷基金来处理基金的费率信息,目前只保存申购和赎回费率,对于运行费率信息,我们暂时不关心,后期可以视情况保存。
# 解决的问题
# 区间处理
一开始我们对前中后的费率区间分别进行处理,这个时候需要针对每一种进行判断并单独处理,导致代码复杂度较高;
之后我们引入portion模块来处理区间信息,其中区间的最小值为 0,最大值为portion.inf,在存入数据库时,必须将inf转为None,即 MySQL 中的NULL;对于赎回费率区间,我们统一转为“天”的概念;对于申购费率区间,我们统一转为“元”的概念;区间我们统一处理为前闭后开的区间([0,inf)),因为后期在计算赎回费率的时候,我们借助pandas.cut可以更方便地切割;另外值得注意的一点是:对于时间区间,我们对天数进行了区间的转换,参阅parse_portion()方法;而对于金额区间,我们则直接按照匹配到的数据强制转换为前闭后开的区间,因为金额的最小精度是0.01;
# 币种
另外,在处理费率信息过程中,有一部分的基金计算费率并不是以人民币作为结算数据,所以我们也对币种进行了匹配,目前数据中的币种我们还没有存入数据库,需要下一步处理。
# TODO
- [ ] 对于封闭期基金,因为我们的赎回费率是按照天数来做区分的,所以暂时无法处理封闭基金的费率信息,暂时只能抛出
IsClosedDurationError异常; - [ ] 爬虫效率太低,需要使用多线程(是否会导致反爬机制返回假数据待验证)