最近学习爬虫,试着写了天天基金网获取单只基金的方法,记录下:
import requests
import execjs
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
class GET_DATA:
def __init__(self, code, T):
self.code = code
self.T = T
self.url="http://fund.eastmoney.com/pingzhongdata/"+self.code+".js?v="+self.T
def get_content(self):
content = requests.get(self.url)
jsContent = execjs.compile(content.text)
return jsContent
def get_data_base(self):
#获取某基金的基本信息
T = self.T
jsContent = self.get_content()
name=jsContent.eval('fS_name')
code=jsContent.eval('fS_code')
fund_Rate=jsContent.eval('fund_Rate') #现费率
fund_minsg=jsContent.eval('fund_minsg') #最小申购金额
stockCodes=jsContent.eval('stockCodes') #基金持仓股票代码
zqCodes=jsContent.eval('zqCodes') #基金持仓债券代码
stockCodesNew=jsContent.eval('stockCodesNew') #基金持仓股票代码(新市场号)
zqCodesNew=jsContent.eval('zqCodesNew') #基金持仓债券代码(新市场号)
imf_base = [T,name,code,fund_Rate,fund_minsg,
stockCodes,zqCodes,stockCodesNew,zqCodesNew]
imf_base_df = pd.DataFrame(imf_base).T
imf_base_df.columns=['T','name','code','fund_Rate','fund_minsg',
'stockCodes','zqCodes','stockCodesNew','zqCodesNew']
return imf_base_df
def get_data_others(self):
#获取某基金某一天的其他信息
jsContent = self.get_content()
syl_1n = jsContent.eval('syl_1n')
syl_6y = jsContent.eval('syl_6y')
syl_3y = jsContent.eval('syl_3y')
syl_1y =jsContent.eval('syl_1y')
Data_fundSharesPositions = jsContent.eval('Data_fundSharesPositions') #/*股票仓位测算图*/
netWorthTrendData=jsContent.eval('Data_netWorthTrend') #单位净值走势数据
ACWorthTrendData=jsContent.eval('Data_ACWorthTrend') #累计净值走势数据
Data_grandTotal=jsContent.eval('Data_grandTotal') #累计收益率走势
Data_rateInSimilarType = jsContent.eval('Data_rateInSimilarType') #同类排名走势
Data_rateInSimilarPersent = jsContent.eval('Data_rateInSimilarPersent') #同类排名百分比
Data_holderStructure = jsContent.eval('Data_holderStructure') #持有人结构
Data_assetAllocation =jsContent.eval('Data_assetAllocation') #资产配置
Data_performanceEvaluation=jsContent.eval('Data_performanceEvaluation') #业绩评价 ['选股能力', '收益率', '抗风险', '稳定性','择时能力']
Data_currentFundManager=jsContent.eval('Data_currentFundManager') #现任基金经理
Data_buySedemption=jsContent.eval('Data_buySedemption') #申购赎回
swithSameType=jsContent.eval('swithSameType') #同类型基金涨幅榜(页面底部通栏)
imf_others = [syl_1n,syl_6y,syl_3y,syl_1y,
Data_fundSharesPositions,netWorthTrendData,ACWorthTrendData,Data_grandTotal,
Data_rateInSimilarType,Data_rateInSimilarPersent,Data_holderStructure,Data_assetAllocation,
Data_performanceEvaluation,Data_currentFundManager,Data_buySedemption,swithSameType]
imf_others_df = pd.DataFrame(imf_others).T
imf_others_df.columns=['syl_1n','syl_6y','syl_3y','syl_1y',
'Data_fundSharesPositions','netWorthTrendData',
'ACWorthTrendData','Data_grandTotal',
'Data_rateInSimilarType','Data_rateInSimilarPersent',
'Data_holderStructure','Data_assetAllocation',
'Data_performanceEvaluation','Data_currentFundManager',
'Data_buySedemption','swithSameType']
return imf_others_df