且慢基金爬虫——自动更新x-sign的投资组合爬取
一、网页分析
1、打开网页
参照上期蛋卷基金爬虫,我们打开且慢基金的网页,随意打开一个投资组合页面,例如:
https://qieman.com/portfolios/ZH000193
我们发现一个以组合ID命名的文件,这应该就是我们要的内容了,我们点开它。
d(ŐдŐ๑)怎么是空的!
但是我们观察Network里,明明这个文件有191B啊,我们试着右键把响应内容复制出来。
{"poCode":"ZH000193","poName":"绿巨人","driveMode":"DR","poType":"4","poDesc":"超级英雄绿巨人,权益资产配置型FOF,发车信号关注订阅号:望京博格投基 ","poRichDesc":"计划将自己的基金组合Open起来,如果未来业绩好,多半原因归因于市场给予我在3000点以下的建仓期! 组合调整,订阅号:望京博格聊基 (强烈建议关注)","poStatus":"1","visibility":"1","establishedOn":"2016-05-27","runningDays":1843,"ceasedOn":null,"ceasedComment":null,"risk5Level":4,"risk5LevelName":"中高风险","poManagers":[{"poManagerId":136,"poManagerName":"望京博格","poManagerDesc":"资产配置投资实践","poManagerRichDesc":null,"poManagerAvatarUrl":"https://asset.qieman.com/pomgr/pomgr_136.png","verified":true}],"nav":"1.7087","navDate":"2021-06-16","dailyReturn":"-0.0112","weeklyReturn":"-0.0256","monthlyReturn":"0.0266","quarterlyReturn":"-0.0008","halfYearlyReturn":"0.0128","yearlyReturn":"0.1872","fromSetupReturn":"0.7087","annualCompoundedReturn":"0.1119","maxDrawdown":"0.2058","sharpe":"0.5540","volatility":"0.1660","personalBuyAmount":0,"totalBuyAmount":0,"totalBuyerCount":0,"tags":null,"recommendHoldingPeriod":null,"recommendInvestmentWays":null,"promotionDesc":null,"accumulatedCost":0,"accumulatedProfit":0,"accumulatedDays":1843,"canDeposit":true,"cannotDepositReason":null,"canWithdraw":true,"cannotWithdrawReason":null,"personalHighestBuyAmount":"10000000.00","personalLowestBuyAmount":"100.00","personalHighestAipAmount":"10000000.00","personalLowestAipAmount":"100.00","composition":[{"prodType":"1","fundCode":"110031","prodCode":"110031","prodName":"易方达恒生国企ETF联接A","fundName":"易方达恒生国企ETF联接A","percent":"0.2144","nav":"1.1288","navDate":"2021-06-16","fundType":"7","fundInvestType":"1","riskLevel":3,"risk5Level":3,"isQdii":true,"isPeriod":false,"isLof":false,"isIndex":true,"isEtf":false,"valDisBy":"nav","yearlyRoe":null,"unitYield":null,"dailyReturn":"-0.0091","onSale":true,"canBuy":true,"canAllot":true,"personalHighestBuyAmount":null,"tags":[],"existProdSummary":true,"prodSummary":{"id":"SUMMARY110031-V20210406","fundCode":"110031","name":"110031产品资料概要(20210406)","url":"https://cdn-disclosure.yingmi.cn/CN_50110000_110031_FA010080_20210006_110031_20210406_090000_01.pdf"},"fundTypeAEvent":null},{"prodType":"1","fundCode":"004642","prodCode":"004642","prodName":"南方房地产ETF联接A","fundName":"南方房地产ETF联接A","percent":"0.1512","nav":"0.8333","navDate":"2021-06-16","fundType":"6","fundInvestType":"1","riskLevel":3,"risk5Level":3,"isQdii":false,"isPeriod":false,"isLof":false,"isIndex":true,"isEtf":false,"valDisBy":"nav","yearlyRoe":null,"unitYield":null,"dailyReturn":"0.0007","onSale":true,"canBuy":true,"canAllot":true,"personalHighestBuyAmount":null,"tags":[],"existProdSummary":true,"prodSummary":{"id":"SUMMARY004642-V20210331","fundCode":"004642","name":"004642产品资料概要(20210331)","url":"https://cdn-disclosure.yingmi.cn/CN_50020000_004642_FA010080_20210003_004642_20210331_090000_01.pdf"},"fundTypeAEvent":null},{"prodType":"1","fundCode":"001475","prodCode":"001475","prodName":"易方达国防军工混合","fundName":"易方达国防军工混合","percent":"0.2834","nav":"1.4660","navDate":"2021-06-16","fundType":"3","fundInvestType":"3","riskLevel":3,"risk5Level":4,"isQdii":false,"isPeriod":false,"isLof":false,"isIndex":false,"isEtf":false,"valDisBy":"nav","yearlyRoe":null,"unitYield":null,"dailyReturn":"-0.0161","onSale":true,"canBuy":true,"canAllot":true,"personalHighestBuyAmount":null,"tags":[],"existProdSummary":true,"prodSummary":{"id":"SUMMARY001475-V20210427","fundCode":"001475","name":"001475产品资料概要(20210427)","url":"https://cdn-disclosure.yingmi.cn/CN_50110000_001475_FA010080_20210001_001475_20210427_090000_01.pdf"},"fundTypeAEvent":null},{"prodType":"1","fundCode":"501021","prodCode":"501021","prodName":"华宝香港中国中小盘(LOF)A","fundName":"华宝香港中国中小盘(LOF)A","percent":"0.2162","nav":"1.8256","navDate":"2021-06-16","fundType":"7","fundInvestType":"1","riskLevel":3,"risk5Level":3,"isQdii":true,"isPeriod":false,"isLof":true,"isIndex":true,"isEtf":false,"valDisBy":"nav","yearlyRoe":null,"unitYield":null,"dailyReturn":"-0.0217","onSale":true,"canBuy":true,"canAllot":true,"personalHighestBuyAmount":null,"tags":[],"existProdSummary":true,"prodSummary":{"id":"SUMMARY501021-V20210513","fundCode":"501021","name":"501021产品资料概要(20210513)","url":"https://cdn-disclosure.yingmi.cn/CN_50220000_501021_FA010080_20210297_501021_20210513_103701_01.pdf"},"fundTypeAEvent":null},{"prodType":"1","fundCode":"006327","prodCode":"006327","prodName":"易方达中证海外联接人民币A","fundName":"易方达中证海外联接人民币A","percent":"0.1348","nav":"1.4401","navDate":"2021-06-15","fundType":"7","fundInvestType":"1","riskLevel":3,"risk5Level":4,"isQdii":true,"isPeriod":false,"isLof":false,"isIndex":true,"isEtf":false,"valDisBy":"nav","yearlyRoe":null,"unitYield":null,"dailyReturn":"-0.0017","onSale":true,"canBuy":true,"canAllot":true,"personalHighestBuyAmount":null,"tags":[],"existProdSummary":true,"prodSummary":{"id":"SUMMARY006327-V20210406","fundCode":"006327","name":"006327产品资料概要(20210406)","url":"https://cdn-disclosure.yingmi.cn/CN_50110000_006327_FA010080_20210001_006327_20210406_090000_01.pdf"},"fundTypeAEvent":null}],"adjustInfo":{"adjustmentId":166776,"comment":"2018年下半年,由于医药极速下跌同时找不到更好的行业,所以纳入沪深300指数,如果以现在的结果回顾这次调仓,会发现那次是错误的.... 现在望京博格觉得未来三年角度地产应该跑赢沪深300,因为地产目前低估,低估也有低估的道路,但是未来中国城市化进程,尤其是准一线城市的发展收益的还是大型地产公司。","adjustedOn":"2020-09-07","details":[{"fundCode":"110020","prodCode":"110020","prodType":"1","fromPercent":"0.1826","toPercent":"0.0000","fundName":"易方达沪深300ETF联接A","prodName":"易方达沪深300ETF联接A","fundType":"6","fundInvestType":"1","isQdii":false,"isLof":false,"isPeriod":false,"isIndex":true,"isEtf":false,"valDisBy":"nav","onSale":true,"canBuy":true,"canAllot":true,"personalHighestBuyAmount":null,"tags":[],"existProdSummary":true,"prodSummary":{"id":"SUMMARY110020-V20210406","fundCode":"110020","name":"110020产品资料概要(20210406)","url":"https://cdn-disclosure.yingmi.cn/CN_50110000_110020_FA010080_20210002_110020_20210406_090000_01.pdf"},"fundTypeAEvent":null},{"fundCode":"110031","prodCode":"110031","prodType":"1","fromPercent":"0.2175","toPercent":"0.2172","fundName":"易方达恒生国企ETF联接A","prodName":"易方达恒生国企ETF联接A","fundType":"7","fundInvestType":"1","isQdii":true,"isLof":false,"isPeriod":false,"isIndex":true,"isEtf":false,"valDisBy":"nav","onSale":true,"canBuy":true,"canAllot":true,"personalHighestBuyAmount":null,"tags":[],"existProdSummary":true,"prodSummary":{"id":"SUMMARY110031-V20210406","fundCode":"110031","name":"110031产品资料概要(20210406)","url":"https://cdn-disclosure.yingmi.cn/CN_50110000_110031_FA010080_20210006_110031_20210406_090000_01.pdf"},"fundTypeAEvent":null},{"fundCode":"501021","prodCode":"501021","prodType":"1","fromPercent":"0.1911","toPercent":"0.1908","fundName":"华宝香港中国中小盘(LOF)A","prodName":"华宝香港中国中小盘(LOF)A","fundType":"7","fundInvestType":"1","isQdii":true,"isLof":true,"isPeriod":false,"isIndex":true,"isEtf":false,"valDisBy":"nav","onSale":true,"canBuy":true,"canAllot":true,"personalHighestBuyAmount":null,"tags":[],"existProdSummary":true,"prodSummary":{"id":"SUMMARY501021-V20210513","fundCode":"501021","name":"501021产品资料概要(20210513)","url":"https://cdn-disclosure.yingmi.cn/CN_50220000_501021_FA010080_20210297_501021_20210513_103701_01.pdf"},"fundTypeAEvent":null},{"fundCode":"001475","prodCode":"001475","prodType":"1","fromPercent":"0.2612","toPercent":"0.2609","fundName":"易方达国防军工混合","prodName":"易方达国防军工混合","fundType":"3","fundInvestType":"3","isQdii":false,"isLof":false,"isPeriod":false,"isIndex":false,"isEtf":false,"valDisBy":"nav","onSale":true,"canBuy":true,"canAllot":true,"personalHighestBuyAmount":null,"tags":[],"existProdSummary":true,"prodSummary":{"id":"SUMMARY001475-V20210427","fundCode":"001475","name":"001475产品资料概要(20210427)","url":"https://cdn-disclosure.yingmi.cn/CN_50110000_001475_FA010080_20210001_001475_20210427_090000_01.pdf"},"fundTypeAEvent":null},{"fundCode":"006327","prodCode":"006327","prodType":"1","fromPercent":"0.1476","toPercent":"0.1488","fundName":"易方达中证海外联接人民币A","prodName":"易方达中证海外联接人民币A","fundType":"7","fundInvestType":"1","isQdii":true,"isLof":false,"isPeriod":false,"isIndex":true,"isEtf":false,"valDisBy":"nav","onSale":true,"canBuy":true,"canAllot":true,"personalHighestBuyAmount":null,"tags":[],"existProdSummary":true,"prodSummary":{"id":"SUMMARY006327-V20210406","fundCode":"006327","name":"006327产品资料概要(20210406)","url":"https://cdn-disclosure.yingmi.cn/CN_50110000_006327_FA010080_20210001_006327_20210406_090000_01.pdf"},"fundTypeAEvent":null},{"fundCode":"004642","prodCode":"004642","prodType":"1","fromPercent":"0.0000","toPercent":"0.1823","fundName":"南方房地产ETF联接A","prodName":"南方房地产ETF联接A","fundType":"6","fundInvestType":"1","isQdii":false,"isLof":false,"isPeriod":false,"isIndex":true,"isEtf":false,"valDisBy":"nav","onSale":true,"canBuy":true,"canAllot":true,"personalHighestBuyAmount":null,"tags":[],"existProdSummary":true,"prodSummary":{"id":"SUMMARY004642-V20210331","fundCode":"004642","name":"004642产品资料概要(20210331)","url":"https://cdn-disclosure.yingmi.cn/CN_50020000_004642_FA010080_20210003_004642_20210331_090000_01.pdf"},"fundTypeAEvent":null}]},"sigAdjustment":null,"extra":{"agreements":[{"id":"AGREEMENT04-V20200511","name":"盈米宝服务协议","url":"https://asset2.qieman.com/agreement/agreement04-3767ba77-fbf9-49ec-abe8-e69fb2a61a57.pdf"},{"id":"AGREEMENT06-V20200511","name":"且慢平台服务协议","url":"https://asset2.qieman.com/agreement/agreement06-63d980cd-858f-4ebb-bd7d-33b9e99578ef.pdf"}],"aipAgreements":[{"id":"AGREEMENT07-V20200511","name":"基金约定交易服务协议","url":"https://asset2.qieman.com/agreement/agreement07-211340f0-7c0d-4699-a63f-ef7d727904ea.pdf"}],"benchmarks":[{"code":"hs300","name":"沪深300"}]},"useRealPerformance":false,"riskLevel":3,"prodSummaries":[{"id":"SUMMARY110031-V20210406","fundCode":"110031","name":"110031产品资料概要(20210406)","url":"https://cdn-disclosure.yingmi.cn/CN_50110000_110031_FA010080_20210006_110031_20210406_090000_01.pdf"},{"id":"SUMMARY004642-V20210331","fundCode":"004642","name":"004642产品资料概要(20210331)","url":"https://cdn-disclosure.yingmi.cn/CN_50020000_004642_FA010080_20210003_004642_20210331_090000_01.pdf"},{"id":"SUMMARY001475-V20210427","fundCode":"001475","name":"001475产品资料概要(20210427)","url":"https://cdn-disclosure.yingmi.cn/CN_50110000_001475_FA010080_20210001_001475_20210427_090000_01.pdf"},{"id":"SUMMARY501021-V20210513","fundCode":"501021","name":"501021产品资料概要(20210513)","url":"https://cdn-disclosure.yingmi.cn/CN_50220000_501021_FA010080_20210297_501021_20210513_103701_01.pdf"},{"id":"SUMMARY006327-V20210406","fundCode":"006327","name":"006327产品资料概要(20210406)","url":"https://cdn-disclosure.yingmi.cn/CN_50110000_006327_FA010080_20210001_006327_20210406_090000_01.pdf"}],"fundTypeAEvents":[],"followCount":29905,"canWeeklyAip":false}
我们观察到其实是有返回很多信息的,但是为什么点进去看不到呢?
原来是且慢基金网站有反爬虫的校验。
2、分析x-sign
我们观察一下请求标头。
我们把这些内容全部复制到爬虫的header里,然后逐个删除,看看哪个才是起关键作用的。
我们发现,只要有x-sign就行了,如果没有正确的x-sign就会返回空值。
有x-sign:
无x-sign:
但是这个x-sign貌似是一日一更新的,也就是昨天的x-sign今天就失效了,如果我们手动每天更新,又很麻烦。
我们发现这个x-sign的前13位是一个时间戳,后32位则是通过时间戳形成的一个加密。
1621566508433|32A579E8505A7B5A7BB5CB69D6AA6BDD
3、自动更新x-sign
网络上的教程基本都是通过阅读JavaScript来破译x-sign的加密算法,但是偏偏且慢把js写得很繁琐,内嵌了一个虚拟机来实现加密,破译这条路子有些复杂,那我们还能怎么办呢?
我们可以模拟浏览器的访问操作来获取x-sign! (๑•̀ㅂ•́)و✧
这里我们用到selenium库,需要安装一个webdriver,详细教程网上好多,这里不赘述。
我们从performance中找出所有带x-sign的内容。
#by concyclics
# -*- coding:UTF-8 -*-
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import json
import time
def getX_sign():
url = 'https://qieman.com'
d = DesiredCapabilities.CHROME
d['loggingPrefs'] = {'performance': 'ALL'}
browser=webdriver.Chrome()
browser.get(url)
time.sleep(1)
info = browser.get_log('performance')
#print(info)
for i in info:
dic_info = json.loads(i["message"])
info = dic_info["message"]['params']
if 'request' in info:
#print(info['request'])
if 'headers' in info['request']:
#print(info['request']['headers'])
if 'x-sign' in info['request']['headers']:
# print(info['request']['headers']['x-sign'])
print(info['request']['headers']['x-sign'])
#browser.close()
return False
if __name__=='__main__':
getX_sign()
发现selenium帮我们打开了chrome。
并返回了3条x-sign。
这是因为对于每一个请求,网站都会重新算一个x-sign,但是我们只要一个就好,而且每天一个,所以我们可以根据当前已有的x-sign的前13位时间戳,计算它是否是今天的x-sign,不是再去获取,毕竟selenium比requests慢不少,同时我们可以隐藏弹窗。
具体代码如下:
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
import json
import time
import datetime
xsign='1623897696198395318DDBC26EFC3AA40DC4A6D28E8AC'
def getX_sign():
url = 'https://qieman.com'
d = DesiredCapabilities.CHROME
d['loggingPrefs'] = {'performance': 'ALL'}
option = webdriver.ChromeOptions()
option.add_argument('headless')
browser = webdriver.Chrome(options=option)
browser.get(url)
info = browser.get_log('performance')
#print(info)
for i in info:
dic_info = json.loads(i["message"])
info = dic_info["message"]['params']
if 'request' in info:
#print(info['request'])
if 'headers' in info['request']:
#print(info['request']['headers'])
if 'x-sign' in info['request']['headers']:
browser.close()
# print(info['request']['headers']['x-sign'])
return info['request']['headers']['x-sign']
browser.close()
return False
def getXsign():
global xsign
t=int(xsign[0:13])//1000
last=time.localtime(t)
last=datetime.datetime(last[0],last[1],last[2])
today=time.localtime(time.time())
today=datetime.datetime(today[0],today[1],today[2])
diff=(today-last).days
#print(t,last,today,diff)
if diff==0:
return xsign
try:
getX_sign()
except Exception:
return False
xsign=getX_sign()
return xsign
if __name__=='__main__':
print(getXsign())
二、json分析
我们发现基金的基本信息和历史净值放在这两个地方:
1、基本信息
观察json
{"poCode":"ZH001798","poName":"东方进取1号","driveMode":"DR","poType":"1","poDesc":"本组合是激进配置,力求大幅跑赢沪深300指数,争取超过99%的投资者,并超越85-90%的公募基金。\n由于长年都是高仓位运行,风险较大,购买前请认真阅读基金组合使用说明书","poRichDesc":"从2019年开始,组合会加强逆向投资的运用,有的逆向操作并不会马上带来收益,请给3个月左右的观察期。","poStatus":"1","visibility":"1","establishedOn":"2016-07-26","runningDays":1786,"ceasedOn":null,"ceasedComment":null,"risk5Level":3,"risk5LevelName":"中风险","poManagers":[{"poManagerId":612,"poManagerName":"东方财之道","poManagerDesc":"理财之道,与你同行!","poManagerRichDesc":null,"poManagerAvatarUrl":"https://thirdwx.qlogo.cn/mmopen/vi_32/DYAIOgq83eoo8sp4FZJ8xdkTibPu0fUk9IdfhEn0yfJhVYIDA36ZkDHjEs2vbT1jw7xPLmN2YbaR4dQJIWtOfSQ/132","verified":true}],"nav":"2.2379","navDate":"2021-06-16","dailyReturn":"-0.0196","weeklyReturn":"-0.0235","monthlyReturn":"0.0195","quarterlyReturn":"0.0268","halfYearlyReturn":"0.0831","yearlyReturn":"0.3166","fromSetupReturn":"1.2379","annualCompoundedReturn":"0.1790","maxDrawdown":"0.2778","sharpe":"0.8855","volatility":"0.1795","personalBuyAmount":0,"totalBuyAmount":0,"totalBuyerCount":0,"tags":null,"recommendHoldingPeriod":null,"recommendInvestmentWays":null,"promotionDesc":null,"accumulatedCost":0,"accumulatedProfit":0,"accumulatedDays":1786,"canDeposit":true,"cannotDepositReason":null,"canWithdraw":true,"cannotWithdrawReason":null,"personalHighestBuyAmount":"532481.00","personalLowestBuyAmount":"100.00","personalHighestAipAmount":"532481.00","personalLowestAipAmount":"100.00","composition":[{"prodType":"1","fundCode":"519736","prodCode":"519736","prodName":"交银新成长混合","fundName":"交银新成长混合","percent":"0.1343","nav":"4.4730","navDate":"2021-06-16","fundType":"3","fundInvestType":"3","riskLevel":3,"risk5Level":3,"isQdii":false,"isPeriod":false,"isLof":false,"isIndex":false,"isEtf":false,"valDisBy":"nav","yearlyRoe":null,"unitYield":null,"dailyReturn":"-0.0189","onSale":true,"canBuy":true,"canAllot":true,"personalHighestBuyAmount":"100000.00","tags":["限大额"],"existProdSummary":true,"prodSummary":{"id":"SUMMARY519736-V20210528","fundCode":"519736","name":"519736产品资料概要(20210528)","url":"https://cdn-disclosure.yingmi.cn/CN_50480000_519736_FA010080_20210001_519736_20210528_090000_01.pdf"},"fundTypeAEvent":null},{"prodType":"1","fundCode":"005760","prodCode":"005760","prodName":"富国周期优势混合A","fundName":"富国周期优势混合A","percent":"0.1434","nav":"2.9355","navDate":"2021-06-16","fundType":"3","fundInvestType":"3","riskLevel":3,"risk5Level":3,"isQdii":false,"isPeriod":false,"isLof":false,"isIndex":false,"isEtf":false,"valDisBy":"nav","yearlyRoe":null,"unitYield":null,"dailyReturn":"-0.0187","onSale":true,"canBuy":true,"canAllot":true,"personalHighestBuyAmount":"2000000.00","tags":["限大额"],"existProdSummary":true,"prodSummary":{"id":"SUMMARY005760-V20210311","fundCode":"005760","name":"005760产品资料概要(20210311)","url":"https://cdn-disclosure.yingmi.cn/CN_50100000_005760_FA010070_20210004_005760_20210311_090000_01.pdf"},"fundTypeAEvent":null},{"prodType":"1","fundCode":"005267","prodCode":"005267","prodName":"嘉实价值精选股票","fundName":"嘉实价值精选股票","percent":"0.0767","nav":"2.1811","navDate":"2021-06-16","fundType":"1","fundInvestType":"1","riskLevel":3,"risk5Level":3,"isQdii":false,"isPeriod":false,"isLof":false,"isIndex":false,"isEtf":false,"valDisBy":"nav","yearlyRoe":null,"unitYield":null,"dailyReturn":"-0.0169","onSale":true,"canBuy":true,"canAllot":true,"personalHighestBuyAmount":"50000000.00","tags":["限大额"],"existProdSummary":true,"prodSummary":{"id":"SUMMARY005267-V20210609","fundCode":"005267","name":"005267产品资料概要(20210609)","url":"https://cdn-disclosure.yingmi.cn/CN_50080000_005267_FA010080_20210006_005267_20210609_090000_01.pdf"},"fundTypeAEvent":null},{"prodType":"1","fundCode":"009076","prodCode":"009076","prodName":"工银圆兴混合","fundName":"工银圆兴混合","percent":"0.1878","nav":"1.7762","navDate":"2021-06-16","fundType":"3","fundInvestType":"3","riskLevel":3,"risk5Level":3,"isQdii":false,"isPeriod":false,"isLof":false,"isIndex":false,"isEtf":false,"valDisBy":"nav","yearlyRoe":null,"unitYield":null,"dailyReturn":"-0.0237","onSale":true,"canBuy":true,"canAllot":true,"personalHighestBuyAmount":"100000.00","tags":["限大额"],"existProdSummary":true,"prodSummary":{"id":"SUMMARY009076-V20210422","fundCode":"009076","name":"009076产品资料概要(20210422)","url":"https://cdn-disclosure.yingmi.cn/CN_50470000_009076_FA010080_20210002_009076_20210422_000000_01.pdf"},"fundTypeAEvent":null},{"prodType":"1","fundCode":"001605","prodCode":"001605","prodName":"国富沪港深成长精选股票","fundName":"国富沪港深成长精选股票","percent":"0.1742","nav":"2.6880","navDate":"2021-06-16","fundType":"1","fundInvestType":"1","riskLevel":3,"risk5Level":4,"isQdii":false,"isPeriod":false,"isLof":false,"isIndex":false,"isEtf":false,"valDisBy":"nav","yearlyRoe":null,"unitYield":null,"dailyReturn":"-0.0240","onSale":true,"canBuy":true,"canAllot":true,"personalHighestBuyAmount":null,"tags":[],"existProdSummary":true,"prodSummary":{"id":"SUMMARY001605-V20210330","fundCode":"001605","name":"001605产品资料概要(20210330)","url":"https://cdn-disclosure.yingmi.cn/CN_50420000_001605_FA010080_20200002_001605_20210330_000000_01.pdf"},"fundTypeAEvent":null},{"prodType":"1","fundCode":"163415","prodCode":"163415","prodName":"兴全商业模式优选混合","fundName":"兴全商业模式优选混合","percent":"0.0689","nav":"3.8480","navDate":"2021-06-16","fundType":"3","fundInvestType":"3","riskLevel":3,"risk5Level":3,"isQdii":false,"isPeriod":false,"isLof":true,"isIndex":false,"isEtf":false,"valDisBy":"nav","yearlyRoe":null,"unitYield":null,"dailyReturn":"-0.0121","onSale":true,"canBuy":true,"canAllot":true,"personalHighestBuyAmount":"100000.00","tags":["限大额"],"existProdSummary":true,"prodSummary":{"id":"SUMMARY163415-V20210210","fundCode":"163415","name":"163415产品资料概要(20210210)","url":"https://cdn-disclosure.yingmi.cn/CN_50310000_163415_FA010080_20210001_163415_20210210_090000_01.pdf"},"fundTypeAEvent":null},{"prodType":"1","fundCode":"004424","prodCode":"004424","prodName":"汇添富文体娱乐混合","fundName":"汇添富文体娱乐混合","percent":"0.1026","nav":"2.8411","navDate":"2021-06-16","fundType":"3","fundInvestType":"3","riskLevel":3,"risk5Level":3,"isQdii":false,"isPeriod":false,"isLof":false,"isIndex":false,"isEtf":false,"valDisBy":"nav","yearlyRoe":null,"unitYield":null,"dailyReturn":"-0.0194","onSale":true,"canBuy":true,"canAllot":true,"personalHighestBuyAmount":null,"tags":[],"existProdSummary":true,"prodSummary":{"id":"SUMMARY004424-V20210421","fundCode":"004424","name":"004424产品资料概要(20210421)","url":"https://cdn-disclosure.yingmi.cn/CN_50460000_004424_FA010080_20210216_004424_20210421_000000_01.pdf"},"fundTypeAEvent":null},{"prodType":"1","fundCode":"166009","prodCode":"166009","prodName":"中欧新动力混合(LOF)A","fundName":"中欧新动力混合(LOF)A","percent":"0.1121","nav":"3.4311","navDate":"2021-06-16","fundType":"3","fundInvestType":"3","riskLevel":3,"risk5Level":3,"isQdii":false,"isPeriod":false,"isLof":true,"isIndex":false,"isEtf":false,"valDisBy":"nav","yearlyRoe":null,"unitYield":null,"dailyReturn":"-0.0142","onSale":true,"canBuy":true,"canAllot":true,"personalHighestBuyAmount":null,"tags":[],"existProdSummary":true,"prodSummary":{"id":"SUMMARY166009-V20201105","fundCode":"166009","name":"166009产品资料概要(20201105)","url":"https://cdn-disclosure.yingmi.cn/CN_50570000_166009_FA010080_20200007_166009_20201105_090000_01.pdf"},"fundTypeAEvent":null}],"adjustInfo":{"adjustmentId":251680,"comment":"继续减少波动大、风控较弱的基金,增加均衡和价值型风格的基金,增加组合防守力。","adjustedOn":"2021-03-23","details":[{"fundCode":"163411","prodCode":"163411","prodType":"1","fromPercent":"0.1028","toPercent":"0.0000","fundName":"兴全精选","prodName":"兴全精选","fundType":"3","fundInvestType":"3","isQdii":false,"isLof":false,"isPeriod":false,"isIndex":false,"isEtf":false,"valDisBy":"nav","onSale":true,"canBuy":true,"canAllot":true,"personalHighestBuyAmount":"100000.00","tags":["限大额"],"existProdSummary":true,"prodSummary":{"id":"SUMMARY163411-V20210210","fundCode":"163411","name":"163411产品资料概要(20210210)","url":"https://cdn-disclosure.yingmi.cn/CN_50310000_163411_FA010080_20210002_163411_20210210_090000_01.pdf"},"fundTypeAEvent":null},{"fundCode":"519736","prodCode":"519736","prodType":"1","fromPercent":"0.1321","toPercent":"0.1325","fundName":"交银新成长混合","prodName":"交银新成长混合","fundType":"3","fundInvestType":"3","isQdii":false,"isLof":false,"isPeriod":false,"isIndex":false,"isEtf":false,"valDisBy":"nav","onSale":true,"canBuy":true,"canAllot":true,"personalHighestBuyAmount":"100000.00","tags":["限大额"],"existProdSummary":true,"prodSummary":{"id":"SUMMARY519736-V20210528","fundCode":"519736","name":"519736产品资料概要(20210528)","url":"https://cdn-disclosure.yingmi.cn/CN_50480000_519736_FA010080_20210001_519736_20210528_090000_01.pdf"},"fundTypeAEvent":null},{"fundCode":"519778","prodCode":"519778","prodType":"1","fromPercent":"0.0654","toPercent":"0.0000","fundName":"交银经济新动力混合","prodName":"交银经济新动力混合","fundType":"3","fundInvestType":"3","isQdii":false,"isLof":false,"isPeriod":false,"isIndex":false,"isEtf":false,"valDisBy":"nav","onSale":true,"canBuy":true,"canAllot":true,"personalHighestBuyAmount":null,"tags":[],"existProdSummary":true,"prodSummary":{"id":"SUMMARY519778-V20201119","fundCode":"519778","name":"519778产品资料概要(20201119)","url":"https://cdn-disclosure.yingmi.cn/CN_50480000_519778_FA010080_20200002_519778_20201119_090000_01.pdf"},"fundTypeAEvent":null},{"fundCode":"001605","prodCode":"001605","prodType":"1","fromPercent":"0.1798","toPercent":"0.1787","fundName":"国富沪港深成长精选股票","prodName":"国富沪港深成长精选股票","fundType":"1","fundInvestType":"1","isQdii":false,"isLof":false,"isPeriod":false,"isIndex":false,"isEtf":false,"valDisBy":"nav","onSale":true,"canBuy":true,"canAllot":true,"personalHighestBuyAmount":null,"tags":[],"existProdSummary":true,"prodSummary":{"id":"SUMMARY001605-V20210330","fundCode":"001605","name":"001605产品资料概要(20210330)","url":"https://cdn-disclosure.yingmi.cn/CN_50420000_001605_FA010080_20200002_001605_20210330_000000_01.pdf"},"fundTypeAEvent":null},{"fundCode":"004424","prodCode":"004424","prodType":"1","fromPercent":"0.1285","toPercent":"0.1000","fundName":"汇添富文体娱乐混合","prodName":"汇添富文体娱乐混合","fundType":"3","fundInvestType":"3","isQdii":false,"isLof":false,"isPeriod":false,"isIndex":false,"isEtf":false,"valDisBy":"nav","onSale":true,"canBuy":true,"canAllot":true,"personalHighestBuyAmount":null,"tags":[],"existProdSummary":true,"prodSummary":{"id":"SUMMARY004424-V20210421","fundCode":"004424","name":"004424产品资料概要(20210421)","url":"https://cdn-disclosure.yingmi.cn/CN_50460000_004424_FA010080_20210216_004424_20210421_000000_01.pdf"},"fundTypeAEvent":null},{"fundCode":"005275","prodCode":"005275","prodType":"1","fromPercent":"0.1043","toPercent":"0.0000","fundName":"中欧创新成长灵活配置混合A","prodName":"中欧创新成长灵活配置混合A","fundType":"3","fundInvestType":"3","isQdii":false,"isLof":false,"isPeriod":false,"isIndex":false,"isEtf":false,"valDisBy":"nav","onSale":true,"canBuy":true,"canAllot":true,"personalHighestBuyAmount":null,"tags":[],"existProdSummary":true,"prodSummary":{"id":"SUMMARY005275-V20210324","fundCode":"005275","name":"005275产品资料概要(20210324)","url":"https://cdn-disclosure.yingmi.cn/CN_50570000_005275_FA010080_20210002_005275_20210324_090000_01.pdf"},"fundTypeAEvent":null},{"fundCode":"005760","prodCode":"005760","prodType":"1","fromPercent":"0.1092","toPercent":"0.1400","fundName":"富国周期优势混合A","prodName":"富国周期优势混合A","fundType":"3","fundInvestType":"3","isQdii":false,"isLof":false,"isPeriod":false,"isIndex":false,"isEtf":false,"valDisBy":"nav","onSale":true,"canBuy":true,"canAllot":true,"personalHighestBuyAmount":"2000000.00","tags":["限大额"],"existProdSummary":true,"prodSummary":{"id":"SUMMARY005760-V20210311","fundCode":"005760","name":"005760产品资料概要(20210311)","url":"https://cdn-disclosure.yingmi.cn/CN_50100000_005760_FA010070_20210004_005760_20210311_090000_01.pdf"},"fundTypeAEvent":null},{"fundCode":"009076","prodCode":"009076","prodType":"1","fromPercent":"0.1779","toPercent":"0.1785","fundName":"工银圆兴混合","prodName":"工银圆兴混合","fundType":"3","fundInvestType":"3","isQdii":false,"isLof":false,"isPeriod":false,"isIndex":false,"isEtf":false,"valDisBy":"nav","onSale":true,"canBuy":true,"canAllot":true,"personalHighestBuyAmount":"100000.00","tags":["限大额"],"existProdSummary":true,"prodSummary":{"id":"SUMMARY009076-V20210422","fundCode":"009076","name":"009076产品资料概要(20210422)","url":"https://cdn-disclosure.yingmi.cn/CN_50470000_009076_FA010080_20210002_009076_20210422_000000_01.pdf"},"fundTypeAEvent":null},{"fundCode":"163415","prodCode":"163415","prodType":"1","fromPercent":"0.0000","toPercent":"0.0700","fundName":"兴全商业模式优选混合","prodName":"兴全商业模式优选混合","fundType":"3","fundInvestType":"3","isQdii":false,"isLof":true,"isPeriod":false,"isIndex":false,"isEtf":false,"valDisBy":"nav","onSale":true,"canBuy":true,"canAllot":true,"personalHighestBuyAmount":"100000.00","tags":["限大额"],"existProdSummary":true,"prodSummary":{"id":"SUMMARY163415-V20210210","fundCode":"163415","name":"163415产品资料概要(20210210)","url":"https://cdn-disclosure.yingmi.cn/CN_50310000_163415_FA010080_20210001_163415_20210210_090000_01.pdf"},"fundTypeAEvent":null},{"fundCode":"166009","prodCode":"166009","prodType":"1","fromPercent":"0.0000","toPercent":"0.1200","fundName":"中欧新动力混合(LOF)A","prodName":"中欧新动力混合(LOF)A","fundType":"3","fundInvestType":"3","isQdii":false,"isLof":true,"isPeriod":false,"isIndex":false,"isEtf":false,"valDisBy":"nav","onSale":true,"canBuy":true,"canAllot":true,"personalHighestBuyAmount":null,"tags":[],"existProdSummary":true,"prodSummary":{"id":"SUMMARY166009-V20201105","fundCode":"166009","name":"166009产品资料概要(20201105)","url":"https://cdn-disclosure.yingmi.cn/CN_50570000_166009_FA010080_20200007_166009_20201105_090000_01.pdf"},"fundTypeAEvent":null},{"fundCode":"005267","prodCode":"005267","prodType":"1","fromPercent":"0.0000","toPercent":"0.0803","fundName":"嘉实价值精选股票","prodName":"嘉实价值精选股票","fundType":"1","fundInvestType":"1","isQdii":false,"isLof":false,"isPeriod":false,"isIndex":false,"isEtf":false,"valDisBy":"nav","onSale":true,"canBuy":true,"canAllot":true,"personalHighestBuyAmount":"50000000.00","tags":["限大额"],"existProdSummary":true,"prodSummary":{"id":"SUMMARY005267-V20210609","fundCode":"005267","name":"005267产品资料概要(20210609)","url":"https://cdn-disclosure.yingmi.cn/CN_50080000_005267_FA010080_20210006_005267_20210609_090000_01.pdf"},"fundTypeAEvent":null}]},"sigAdjustment":null,"extra":{"agreements":[{"id":"AGREEMENT04-V20200511","name":"盈米宝服务协议","url":"https://asset2.qieman.com/agreement/agreement04-3767ba77-fbf9-49ec-abe8-e69fb2a61a57.pdf"},{"id":"AGREEMENT06-V20200511","name":"且慢平台服务协议","url":"https://asset2.qieman.com/agreement/agreement06-63d980cd-858f-4ebb-bd7d-33b9e99578ef.pdf"}],"aipAgreements":[{"id":"AGREEMENT07-V20200511","name":"基金约定交易服务协议","url":"https://asset2.qieman.com/agreement/agreement07-211340f0-7c0d-4699-a63f-ef7d727904ea.pdf"}],"benchmarks":[{"code":"hs300","name":"沪深300"}]},"useRealPerformance":false,"riskLevel":3,"prodSummaries":[{"id":"SUMMARY519736-V20210528","fundCode":"519736","name":"519736产品资料概要(20210528)","url":"https://cdn-disclosure.yingmi.cn/CN_50480000_519736_FA010080_20210001_519736_20210528_090000_01.pdf"},{"id":"SUMMARY005760-V20210311","fundCode":"005760","name":"005760产品资料概要(20210311)","url":"https://cdn-disclosure.yingmi.cn/CN_50100000_005760_FA010070_20210004_005760_20210311_090000_01.pdf"},{"id":"SUMMARY005267-V20210609","fundCode":"005267","name":"005267产品资料概要(20210609)","url":"https://cdn-disclosure.yingmi.cn/CN_50080000_005267_FA010080_20210006_005267_20210609_090000_01.pdf"},{"id":"SUMMARY009076-V20210422","fundCode":"009076","name":"009076产品资料概要(20210422)","url":"https://cdn-disclosure.yingmi.cn/CN_50470000_009076_FA010080_20210002_009076_20210422_000000_01.pdf"},{"id":"SUMMARY001605-V20210330","fundCode":"001605","name":"001605产品资料概要(20210330)","url":"https://cdn-disclosure.yingmi.cn/CN_50420000_001605_FA010080_20200002_001605_20210330_000000_01.pdf"},{"id":"SUMMARY163415-V20210210","fundCode":"163415","name":"163415产品资料概要(20210210)","url":"https://cdn-disclosure.yingmi.cn/CN_50310000_163415_FA010080_20210001_163415_20210210_090000_01.pdf"},{"id":"SUMMARY004424-V20210421","fundCode":"004424","name":"004424产品资料概要(20210421)","url":"https://cdn-disclosure.yingmi.cn/CN_50460000_004424_FA010080_20210216_004424_20210421_000000_01.pdf"},{"id":"SUMMARY166009-V20201105","fundCode":"166009","name":"166009产品资料概要(20201105)","url":"https://cdn-disclosure.yingmi.cn/CN_50570000_166009_FA010080_20200007_166009_20201105_090000_01.pdf"}],"fundTypeAEvents":[],"followCount":2423,"canWeeklyAip":false}
获取如下内容
基金编号: ZH001798
基金名: 东方进取1号
日期: 2021-06-16
净值: 2.2379
最大回撤: 0.2778
年化波动率: 0.1795
夏普率: 0.8855
获取方法
def getfund(code):
url='https://qieman.com/pmdj/v1/pomodels/'+code
page=requests.get(url,headers=header).text
print(page)
if(page==''):
raise ValueError('请设置x-sign或检查code')
items=json.loads(page)
value=items.get("nav")
date=items.get("navDate")
name=items.get("poName")
found=items.get('establishedOn')
print("基金编号:",code,'\n基金名:',name,"\n日期:",date,"净值:",value)
maxdown=items.get("maxDrawdown")
volatility=items.get("volatility")
sharpe=items.get("sharpe")
print('最大回撤:',maxdown,'年化波动率:',volatility,'夏普率:',sharpe,'\n')
2、历史净值
观察json
省略了一部分内容省的页面过大
[{"navDate":1469462400000,"nav":1,"dailyReturn":null},{"navDate":1469548800000,"nav":1.000068248,"dailyReturn":0.000068248},{"navDate":1469635200000,"nav":1.0001278702,"dailyReturn":0.0000596182},{"navDate":1469721600000,"nav":1.0001789091,"dailyReturn":0.0000510323},{"navDate":1469980800000,"nav":0.9998294726,"dailyReturn":-0.0003493739},{"navDate":1470067200000,"nav":1.0025945807,"dailyReturn":0.0027655796},{"navDate":1606838400000,"nav":2.0272375269,"dailyReturn":-0.001792889},{"navDate":1606924800000,"nav":2.0274959278,"dailyReturn":0.0001274645},{"navDate":1607011200000,"nav":2.0458947043,"dailyReturn":0.0090746306},{"navDate":1607270400000,"nav":2.0463292921,"dailyReturn":0.0002124195},{"navDate":1607356800000,"nav":2.0577638818,"dailyReturn":0.0055878542},{"navDate":1607443200000,"nav":2.0347857009,"dailyReturn":-0.011166578},{"navDate":1607529600000,"nav":2.0417437154,"dailyReturn":0.0034195319},{"navDate":1607616000000,"nav":2.0238078002,"dailyReturn":-0.0087846065},{"navDate":1607875200000,"nav":2.0514214588,"dailyReturn":0.0136444077},{"navDate":1607961600000,"nav":2.0639874194,"dailyReturn":0.0061254895},{"navDate":1608048000000,"nav":2.0661708106,"dailyReturn":0.001057851},{"navDate":1608134400000,"nav":2.0796735919,"dailyReturn":0.0065351719},{"navDate":1608220800000,"nav":2.0835812392,"dailyReturn":0.0018789715},{"navDate":1608480000000,"nav":2.1364171246,"dailyReturn":0.0253582075},{"navDate":1608566400000,"nav":2.1073761155,"dailyReturn":-0.0135933235},{"navDate":1608652800000,"nav":2.1375027608,"dailyReturn":0.0142958084},{"navDate":1608739200000,"nav":2.1365259381,"dailyReturn":-0.0004569925},{"navDate":1608825600000,"nav":2.1629761936,"dailyReturn":0.0123800301},{"navDate":1609084800000,"nav":2.1663276441,"dailyReturn":0.0015494625},{"navDate":1609171200000,"nav":2.1458781069,"dailyReturn":-0.009439725},{"navDate":1609257600000,"nav":2.1887280922,"dailyReturn":0.0199685085},{"navDate":1609344000000,"nav":2.2244625861,"dailyReturn":0.0163266026},{"navDate":1609689600000,"nav":2.287720432,"dailyReturn":0.0284373611},{"navDate":1609776000000,"nav":2.3308133895,"dailyReturn":0.0188366362},{"navDate":1609862400000,"nav":2.3368039417,"dailyReturn":0.0025701552},{"navDate":1609948800000,"nav":2.3789822451,"dailyReturn":0.0180495687},{"navDate":1610035200000,"nav":2.3559565776,"dailyReturn":-0.0096787892},{"navDate":1610294400000,"nav":2.3430487306,"dailyReturn":-0.0054788136},{"navDate":1610380800000,"nav":2.402415483,"dailyReturn":0.0253373955},{"navDate":1610467200000,"nav":2.3776468039,"dailyReturn":-0.0103099065},{"navDate":1610553600000,"nav":2.3346334884,"dailyReturn":-0.0180907086},{"navDate":1610640000000,"nav":2.3360489395,"dailyReturn":0.0006062841},{"navDate":1610899200000,"nav":2.3791311654,"dailyReturn":0.0184423473},{"navDate":1610985600000,"nav":2.3414372679,"dailyReturn":-0.0158435558},{"navDate":1611072000000,"nav":2.3980017455,"dailyReturn":0.0241580154},{"navDate":1611158400000,"nav":2.4411536678,"dailyReturn":0.0179949503},{"navDate":1611244800000,"nav":2.4756562231,"dailyReturn":0.0141337089},{"navDate":1611504000000,"nav":2.515378047,"dailyReturn":0.0160449676},{"navDate":1611590400000,"nav":2.4522068528,"dailyReturn":-0.025113996},{"navDate":1611676800000,"nav":2.4530369588,"dailyReturn":0.0003385138},{"navDate":1611763200000,"nav":2.3776303579,"dailyReturn":-0.0307400998},{"navDate":1611849600000,"nav":2.370206742,"dailyReturn":-0.003122275},{"navDate":1612108800000,"nav":2.4228489985,"dailyReturn":0.0222099851},{"navDate":1612195200000,"nav":2.4805775569,"dailyReturn":0.0238267257},{"navDate":1612281600000,"nav":2.4801865181,"dailyReturn":-0.0001576402},{"navDate":1612368000000,"nav":2.4625676838,"dailyReturn":-0.0071038344},{"navDate":1612454400000,"nav":2.4515541952,"dailyReturn":-0.0044723598},{"navDate":1612713600000,"nav":2.4945188898,"dailyReturn":0.0175254925},{"navDate":1612800000000,"nav":2.5478495132,"dailyReturn":0.0213791219},{"navDate":1612886400000,"nav":2.59274591,"dailyReturn":0.0176212907},{"navDate":1613577600000,"nav":2.5747773332,"dailyReturn":-0.0069303269},{"navDate":1613664000000,"nav":2.5507233459,"dailyReturn":-0.0093421621},{"navDate":1613923200000,"nav":2.459978347,"dailyReturn":-0.0355761824},{"navDate":1614009600000,"nav":2.4464948727,"dailyReturn":-0.0054811353},{"navDate":1614096000000,"nav":2.3612128688,"dailyReturn":-0.0348588525},{"navDate":1614182400000,"nav":2.369032257,"dailyReturn":0.0033115982},{"navDate":1614268800000,"nav":2.3021227711,"dailyReturn":-0.0282433832},{"navDate":1614528000000,"nav":2.3598349365,"dailyReturn":0.0250691084},{"navDate":1614614400000,"nav":2.3308341788,"dailyReturn":-0.0122893162},{"navDate":1614700800000,"nav":2.3639321685,"dailyReturn":0.0142000619},{"navDate":1614787200000,"nav":2.2666446817,"dailyReturn":-0.0411549401},{"navDate":1614873600000,"nav":2.2630960867,"dailyReturn":-0.0015655718},{"navDate":1615132800000,"nav":2.1640958267,"dailyReturn":-0.0437454956},{"navDate":1615219200000,"nav":2.1254021909,"dailyReturn":-0.0178798163},{"navDate":1615305600000,"nav":2.161142572,"dailyReturn":0.0168158202},{"navDate":1615392000000,"nav":2.218893609,"dailyReturn":0.0267224559},{"navDate":1615478400000,"nav":2.2096722924,"dailyReturn":-0.0041558174},{"navDate":1615737600000,"nav":2.1533106973,"dailyReturn":-0.0255067665},{"navDate":1615824000000,"nav":2.1795742906,"dailyReturn":0.0121968434},{"navDate":1615910400000,"nav":2.2049408137,"dailyReturn":0.0116382925},{"navDate":1615996800000,"nav":2.2329361656,"dailyReturn":0.0126966455},{"navDate":1616083200000,"nav":2.1806740789,"dailyReturn":-0.0234050966},{"navDate":1616342400000,"nav":2.1878094036,"dailyReturn":0.003272073},{"navDate":1616428800000,"nav":2.1491341725,"dailyReturn":-0.0176776053},{"navDate":1616515200000,"nav":2.1058034823,"dailyReturn":-0.0201619288},{"navDate":1616601600000,"nav":2.117700396,"dailyReturn":0.005649584},{"navDate":1616688000000,"nav":2.1707032989,"dailyReturn":0.0250285182},{"navDate":1616947200000,"nav":2.180790661,"dailyReturn":0.0046470478},{"navDate":1617033600000,"nav":2.2022844774,"dailyReturn":0.0098559742},{"navDate":1617120000000,"nav":2.1884362707,"dailyReturn":-0.0062881098},{"navDate":1617206400000,"nav":2.2229272844,"dailyReturn":0.0157605749},{"navDate":1617292800000,"nav":2.2377969435,"dailyReturn":0.0066892242},{"navDate":1617638400000,"nav":2.2307743456,"dailyReturn":-0.0031381748},{"navDate":1617724800000,"nav":2.2168451458,"dailyReturn":-0.0062441097},{"navDate":1617811200000,"nav":2.2237471271,"dailyReturn":0.0031134251},{"navDate":1617897600000,"nav":2.1979353608,"dailyReturn":-0.0116073298},{"navDate":1618156800000,"nav":2.1516557929,"dailyReturn":-0.0210559276},{"navDate":1618243200000,"nav":2.1522895713,"dailyReturn":0.0002945538},{"navDate":1618329600000,"nav":2.1776986316,"dailyReturn":0.0118055956},{"navDate":1618416000000,"nav":2.170050868,"dailyReturn":-0.0035118558},{"navDate":1618502400000,"nav":2.1862609822,"dailyReturn":0.0074699236},{"navDate":1618761600000,"nav":2.2339603498,"dailyReturn":0.021817783},{"navDate":1618848000000,"nav":2.2373120606,"dailyReturn":0.0015003448},{"navDate":1618934400000,"nav":2.2351708204,"dailyReturn":-0.0009570593},{"navDate":1619020800000,"nav":2.2401798093,"dailyReturn":0.0022409871},{"navDate":1619107200000,"nav":2.2561986577,"dailyReturn":0.0071506976},{"navDate":1619366400000,"nav":2.249289921,"dailyReturn":-0.0030621137},{"navDate":1619452800000,"nav":2.2562983418,"dailyReturn":0.003115837},{"navDate":1619539200000,"nav":2.2718944076,"dailyReturn":0.0069122356},{"navDate":1619625600000,"nav":2.2717779952,"dailyReturn":-0.0000512402},{"navDate":1619712000000,"nav":2.2573003172,"dailyReturn":-0.0063728401},{"navDate":1620230400000,"nav":2.2423364831,"dailyReturn":-0.0066290843},{"navDate":1620316800000,"nav":2.2012259373,"dailyReturn":-0.0183337988},{"navDate":1620576000000,"nav":2.1915840366,"dailyReturn":-0.0043802413},{"navDate":1620662400000,"nav":2.1815185699,"dailyReturn":-0.0045927815},{"navDate":1620748800000,"nav":2.1901812464,"dailyReturn":0.0039709387},{"navDate":1620835200000,"nav":2.1657499657,"dailyReturn":-0.0111549128},{"navDate":1620921600000,"nav":2.1952320378,"dailyReturn":0.0136128697},{"navDate":1621180800000,"nav":2.2390204153,"dailyReturn":0.0199470383},{"navDate":1621267200000,"nav":2.2455808657,"dailyReturn":0.0029300538},{"navDate":1621353600000,"nav":2.2406850115,"dailyReturn":-0.0021802173},{"navDate":1621440000000,"nav":2.2464126404,"dailyReturn":0.0025561955},{"navDate":1621526400000,"nav":2.2324377407,"dailyReturn":-0.0062209852},{"navDate":1621785600000,"nav":2.2476425486,"dailyReturn":0.0068108542},{"navDate":1621872000000,"nav":2.2982736042,"dailyReturn":0.0225262935},{"navDate":1621958400000,"nav":2.2996809443,"dailyReturn":0.0006123467},{"navDate":1622044800000,"nav":2.312744502,"dailyReturn":0.0056805957},{"navDate":1622131200000,"nav":2.2954824768,"dailyReturn":-0.0074638704},{"navDate":1622390400000,"nav":2.3150482421,"dailyReturn":0.008523596},{"navDate":1622476800000,"nav":2.3272722645,"dailyReturn":0.0052802452},{"navDate":1622563200000,"nav":2.3081015095,"dailyReturn":-0.0082374354},{"navDate":1622649600000,"nav":2.2875912705,"dailyReturn":-0.0088861945},{"navDate":1622736000000,"nav":2.2995691657,"dailyReturn":0.0052360294},{"navDate":1622995200000,"nav":2.3012769253,"dailyReturn":0.0007426433},{"navDate":1623081600000,"nav":2.2820410905,"dailyReturn":-0.0083587658},{"navDate":1623168000000,"nav":2.2917587404,"dailyReturn":0.004258315},{"navDate":1623254400000,"nav":2.3011851644,"dailyReturn":0.0041131834},{"navDate":1623340800000,"nav":2.2915991739,"dailyReturn":-0.0041656754},{"navDate":1623686400000,"nav":2.2825830378,"dailyReturn":-0.0039344298},{"navDate":1623772800000,"nav":2.2379386467,"dailyReturn":-0.019558715}]
我们发现这个json是一个列表,而且时间不是用标明日期的字符串而是时间戳展现的,所以我们要写一个时间戳转时间的函数,这里用到time和datetime库。
时间戳转换函数
import time
import datetime
def qieman_to_date(s):
s=int(s)
s/=1000
day=datetime.datetime.utcfromtimestamp(s).strftime('%Y-%m-%d')
return day
获取方法
def gethistory(code,size=10):
url='https://qieman.com/pmdj/v1/pomodels/'+code+'/nav-history'
page=requests.get(url,headers=header).text
items=json.loads(page)
for item in items[-1:-size-1:-1]:
print('日期:',qieman_to_date(item.get('navDate')),'净值:',item.get('nav'))
print('\n')
这里我们从列表中读出最后的size项来,省的内容过多。
3、测试
三、完整代码
#by concyclics
import requests
import time
import json
import datetime
from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
qieman=['ZH001798','ZH012926','ZH039471','ZH010246','ZH006498','ZH000193','ZH009664','ZH030684','ZH017252','ZH007973','ZH037807','ZH007974','ZH017409','ZH035411','ZH043108','ZH043126']
#x-sign记得每天更新
header={
'x-sign':'1623897696198395318DDBC26EFC3AA40DC4A6D28E8AC'
}
#1621566508433」32A579E8505A7B5A7BB5CB69D6AA6BDD
#前13位为时间戳,后32位未知
#且慢的时间戳转日期
def qieman_to_date(s):
s=int(s)
s/=1000
day=datetime.datetime.utcfromtimestamp(s).strftime('%Y-%m-%d')
return day
def getfund(code):
url='https://qieman.com/pmdj/v1/pomodels/'+code
page=requests.get(url,headers=header).text
#print(page)
if(page==''):
raise ValueError('请设置x-sign或检查code')
items=json.loads(page)
value=items.get("nav")
date=items.get("navDate")
name=items.get("poName")
found=items.get('establishedOn')
print("基金编号:",code,'\n基金名:',name,"\n日期:",date,"净值:",value)
maxdown=items.get("maxDrawdown")
volatility=items.get("volatility")
sharpe=items.get("sharpe")
print('最大回撤:',maxdown,'年化波动率:',volatility,'夏普率:',sharpe,'\n')
#获取历史净值
def gethistory(code,size=10):
url='https://qieman.com/pmdj/v1/pomodels/'+code+'/nav-history'
page=requests.get(url,headers=header).text
items=json.loads(page)
for item in items[-1:-size-1:-1]:
print('日期:',qieman_to_date(item.get('navDate')),'净值:',item.get('nav'))
print('\n')
xsign='1623897696198395318DDBC26EFC3AA40DC4A6D28E8AC'
def updateXsign():
url = 'https://qieman.com'
d = DesiredCapabilities.CHROME
d['loggingPrefs'] = {'performance': 'ALL'}
option = webdriver.ChromeOptions()
option.add_argument('headless')
browser = webdriver.Chrome(options=option)
browser.get(url)
info = browser.get_log('performance')
#print(info)
for i in info:
dic_info = json.loads(i["message"])
info = dic_info["message"]['params']
if 'request' in info:
#print(info['request'])
if 'headers' in info['request']:
#print(info['request']['headers'])
if 'x-sign' in info['request']['headers']:
# print(info['request']['headers']['x-sign'])
header['x-sign']=info['request']['headers']['x-sign']
browser.close()
if __name__=='__main__':
updateXsign()
getfund(qieman[0])
gethistory(qieman[0])