全網爬取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!

發佈了61 篇原創文章 · 獲贊 35 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章