使用 Python 獲取一隻或多隻基金的歷史淨值資訊並將之存到表格中

天天基金上面看某隻基金的歷史淨值甚是方便,但是如果你想進一步對這些資料進行研究,那很可能需要將這些資料匯出到表格檔案中,以便後續處理。我對這些資料也比較感興趣,想研究一下。本文將分享這麼使用 Python 獲取一隻或者批次獲取多隻基金的歷史淨值資訊,並將之儲存到表格檔案中,以便後續處理。

Python 環境搭建

本章節我們將向大家介紹如何在本地搭建Python開發環境。Python可應用於多平臺包括 Linux 和 Mac OS X。

你可以透過終端視窗輸入 “python” 命令來檢視本地是否已經安裝Python以及Python的安裝版本。詳見:https://www。runoob。com/python/python-install。html

需求描述

獲取基金程式碼為 161725 的基金歷史淨值資訊,並且將之儲存到檔案 161725。csv 中

程式碼演示

import pandas as pdimport requestsdef get_fund_k_history(fund_code: str, pz: int = 40000) -> pd。DataFrame: ‘’‘ 根據基金程式碼和要獲取的頁碼抓取基金淨值資訊 Parameters —————— fund_code : 6位基金程式碼 page : 頁碼 1 為最新頁資料 Return ———— DataFrame : 包含基金歷史k線資料 ’‘’ # 請求頭 EastmoneyFundHeaders = { ‘User-Agent’: ‘EMProjJijin/6。2。8 (iPhone; iOS 13。6; Scale/2。00)’, ‘GTOKEN’: ‘98B423068C1F4DEF9842F82ADF08C5db’, ‘clientInfo’: ‘ttjj-iPhone10,1-iOS-iOS13。6’, ‘Content-Type’: ‘application/x-www-form-urlencoded’, ‘Host’: ‘fundmobapi。eastmoney。com’, ‘Referer’: ‘https://mpservice。com/516939c37bdb4ba2b1138c50cf69a2e1/release/pages/FundHistoryNetWorth’, } # 請求引數 data = { ‘FCODE’: f‘{fund_code}’, ‘appType’: ‘ttjj’, ‘cToken’: ‘1’, ‘deviceid’: ‘1’, ‘pageIndex’: ‘1’, ‘pageSize’: f‘{pz}’, ‘plat’: ‘Iphone’, ‘product’: ‘EFund’, ‘serverVersion’: ‘6。2。8’, ‘version’: ‘6。2。8’ } url = ‘https://fundmobapi。eastmoney。com/FundMNewApi/FundMNHisNetList’ json_response = requests。get( url, headers=EastmoneyFundHeaders, data=data)。json() rows = [] columns = [‘日期’, ‘單位淨值’, ‘累計淨值’, ‘漲跌幅’] if json_response is None: return pd。DataFrame(rows, columns=columns) datas = json_response[‘Datas’] if len(datas) == 0: return pd。DataFrame(rows, columns=columns) rows = [] for stock in datas: date = stock[‘FSRQ’] rows。append({ ‘日期’: date, ‘單位淨值’: stock[‘DWJZ’], ‘累計淨值’: stock[‘LJJZ’], ‘漲跌幅’: stock[‘JZZZL’] }) df = pd。DataFrame(rows) df[‘單位淨值’] = pd。to_numeric(df[‘單位淨值’], errors=‘coerce’) df[‘累計淨值’] = pd。to_numeric(df[‘累計淨值’], errors=‘coerce’) df[‘日期’] = pd。to_datetime(df[‘日期’], errors=‘coerce’) return df# 6 位基金程式碼fund_code = ‘161725’# 呼叫函式獲取基金歷史淨值資料fund_data = get_fund_k_history(fund_code)# 將資料儲存到表格檔案中fund_data。to_csv(f‘{fund_code}。csv’, index=None, encoding=‘utf-8-sig’)print(f‘基金 {fund_code} 的歷史淨值資料已儲存到檔案 {fund_code}。csv 中!’)

生成的檔案截圖

使用 Python 獲取一隻或多隻基金的歷史淨值資訊並將之存到表格中

Alpha養基

投資目標為相對收益基金,日常分享理財知識,量化交易、個人實盤以及各類投資方法等,歡迎關注。

需求描述

獲取 161725 和 005827 這兩個基金的歷史淨值資訊,並將之儲存到以基金程式碼命名的 csv 檔案中

程式碼演示

import pandas as pdimport requestsdef get_fund_k_history(fund_code: str, pz: int = 40000) -> pd。DataFrame: ‘’‘ 根據基金程式碼和要獲取的頁碼抓取基金淨值資訊 Parameters —————— fund_code : 6位基金程式碼 page : 頁碼 1 為最新頁資料 Return ———— DataFrame : 包含基金歷史k線資料 ’‘’ # 請求頭 EastmoneyFundHeaders = { ‘User-Agent’: ‘EMProjJijin/6。2。8 (iPhone; iOS 13。6; Scale/2。00)’, ‘GTOKEN’: ‘98B423068C1F4DEF9842F82ADF08C5db’, ‘clientInfo’: ‘ttjj-iPhone10,1-iOS-iOS13。6’, ‘Content-Type’: ‘application/x-www-form-urlencoded’, ‘Host’: ‘fundmobapi。eastmoney。com’, ‘Referer’: ‘https://mpservice。com/516939c37bdb4ba2b1138c50cf69a2e1/release/pages/FundHistoryNetWorth’, } # 請求引數 data = { ‘FCODE’: f‘{fund_code}’, ‘appType’: ‘ttjj’, ‘cToken’: ‘1’, ‘deviceid’: ‘1’, ‘pageIndex’: ‘1’, ‘pageSize’: f‘{pz}’, ‘plat’: ‘Iphone’, ‘product’: ‘EFund’, ‘serverVersion’: ‘6。2。8’, ‘version’: ‘6。2。8’ } url = ‘https://fundmobapi。eastmoney。com/FundMNewApi/FundMNHisNetList’ json_response = requests。get( url, headers=EastmoneyFundHeaders, data=data)。json() rows = [] columns = [‘日期’, ‘單位淨值’, ‘累計淨值’, ‘漲跌幅’] if json_response is None: return pd。DataFrame(rows, columns=columns) datas = json_response[‘Datas’] if len(datas) == 0: return pd。DataFrame(rows, columns=columns) rows = [] for stock in datas: date = stock[‘FSRQ’] rows。append({ ‘日期’: date, ‘單位淨值’: stock[‘DWJZ’], ‘累計淨值’: stock[‘LJJZ’], ‘漲跌幅’: stock[‘JZZZL’] }) df = pd。DataFrame(rows) df[‘單位淨值’] = pd。to_numeric(df[‘單位淨值’], errors=‘coerce’) df[‘累計淨值’] = pd。to_numeric(df[‘累計淨值’], errors=‘coerce’) df[‘日期’] = pd。to_datetime(df[‘日期’], errors=‘coerce’) return df# 多個 6 位基金程式碼構成的列表fund_codes = [‘161725’, ‘005827’]# 遍歷基金程式碼列表獲取資料for fund_code in fund_codes: # 呼叫函式獲取基金歷史淨值資料 fund_data = get_fund_k_history(fund_code) # 將資料儲存到表格檔案中 fund_data。to_csv(f‘{fund_code}。csv’, index=None, encoding=‘utf-8-sig’) print(f‘基金 {fund_code} 的歷史淨值資料已儲存到檔案 {fund_code}。csv 中!’)print(‘全部獲取完畢!’)

輸出結果

螢幕輸出

基金 161725 的歷史淨值資料已儲存到檔案 161725。csv 中!基金 005827 的歷史淨值資料已儲存到檔案 005827。csv 中!全部獲取完畢!

並且在程式碼執行目錄生成了類似上面截圖的表格檔案。

有問題可以評論或者私信交流哦。(完)