你不理財,財不理你!python 也能幫你理財?
累計收益率走勢圖html
基本信息結果python
python3 + 一些第三方庫正則表達式
import requests import pandas import numpy import matplotlib import lxml
配置 config.json
。code
配置基金代碼, useCache
是否使用緩存。chrome
{ "code":[ "002736", "003328", "003547", ], "useCache":true }
運行 fund_analysis.pyjson
從每天基金網裏點開一個基金,在 chrome 開發者工具觀察加載了的文件。依次查找發現了一個 js 文件,裏面含有一些基金的基本信息。這是一個 js 文件。segmentfault
獲取累計收益率信息須要在頁面作些操做,點擊累計收益裏的3年,觀察開發者工具的請求,很容易找到這個數據源是如何獲取的。這是個 json 數據。api
基金費率表在另外一個頁面,咱們多找幾回能夠找到信息源地址。這是個 html 數據。xcode
接着經過對 Hearders 的分析,用 request 模擬瀏覽器獲取數據(這裏不清楚的話能夠參考以前的文章)。最後將其保存在本地做爲緩衝使用。以累計收益率信息 json 爲例子,主要代碼以下。瀏覽器
filePath = f'./cache/{fundCode}.json' requests_url='http://api.fund.eastmoney.com/pinzhong/LJSYLZS' headers = { 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36', 'Accept': 'application/json' , 'Referer': f'http://fund.eastmoney.com/{fundCode}.html', } params={ 'fundCode': f'{fundCode}', 'indexcode': '000300', 'type': 'try', } requests_page=requests.get(requests_url,headers=headers,params=params) with open(filePath, 'w') as f: json.dump(requests_page.json(), f)
對於 基本信息的 js 文件,讀取文件後做爲字符串,經過正則表達式獲取須要的數據。緩存
例如獲取一年收益率能夠用如下代碼獲取。
syl_1n=re.search(r'syl_1n\s?=\s?"([^\s]*)"',data).group(1);
對於 累計收益率 json 數據,直接用 json 解析,找到須要數據進行篩選加工處理。
採用了 all_data[基金代碼][時間] = 累計收益率
的格式存儲,再經過 pandas 的 DataFrame 進行向上填充空數據。
df = DataFrame(all_data).sort_index().fillna(method='ffill')
對於 基金費率表 html 數據,採用 xpath 解析。xpath 路徑能夠直接用 chrome 獲取。
對於管理費率能夠參考如下代碼。
selector = lxml.html.fromstring(data); # 管理費率 mg_rate=selector.xpath('/html/body/div[1]/div[8]/div[3]/div[2]/div[3]/div/div[4]/div/table/tbody/tr/td[2]/text()')[0]
使用 DataFrame 中的 plot 能夠快速畫圖,使用 to_excel 保存在 Excel 表中。能夠參考如下代碼。
# 保存數據 fig,axes = plt.subplots(2, 1) # 處理基本信息 df2 = DataFrame(all_data_base) df2.stack().unstack(0).to_excel(f'result_{time.time()}.xlsx',sheet_name='out') df2.iloc[1:5,:].plot.barh(ax=axes[0],grid=True,fontsize=25) # 處理收益 df=DataFrame(all_data).sort_index().fillna(method='ffill') df.plot(ax=axes[1],grid=True,fontsize=25) fig.savefig(f'result_{time.time()}.png')
數據的獲取主要採用了爬蟲的基本方法,使用的是 requests 庫。而數據的解析和保存主要運用的是正則表達式、xpath解析庫以及 pandas 數據處理庫。
對於一個基金的分析遠遠不止於這些數據(例如持倉分佈,基金經理信息等),這裏只是作個引子,但願能給你們一個思路,若是你有想法或者不懂的地方,歡迎留言或私信交流!
本文僅供我的學習交流使用,請勿用於其餘用途!