这是菜鸟学Python的第86篇原创文章
阅读本文大概需要2分钟
前面有一篇1000基金,看那天买最划算(初步分析1000只基金,20w交易日的数据|哪天买最划算).那篇算是开胃菜,现在我们来个主菜,我准备写一个小程序去全网爬取某个著名的财经网站的所有基金的数据.理财是个非常重要的技能,无论是高高在上的成功人士还说大众老百姓都必须要掌握的技能,俗话说"人不理财,财不理你"。理财的方法有很多,我个人比较喜欢买基金,而基金又有很分很多种:股票型,混合型,债券型,QDII还有分级基金,指数基金,货币基金,到底哪家最强的~~
我们码农是靠手艺吃饭的,不就是数据分析吗,简单自己动手写个程序,分析一下.整个的内容我会分几篇来写,今天是思路篇,这算是一个小小的综合项目,前面讲了这么多Python的基础知识,还有数据分析的内容,来实战一下吧
全网爬取思路
1.获取所有基金的链接
我们从基金首页,爬出所有基金的编号,基金名字和基金的url,共6500多值
它们长的这样,如下面的截图:
...
共计6527只基金,不管它是什么类型的基金,统统爬下,管他黑猫白猫,能赚钱不亏的基金就是好基金,哈哈
2.分析每个基金的数据
单独写一个类,去解析每一个基金网页,我们希望提取以下基金的重要信息
近1个月的涨幅
近3个月的涨幅
近6个月的涨幅
近1年的涨幅
近3年的涨幅
成立以来的涨幅
比如:
3.数据的存储
数据获取之后,我们是肯定要存储的,放在内存里面毕竟不是长久之事 。存储可以存在文件里面,存为csv或者json格式 ,这两种格式比较常用.
或者也可以写入数据库了,我们可以用屌丝专用的sqlite3因为它就一个文件,比较简单,或者高大上的关系数据库MySQL(但是它添加表的时候有死板), MangoDb 这个比较灵活,反正写入数据库的话比较好扩展应用,各有所长~~
4.数据的分析
a).对于积极派
希望知道:累计成立涨幅最大的基金
希望知道:累计1年涨幅最大的基金
希望知道:累计6month涨幅最大的基金
希望知道:累计3month涨幅最大的基金
然后取个交集,看看有没有全能王
b).对于稳健派
我们的投资是以稳健为主,稳子当头,涨多涨少不要紧,关键是要涨,而且稳那我们把成立以来,3年来,1年来,6month,3month,1month 看看有没有全都涨的,没有亏过的
当然我们还可以分析一下其他维度的数据,比如成立的时间,几星级好评的基金等等~~
代码的方案和注意事项
代码的设计注意事项,因为是全网爬取6500多只基金,肯定要用多线程或者爬虫框架去搞定,我目前能想到的是如下几点方案:
1.方案1
a).先爬出基金首页,获得所有的基金的url信息
b).然后把6500只基金放进队列里面,用多线程取分别处理每一个基金网页的数据
c).然后把所有获得每只基金涨幅,存在内存里面,当所有的基金网页全部都处理完之后,把数据一起写如csv文件
方案1:很明显有一个弱点,就是需要等到所有的基金完成才会写入,假如6500多只基金,我处理到6400多的时候,忽然出现异常或者断网了,怎么办,估计那时想撞墙了。这个时候你所有的数据都没有开始存入csv文件,那你前面CPU呼呼的转,卖力的拼命爬虫,结果时间全部都白费了
2.方案2
a).也是先爬出基金首页,获得所有的基金的url信息
b).然后把6500只基金放进队列里面,用一个类去分别处理每一个基金网页的数据
c).然后这个类是继承Thread,也是直接多线程处理这个队列里面的数据,注意当解析完一个网页之后,立刻把数据写入csv文件。这样做的好处,就是不会因为异常或者断网,导致数据内容没有保存
方案2:还是会有问题,就是线程之间对共享文件的处理问题
3.方案3
看起来好像方案2是不错的,但是每个线程都在存同一个csv文件,多线程直接处理一个文件,肯定会有问题,更何况我们有6500多次反复读写,所以我们需要对文件读写的地方,加锁来处理,这样比较安全
结论:
好全网爬取6500基金的思路篇就讲到这里,这个例子会用到Python的基本知识,爬虫技术,多线程处理,线程间的锁,文件读写,数据分析Pandas的技能等等。若有什么问题,也可以留言讨论,好闲话少说,抓紧时间码代码吧~~
网友评论