python 天天基金数据接口

接口1:获取所有基金名称列表代码

  • http://fund.eastmoney.com/js/fundcode_search.js
  • python代码
import requests
import pandas as pd

def GetAllFund():
    '''
        功能:获取所有基金名称、代码、类型,天天基金数据接口:http://fund.eastmoney.com/js/fundcode_search.js
        传入:无
        返回:所有基金基础数据
    '''
    url = "http://fund.eastmoney.com/js/fundcode_search.js"
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36',
    }
    res = requests.get(url,headers=headers)
    res.encoding = "utf-8"
    list_ = eval(re.findall(r'\[.*\]',res.text)[0])
    df = pd.DataFrame(list_)
    df.columns = ['基金代码','基金拼音简写','基金名称','基金类型','基金拼音全称']
    
    return df

if __name__ == "__main__":
    funds = GetAllFund()

在这里插入图片描述

接口2:获取所有基金公司名称列表代码

  • http://fund.eastmoney.com/js/jjjz_gs.js
  • python代码
import requests
import pandas as pd

def GetAllFundCompany():
    '''
        功能:获取所有基金公司名称、代码,天天基金数据接口:http://fund.eastmoney.com/js/jjjz_gs.js
        传入:无
        返回:所有基金公司名称、代码
    '''
    url = "http://fund.eastmoney.com/js/jjjz_gs.js"
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36',
    }
    res = requests.get(url,headers=headers)
    res.encoding = "utf-8"
    list_ = eval(re.findall(r'\[.*\]',res.text)[0])
    df = pd.DataFrame(list_)
    df.columns = ['基金公司代码','基金公司名称']
    
    return df

if __name__ == "__main__":
    fund_companies = GetAllFund()

在这里插入图片描述

接口3:获取基金实时信息

  • http://fundgz.1234567.com.cn/js/基金代码.js
  • python代码(可批量获取多个基金)
import re
import json
import requests
import pandas as pd

def GetFundInfoNow(FundCode):
    '''
        功能:获取基金实时信息,天天基金数据接口:http://fundgz.1234567.com.cn/js/基金代码.js
        传入:基金代码
        输出:基金实时信息 --> dict
                fundcode -- 基金代码
                name     -- 基金名称
                jzrqv    -- 上一交易日
                dwjz     -- 基金净值(截止上一交易日)
                gsz      -- 估算净值(实时)
                gszzl    -- 估算涨幅(实时)
                gztime   -- 更新时间(实时)
    '''
    url = "http://fundgz.1234567.com.cn/js/%s.js"%FundCode
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36',
    }
    res = requests.get(url,headers=headers)
    res.encoding = "utf-8"
    js_data = json.loads(re.findall(r'jsonpgz\((.*)\)',res.text)[0]) # 正则匹配
    
    return js_data

if __name__ == "__main__":
    codes = ['320007','161725','012723'] # 基金代码列表
    res_df = pd.DataFrame(list(map(GetFundInfoNow,codes)))

在这里插入图片描述

接口4:获取基金历史信息

  • http://fund.eastmoney.com/f10/F10DataApi.aspx?type=lsjz&code=050026&page=1&sdate=2020-01-01&edate=2020-03-01&per=20
  • type:lsjz表示历史净值
  • code:表示基金代码
  • page:表示获取的数据的页码
  • per:表示获取的数据每页显示的条数
  • sdate:表示开始时间
  • edate:表示结束时间
  • python代码(可批量获取多个基金)
import re
import json
import requests
import pandas as pd
from bs4 import BeautifulSoup
from functools import partial 

def Get_html(fund_code,start_date,end_date,type_="lsjz",page=1,per=20):
    '''
        获取基金网页数据
    '''
    url = "http://fund.eastmoney.com/f10/F10DataApi.aspx?type={}&code={}&page={}&sdate={}&edate={}&per={}"\
            .format(type_,fund_code,page,start_date,end_date,per)
    headers = {
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36',
    }
    HTML = requests.get(url,headers=headers)
    HTML.encoding = "utf-8"
    
    return HTML

def Get_pages(HTML):
    '''
        获取最大页数
    '''
    pages = re.findall(r'pages:(.*),',HTML.text)[0]
    
    return int(pages)

def Get_FundData_history(HTML):
    '''
        通过html获取基金历史数据
    '''
    soup = BeautifulSoup(HTML.text, 'html.parser')
    trs = soup.find_all("tr")
    res = []
    for tr in trs[1:]:
        date = tr.find_all("td")[0].text # 净值日期
        unit_net = tr.find_all("td")[1].text # 单位净值
        acc_net = tr.find_all("td")[2].text # 累计净值
        fund_r = tr.find_all("td")[3].text # 日增长率
        buy_status = tr.find_all("td")[4].text # 申购状态
        sell_status = tr.find_all("td")[5].text # 赎回状态
        res.append([date,unit_net,acc_net,fund_r,buy_status,sell_status])
    df = pd.DataFrame(res,columns=['净值日期','单位净值','累计净值','日增长率','申购状态','赎回状态'])
    
    return df

def Get_FundData_main(fund_code,start_date,end_date):
    '''
        获取基金数据主函数(仅支持单基金)
    '''
    html = Get_html(fund_code,start_date,end_date)
    pages = Get_pages(html)
    res_df = pd.DataFrame()
    for page in range(1,pages+1):
        html = Get_html(fund_code,start_date,end_date,"lsjz",page)
        df_ = Get_FundData_history(html)
        res_df = pd.concat([res_df,df_])
        
    res_df.insert(0,"基金代码",fund_code)
        
    return res_df
    
    
if __name__ == "__main__":
    start_date = "2022-09-01"
    end_date = "2022-09-15"
    codes = ['320007','161725','012723'] # 基金代码列表
    fund_df = pd.concat(list(map(partial(Get_FundData_main,start_date=start_date,end_date=end_date),codes))) #结合map方法获取多基金数据

在这里插入图片描述

  • 8
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值