全网爬取6500多只基金|看看哪家基金最强

理财是个非常重要的技能,无论是高高在上的成功人士还说大众老百姓都必须要掌握的技能,俗话说"人不理财,财不理你"。理财的方法有很多,我个人比较喜欢买基金,而基金又有很分很多种:股票型,混合型,债券型,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的技能等等。若有什么问题,也可以留言讨论,好闲话少说,抓紧时间码代码吧~~

学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入学习交流群
626062078,我们一起学Python!

阅读更多
个人分类: python开发
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭