refactor: add fund cvs class

main
luxuemin 3 years ago
parent 618d5bd35c
commit 552a8f170a

@ -1,6 +1,6 @@
morning_star_username="xxxx"
morning_star_password="xxx"
snapshot_table_name="xxx"
login_cookie="xxx"
# about database

@ -1,187 +1 @@
代码,晨星专属号,名称,类型,股票总仓位,页码,备注
003529, 0P00018W2Q, 汇添富长添利定期开放债券C, 普通债券型基金(封闭), 0.00, 3120, li[16]
004832, 0P0001CBPL, 汇添富鑫泽定期开放债券C, 普通债券型基金(封闭), 0.00, 3150, li[16]
005214, 0P0001CLLW, 华夏鼎旺三个月定期开放债券C, 普通债券型基金(封闭), 0.00, 3150, li[16]
005365, 0P0001D9DK, 华夏鼎顺三个月定期开放债券C, 普通债券型基金(封闭), 0.00, 3160, li[16]
005500, 0P0001DCZC, 银华岁盈定期开放债券, 普通债券型基金(封闭), 0.00, 3170, li[16]
005792, 0P0001DKU5, 华夏鼎福三个月定期开放债券C, 普通债券型基金(封闭), 0.00, 3190, li[16]
005858, 0P0001D51Q, 汇添富鑫成定期开放债券C, 普通债券型基金(封闭), 0.00, 3190, li[16]
005863, 0P0001EKME, 华夏鼎禄三个月定期开放债券C, 普通债券型基金(封闭), 0.00, 3190, li[16]
005964, 0P0001D7EG, 中欧安财定期开放债券, 普通债券型基金(封闭), 0.00, 3200, li[16]
007712, 0P0001I7FR, 中银康享3个月定期开放债券, 普通债券型基金(封闭), 0.00, 3230, li[16]
008139, 0P0001J0ZR, 鑫元一年定期开放中高等级债券, 普通债券型基金(封闭), 0.00, 3230, li[16]
008289, 0P0001JOVJ, 国寿安保泰祥纯债一年定期开放债券, 普通债券型基金(封闭), 0.00, 3230, li[16]
008360, 0P0001KJ4Z, 鹏扬淳选一年定期开放债券, 普通债券型基金(封闭), 0.00, 3240, li[16]
008463, 0P0001JOVH, 招商添瑞1年定期开放债券A, 普通债券型基金(封闭), 0.00, 3240, li[16]
008464, 0P0001JOVI, 招商添瑞1年定期开放债券C, 普通债券型基金(封闭), 0.00, 3240, li[16]
008508, 0P0001JKQ4, 中融聚锦一年定期开放债券, 普通债券型基金(封闭), 0.00, 3240, li[16]
008766, 0P0001JVY7, 财通资管鸿盛12个月定期开放债券A, 普通债券型基金(封闭), 0.00, 3250, li[16]
008767, 0P0001JVY8, 财通资管鸿盛12个月定期开放债券C, 普通债券型基金(封闭), 0.00, 3250, li[16]
008826, 0P0001K2ER, 天弘成享一年定期开放债券, 普通债券型基金(封闭), 0.00, 3250, li[16]
008925, 0P0001JV4Q, 鹏华尊达一年定期开放债券, 普通债券型基金(封闭), 0.00, 3260, li[16]
001274, 0P000187Q2, 民生加银新动力灵活配置混合D, 灵活配置型基金, 33.04, 5640, li[16]
011420, 0P0001LKWB, 广发全球科技三个月定期开放混合QDII人民币A, , 0.00, 2150, li[16]
011421, 0P0001LKWD, 广发全球科技三个月定期开放混合QDII美元A, , 0.00, 2150, li[16]
011422, 0P0001LKW8, 广发全球科技三个月定期开放混合QDII人民币C, , 0.00, 2150, li[16]
011423, 0P0001LKW9, 广发全球科技三个月定期开放混合QDII美元C, , 0.00, 2150, li[16]
970001, 0P0001LLLX, 天风证券天泽六个月定期开放债券A, 普通债券型基金(封闭), 0.00, 3280, li[16]
970002, 0P0001LLLY, 天风证券天泽六个月定期开放债券C, 普通债券型基金(封闭), 0.00, 3280, li[16]
003184, 0P0001A90J, 中证财通中国可持续发展100 (ECPI ESG) 指数增强C, 普通股票型, 94.67, 3300, li[16]
968068, 0P0001K5PY, 惠理高息股票基金 P USD Acc, 亚洲不包括日本股票, 95.10, 2180, li[16]
005658, 0P0001CNDG, 华夏沪深300ETF联接C, 普通股票型, 0.00, 3350, None
240010, F00000043F, 华宝行业精选混合, 积极配置型, 80.19, 1460, None
008719, 0P0001LJ1H, 德邦安顺混合A, 保守混合型基金, 0.00, 2350, li[16]
008720, 0P0001LJ1I, 德邦安顺混合C, 保守混合型基金, 0.00, 2350, li[16]
001774, 0P00016GLJ, 招商丰庆灵活配置混合C, 灵活配置型基金, 0.00, 5860, li[16]
009247, 0P0001KEQ1, 易方达磐恒九个月持有期混合A, 保守混合型基金, 18.40, 2400, li[16]
009248, 0P0001KEQ2, 易方达磐恒九个月持有期混合C, 保守混合型基金, 18.40, 2400, li[16]
009810, 0P0001L65F, 易方达悦通一年持有期混合A, 保守混合型基金, 0.00, 2440, li[16]
009811, 0P0001L65G, 易方达悦通一年持有期混合C, 保守混合型基金, 0.00, 2440, li[16]
009812, 0P0001KZ92, 易方达悦兴一年持有期混合A, 保守混合型基金, 0.00, 2440, li[16]
009813, 0P0001KZ93, 易方达悦兴一年持有期混合C, 保守混合型基金, 0.00, 2440, li[16]
009902, 0P0001KN1O, 易方达悦享一年持有期混合A, 保守混合型基金, 18.54, 2450, li[16]
009903, 0P0001KN1Q, 易方达悦享一年持有期混合C, 保守混合型基金, 18.54, 2450, li[16]
010222, 0P0001LI8H, 摩根士丹利华鑫民丰盈和一年持有期混合, 保守混合型基金, 0.00, 2480, li[16]
009981, 0P0001LFN3, 万家创业板指数增强A, 普通股票型, 0.00, 3740, li[16]
009982, 0P0001LFN4, 万家创业板指数增强C, 普通股票型, 0.00, 3740, li[16]
010120, 0P0001LF71, 九泰久福量化股票A, 普通股票型, 0.00, 3750, li[16]
010121, 0P0001LF72, 九泰久福量化股票C, 普通股票型, 0.00, 3750, li[16]
010253, 0P0001LJ9O, 兴银中证500指数增强A, 普通股票型, 0.00, 3770, li[16]
010322, 0P0001LLTR, 摩根士丹利华鑫新兴产业股票, 普通股票型, 0.00, 3770, li[16]
010854, 0P0001LC8R, 汇添富沪深300基本面增强指数A, 普通股票型, 0.00, 3790, li[16]
010855, 0P0001LC8S, 汇添富沪深300基本面增强指数C, 普通股票型, 0.00, 3790, li[16]
010953, 0P0001LGK3, 天弘国证A50指数A, 普通股票型, 0.00, 3800, li[16]
010954, 0P0001LGK4, 天弘国证A50指数C, 普通股票型, 0.00, 3800, li[16]
011205, 0P0001LJ9P, 兴银中证500指数增强C, 普通股票型, 0.00, 3810, li[16]
009794, 0P0001K9CN, 太平智选一年定期开放股票, 普通股票型(封闭), 85.34, 4010, li[16]
004051, 0P0001AIS0, 华夏新锦升灵活配置混合C, 灵活配置型基金, 65.19, 6410, li[16]
009677, 0P0001L3FK, 浙商智多益稳健一年持有期混合A, 沪港深保守混合型, 0.00, 4200, li[16]
009678, 0P0001L3FL, 浙商智多益稳健一年持有期混合C, 沪港深保守混合型, 0.00, 4210, li[16]
009725, 0P0001K7SS, 东方红优质甄选一年持有期混合, 沪港深保守混合型, 12.68, 4210, li[16]
009806, 0P0001KEF1, 东方红招盈甄选一年持有期混合A, 沪港深保守混合型, 12.37, 4220, li[16]
009807, 0P0001KEF2, 东方红招盈甄选一年持有期混合C, 沪港深保守混合型, 12.37, 4220, li[16]
009977, 0P0001L2WK, 银华招利一年持有期混合A, 沪港深保守混合型, 0.00, 4220, li[16]
009978, 0P0001L2WL, 银华招利一年持有期混合C, 沪港深保守混合型, 0.00, 4230, li[16]
010219, 0P0001LANH, 汇添富稳健添益一年持有期混合, 沪港深保守混合型, 0.00, 4240, li[16]
010242, 0P0001L65L, 平安稳健增长混合A, 沪港深保守混合型, 0.00, 4240, li[16]
010243, 0P0001L65M, 平安稳健增长混合C, 沪港深保守混合型, 0.00, 4240, li[16]
010404, 0P0001L8MI, 博道盛利6个月持有期混合, 沪港深保守混合型, 0.00, 4240, li[16]
010408, 0P0001L9PX, 安信浩盈6个月持有期混合, 沪港深保守混合型, 0.00, 4240, li[16]
010480, 0P0001LFTD, 汇添富稳进双盈一年持有期混合, 沪港深保守混合型, 0.00, 4240, li[16]
010683, 0P0001L9PO, 中融景颐6个月持有期混合A, 沪港深保守混合型, 0.00, 4260, li[16]
010684, 0P0001L9PP, 中融景颐6个月持有期混合C, 沪港深保守混合型, 0.00, 4260, li[16]
010688, 0P0001LDH8, 招商瑞德一年持有期混合A, 沪港深保守混合型, 0.00, 4260, li[16]
010689, 0P0001LDH9, 招商瑞德一年持有期混合C, 沪港深保守混合型, 0.00, 4260, li[16]
010707, 0P0001LFN0, 安信平稳合盈一年持有期混合A, 沪港深保守混合型, 0.00, 4260, li[16]
010708, 0P0001LFN1, 安信平稳合盈一年持有期混合C, 沪港深保守混合型, 0.00, 4260, li[16]
010725, 0P0001L3AI, 鹏华安享一年持有期混合A, 沪港深保守混合型, 0.00, 4270, li[16]
010726, 0P0001L3AJ, 鹏华安享一年持有期混合C, 沪港深保守混合型, 0.00, 4270, li[16]
010762, 0P0001L65A, 博时恒康一年持有期混合A, 沪港深保守混合型, 0.00, 4270, li[16]
010763, 0P0001L65B, 博时恒康一年持有期混合C, 沪港深保守混合型, 0.00, 4270, li[16]
010775, 0P0001L6OO, 博时恒旭一年持有期混合A, 沪港深保守混合型, 0.00, 4270, li[16]
010776, 0P0001L6OP, 博时恒旭一年持有期混合C, 沪港深保守混合型, 0.00, 4270, li[16]
010797, 0P0001LDHO, 长城优选回报六个月持有期混合A, 沪港深保守混合型, 0.00, 4270, li[16]
010798, 0P0001LDHP, 长城优选回报六个月持有期混合C, 沪港深保守混合型, 0.00, 4280, li[16]
010830, 0P0001LFTF, 国泰通利9个月持有期混合A, 沪港深保守混合型, 0.00, 4280, li[16]
010831, 0P0001LFTG, 国泰通利9个月持有期混合C, 沪港深保守混合型, 0.00, 4280, li[16]
010832, 0P0001LI8E, 国泰合益混合A, 沪港深保守混合型, 0.00, 4280, li[16]
010833, 0P0001LI8F, 国泰合益混合C, 沪港深保守混合型, 0.00, 4280, li[16]
010843, 0P0001LLTL, 富国天润回报混合A, 沪港深保守混合型, 0.00, 4280, li[16]
010844, 0P0001LLTK, 富国天润回报混合C, 沪港深保守混合型, 0.00, 4280, li[16]
010879, 0P0001L8CX, 南方宝升混合A, 沪港深保守混合型, 0.00, 4290, li[16]
010880, 0P0001L8CY, 南方宝升混合C, 沪港深保守混合型, 0.00, 4290, li[16]
010904, 0P0001L8VO, 博时双季鑫6个月持有期混合A, 沪港深保守混合型, 0.00, 4290, li[16]
010905, 0P0001L8VQ, 博时双季鑫6个月持有期混合C, 沪港深保守混合型, 0.00, 4290, li[16]
010924, 0P0001L8VP, 博时双季鑫6个月持有期混合B, 沪港深保守混合型, 0.00, 4290, li[16]
011017, 0P0001LCI7, 鹏扬景明一年持有期混合, 沪港深保守混合型, 0.00, 4300, li[16]
011044, 0P0001LDPM, 中银顺泽回报一年持有期混合A, 沪港深保守混合型, 0.00, 4300, li[16]
011045, 0P0001LDPN, 中银顺泽回报一年持有期混合C, 沪港深保守混合型, 0.00, 4300, li[16]
011052, 0P0001L4NZ, 鹏华弘裕一年持有期混合A, 沪港深保守混合型, 0.00, 4300, li[16]
011053, 0P0001L4O0, 鹏华弘裕一年持有期混合C, 沪港深保守混合型, 0.00, 4300, li[16]
011071, 0P0001L13N, 鹏华安悦一年持有期混合A, 沪港深保守混合型, 0.00, 4300, li[16]
011072, 0P0001L13O, 鹏华安悦一年持有期混合C, 沪港深保守混合型, 0.00, 4300, li[16]
011095, 0P0001LERZ, 博时恒泽混合A, 沪港深保守混合型, 0.00, 4310, li[16]
011096, 0P0001LES0, 博时恒泽混合C, 沪港深保守混合型, 0.00, 4310, li[16]
011118, 0P0001LM6W, 汇添富稳健睿选一年持有期混合A, 沪港深保守混合型, 0.00, 4310, li[16]
011119, 0P0001LM6Z, 汇添富稳健睿选一年持有期混合C, 沪港深保守混合型, 0.00, 4310, li[16]
011175, 0P0001LG30, 平安恒鑫混合A, 沪港深保守混合型, 0.00, 4310, li[16]
011176, 0P0001LG31, 平安恒鑫混合C, 沪港深保守混合型, 0.00, 4310, li[16]
011302, 0P0001LJ17, 易方达悦盈一年持有期混合A, 沪港深保守混合型, 0.00, 4310, li[16]
011303, 0P0001LJ18, 易方达悦盈一年持有期混合C, 沪港深保守混合型, 0.00, 4310, li[16]
011336, 0P0001LJ9C, 兴全汇吉一年持有期混合A, 沪港深保守混合型, 0.00, 4310, li[16]
011337, 0P0001LJ9D, 兴全汇吉一年持有期混合C, 沪港深保守混合型, 0.00, 4310, li[16]
011393, 0P0001LLIT, 中欧融益稳健一年持有期混合A, 沪港深保守混合型, 0.00, 4320, li[16]
011394, 0P0001LLIV, 中欧融益稳健一年持有期混合C, 沪港深保守混合型, 0.00, 4320, li[16]
011508, 0P0001LJPV, 易方达悦弘一年持有期混合A, 沪港深保守混合型, 0.00, 4320, li[16]
011509, 0P0001LJPW, 易方达悦弘一年持有期混合C, 沪港深保守混合型, 0.00, 4320, li[16]
011516, 0P0001LMPB, 嘉实浦盈一年持有期混合A, 沪港深保守混合型, 0.00, 4320, li[16]
011517, 0P0001LMPC, 嘉实浦盈一年持有期混合C, 沪港深保守混合型, 0.00, 4320, li[16]
011525, 0P0001LN6O, 中信保诚丰裕一年持有期混合A, 沪港深保守混合型, 0.00, 4320, li[16]
011526, 0P0001LN6N, 中信保诚丰裕一年持有期混合C, 沪港深保守混合型, 0.00, 4320, li[16]
011580, 0P0001LP0Z, 民生加银稳健配置6个月持有期混合FOF, 沪港深保守混合型, 0.00, 4320, li[16]
008263, 0P0001IYR0, 东方红品质优选两年定期开放混合, 沪港深保守混合型(封闭), 25.10, 4330, li[16]
008416, 0P0001IYR1, 鹏扬景瑞三年定期开放混合A, 沪港深保守混合型(封闭), 28.33, 4330, li[16]
008417, 0P0001IYR2, 鹏扬景瑞三年定期开放混合C, 沪港深保守混合型(封闭), 28.33, 4330, li[16]
009031, 0P0001JKQ8, 工银瑞信聚和一年定期开放混合A, 沪港深保守混合型(封闭), 19.94, 4330, li[16]
009032, 0P0001JKQ9, 工银瑞信聚和一年定期开放混合C, 沪港深保守混合型(封闭), 19.94, 4330, li[16]
009144, 0P0001JGSZ, 博时荣升稳健添利18个月定期开放混合A, 沪港深保守混合型(封闭), 5.25, 4330, li[16]
009145, 0P0001JGT0, 博时荣升稳健添利18个月定期开放混合C, 沪港深保守混合型(封闭), 5.25, 4340, li[16]
009691, 0P0001K9CH, 国泰浩益18个月封闭运作混合A, 沪港深保守混合型(封闭), 20.93, 4340, li[16]
009692, 0P0001K9CI, 国泰浩益18个月封闭运作混合C, 沪港深保守混合型(封闭), 20.93, 4340, li[16]
009718, 0P0001L3L9, 招商增浩一年定期开放混合A, 沪港深保守混合型(封闭), 0.00, 4340, li[16]
009719, 0P0001L3LA, 招商增浩一年定期开放混合C, 沪港深保守混合型(封闭), 0.00, 4340, li[16]
009842, 0P0001KF5S, 东方红明鉴优选两年定期开放混合, 沪港深保守混合型(封闭), 23.01, 4340, li[16]
009927, 0P0001L725, 工银瑞信聚利18个月定期开放混合A, 沪港深保守混合型(封闭), 0.00, 4340, li[16]
009928, 0P0001L726, 工银瑞信聚利18个月定期开放混合C, 沪港深保守混合型(封闭), 0.00, 4340, li[16]
010700, 0P0001LE90, 东方红锦丰优选两年定期开放混合, 沪港深保守混合型(封闭), 0.00, 4350, li[16]
169108, 0P0001JBT1, 东方红均衡优选两年定期开放混合, 沪港深保守混合型(封闭), 23.80, 4350, li[16]
005950, 0P0001DCLC, 鑫元行业轮动灵活配置混合C, 沪港深灵活配置型, 79.31, 4400, li[16]
010902, 0P0001LF6V, 博时成长领航灵活配置混合A, 沪港深灵活配置型, 0.00, 4480, li[16]
010903, 0P0001LF6W, 博时成长领航灵活配置混合C, 沪港深灵活配置型, 0.00, 4480, li[16]
011021, 0P0001LFEG, 汇添富互联网核心资产六个月持有期混合A, 沪港深灵活配置型, 0.00, 4480, li[16]
011022, 0P0001LFEH, 汇添富互联网核心资产六个月持有期混合C, 沪港深灵活配置型, 0.00, 4480, li[16]
011056, 0P0001LD48, 博时汇兴回报一年持有期灵活配置混合, 沪港深灵活配置型, 0.00, 4480, li[16]
007207, 0P0001I7G1, 华夏常阳三年定期开放混合, 沪港深灵活配置型(封闭), 79.86, 4510, li[16]
007639, 0P0001I3PR, 汇添富3年封闭运作竞争优势灵活配置混合, 沪港深灵活配置型(封闭), 68.57, 4510, li[16]
008966, 0P0001J4VX, 博时成长优选两年封闭运作灵活配置混合A, 沪港深灵活配置型(封闭), 88.65, 4510, li[16]
008967, 0P0001J4VY, 博时成长优选两年封闭运作灵活配置混合C, 沪港深灵活配置型(封闭), 88.65, 4510, li[16]
009217, 0P0001JJ2U, 博时荣丰回报三年封闭运作灵活配置混合A, 沪港深灵活配置型(封闭), 89.04, 4520, li[16]
009218, 0P0001JJ2V, 博时荣丰回报三年封闭运作灵活配置混合C, 沪港深灵活配置型(封闭), 89.04, 4520, li[16]
009715, 0P0001K69T, 汇添富策略增长两年封闭运作灵活配置混合, 沪港深灵活配置型(封闭), 90.22, 4520, li[16]
970015, 0P0001LM7F, 申万宏源红利成长灵活配置混合, 灵活配置型基金, 0.00, 6990, li[16]
007501, 0P0001IF4Z, 万家科创主题3年封闭运作灵活配置混合C, 灵活配置型基金(封闭), 78.84, 7030, li[16]
008890, 0P0001K18K, 中邮价值优选一年定期开放灵活配置混合, 灵活配置型基金(封闭), 89.45, 7040, li[16]
009048, 0P0001JET9, 浦银安盛科技创新优选三年封闭运作灵活配置混合, 灵活配置型基金(封闭), 41.48, 7040, li[16]
009595, 0P0001K0AL, 山西证券裕盛一年定期开放灵活配置混合, 灵活配置型基金(封闭), 93.91, 7040, li[16]
010130, 0P0001KOAP, 海富通惠增多策略一年定期开放灵活配置混合A, 灵活配置型基金(封闭), 24.81, 7040, li[16]
010131, 0P0001KOAQ, 海富通惠增多策略一年定期开放灵活配置混合C, 灵活配置型基金(封闭), 24.81, 7040, li[16]
008480, 0P0001JC4Z, 永赢股息优选混合A, 沪港深积极配置型, 93.91, 4810, None
008481, 0P0001JC50, 永赢股息优选混合C, 沪港深积极配置型, 93.91, 4810, None
009342, 0P0001JV4P, 易方达优质企业三年持有期混合, 沪港深积极配置型, 94.64, 4900, li[16]
009859, 0P0001L5TN, 银华乐享混合, 沪港深积极配置型, 0.00, 4950, li[16]
007315, 0P0001L9PQ, 汇安嘉盈一年持有期债券A, 积极债券型, 0.00, 7300, li[16]
010041, 0P0001LFER, 嘉实港股优势混合A, 沪港深积极配置型, 0.00, 4990, li[16]
010042, 0P0001LFES, 嘉实港股优势混合C, 沪港深积极配置型, 0.00, 4990, li[16]
009465, 0P0001LL7B, 东方可转债债券A, 积极债券型, 0.00, 7350, li[16]
009466, 0P0001LL7A, 东方可转债债券C, 积极债券型, 0.00, 7350, li[16]
009943, 0P0001LDHB, 浦银安盛稳健丰利债券A, 积极债券型, 0.00, 7360, li[16]
009944, 0P0001LDHC, 浦银安盛稳健丰利债券C, 积极债券型, 0.00, 7370, li[16]
010270, 0P0001L9PR, 汇安嘉盈一年持有期债券C, 积极债券型, 0.00, 7380, li[16]
010473, 0P0001LDPU, 华富安华债券A, 积极债券型, 0.00, 7390, li[16]
010474, 0P0001LDPV, 华富安华债券C, 积极债券型, 0.00, 7390, li[16]
010475, 0P0001LFEI, 上投摩根安享回报一年持有期债券, 积极债券型, 0.00, 7390, li[16]
010619, 0P0001LEKC, 华安添利6个月持有期债券A, 积极债券型, 0.00, 7390, li[16]
010620, 0P0001LEKD, 华安添利6个月持有期债券C, 积极债券型, 0.00, 7390, li[16]
010651, 0P0001L7ZV, 平安双季增享6个月持有期债券A, 积极债券型, 0.00, 7390, li[16]
010652, 0P0001L7ZW, 平安双季增享6个月持有期债券C, 积极债券型, 0.00, 7400, li[16]
010803, 0P0001LF73, 天弘庆享债券A, 积极债券型, 0.00, 7400, li[16]
010804, 0P0001LF74, 天弘庆享债券C, 积极债券型, 0.00, 7400, li[16]
010899, 0P0001LCTL, 上银慧恒收益增强债券, 积极债券型, 0.00, 7400, li[16]
011168, 0P0001LGU5, 嘉实睿享安久双利18个月持有期债券, 积极债券型, 0.00, 7400, li[16]
952020, 0P0001LLTN, 国君资管君得盈债券A, 积极债券型, 0.00, 7410, li[16]
952320, 0P0001LLTM, 国君资管君得盈债券C, 积极债券型, 0.00, 7410, li[16]
008743, 0P0001JAAS, 南方集利18个月定期开放债券A, 积极债券型(封闭), 8.36, 7440, li[16]
008744, 0P0001JAAT, 南方集利18个月定期开放债券C, 积极债券型(封闭), 8.36, 7440, li[16]
009158, 0P0001JS1A, 中金衡利1年定期开放债券, 积极债券型(封闭), 11.13, 7440, li[16]
010493, 0P0001L1LX, 中航瑞昱一年定期开放债券A, 积极债券型(封闭), 0.00, 7450, li[16]
010494, 0P0001L1LY, 中航瑞昱一年定期开放债券C, 积极债券型(封闭), 0.00, 7450, li[16]

1 代码 晨星专属号 名称 类型 股票总仓位 页码 备注
003529 0P00018W2Q 汇添富长添利定期开放债券C 普通债券型基金(封闭) 0.00 3120 li[16]
004832 0P0001CBPL 汇添富鑫泽定期开放债券C 普通债券型基金(封闭) 0.00 3150 li[16]
005214 0P0001CLLW 华夏鼎旺三个月定期开放债券C 普通债券型基金(封闭) 0.00 3150 li[16]
005365 0P0001D9DK 华夏鼎顺三个月定期开放债券C 普通债券型基金(封闭) 0.00 3160 li[16]
005500 0P0001DCZC 银华岁盈定期开放债券 普通债券型基金(封闭) 0.00 3170 li[16]
005792 0P0001DKU5 华夏鼎福三个月定期开放债券C 普通债券型基金(封闭) 0.00 3190 li[16]
005858 0P0001D51Q 汇添富鑫成定期开放债券C 普通债券型基金(封闭) 0.00 3190 li[16]
005863 0P0001EKME 华夏鼎禄三个月定期开放债券C 普通债券型基金(封闭) 0.00 3190 li[16]
005964 0P0001D7EG 中欧安财定期开放债券 普通债券型基金(封闭) 0.00 3200 li[16]
007712 0P0001I7FR 中银康享3个月定期开放债券 普通债券型基金(封闭) 0.00 3230 li[16]
008139 0P0001J0ZR 鑫元一年定期开放中高等级债券 普通债券型基金(封闭) 0.00 3230 li[16]
008289 0P0001JOVJ 国寿安保泰祥纯债一年定期开放债券 普通债券型基金(封闭) 0.00 3230 li[16]
008360 0P0001KJ4Z 鹏扬淳选一年定期开放债券 普通债券型基金(封闭) 0.00 3240 li[16]
008463 0P0001JOVH 招商添瑞1年定期开放债券A 普通债券型基金(封闭) 0.00 3240 li[16]
008464 0P0001JOVI 招商添瑞1年定期开放债券C 普通债券型基金(封闭) 0.00 3240 li[16]
008508 0P0001JKQ4 中融聚锦一年定期开放债券 普通债券型基金(封闭) 0.00 3240 li[16]
008766 0P0001JVY7 财通资管鸿盛12个月定期开放债券A 普通债券型基金(封闭) 0.00 3250 li[16]
008767 0P0001JVY8 财通资管鸿盛12个月定期开放债券C 普通债券型基金(封闭) 0.00 3250 li[16]
008826 0P0001K2ER 天弘成享一年定期开放债券 普通债券型基金(封闭) 0.00 3250 li[16]
008925 0P0001JV4Q 鹏华尊达一年定期开放债券 普通债券型基金(封闭) 0.00 3260 li[16]
001274 0P000187Q2 民生加银新动力灵活配置混合D 灵活配置型基金 33.04 5640 li[16]
011420 0P0001LKWB 广发全球科技三个月定期开放混合(QDII)人民币A 0.00 2150 li[16]
011421 0P0001LKWD 广发全球科技三个月定期开放混合(QDII)美元A 0.00 2150 li[16]
011422 0P0001LKW8 广发全球科技三个月定期开放混合(QDII)人民币C 0.00 2150 li[16]
011423 0P0001LKW9 广发全球科技三个月定期开放混合(QDII)美元C 0.00 2150 li[16]
970001 0P0001LLLX 天风证券天泽六个月定期开放债券A 普通债券型基金(封闭) 0.00 3280 li[16]
970002 0P0001LLLY 天风证券天泽六个月定期开放债券C 普通债券型基金(封闭) 0.00 3280 li[16]
003184 0P0001A90J 中证财通中国可持续发展100 (ECPI ESG) 指数增强C 普通股票型 94.67 3300 li[16]
968068 0P0001K5PY 惠理高息股票基金 P USD Acc 亚洲不包括日本股票 95.10 2180 li[16]
005658 0P0001CNDG 华夏沪深300ETF联接C 普通股票型 0.00 3350 None
240010 F00000043F 华宝行业精选混合 积极配置型 80.19 1460 None
008719 0P0001LJ1H 德邦安顺混合A 保守混合型基金 0.00 2350 li[16]
008720 0P0001LJ1I 德邦安顺混合C 保守混合型基金 0.00 2350 li[16]
001774 0P00016GLJ 招商丰庆灵活配置混合C 灵活配置型基金 0.00 5860 li[16]
009247 0P0001KEQ1 易方达磐恒九个月持有期混合A 保守混合型基金 18.40 2400 li[16]
009248 0P0001KEQ2 易方达磐恒九个月持有期混合C 保守混合型基金 18.40 2400 li[16]
009810 0P0001L65F 易方达悦通一年持有期混合A 保守混合型基金 0.00 2440 li[16]
009811 0P0001L65G 易方达悦通一年持有期混合C 保守混合型基金 0.00 2440 li[16]
009812 0P0001KZ92 易方达悦兴一年持有期混合A 保守混合型基金 0.00 2440 li[16]
009813 0P0001KZ93 易方达悦兴一年持有期混合C 保守混合型基金 0.00 2440 li[16]
009902 0P0001KN1O 易方达悦享一年持有期混合A 保守混合型基金 18.54 2450 li[16]
009903 0P0001KN1Q 易方达悦享一年持有期混合C 保守混合型基金 18.54 2450 li[16]
010222 0P0001LI8H 摩根士丹利华鑫民丰盈和一年持有期混合 保守混合型基金 0.00 2480 li[16]
009981 0P0001LFN3 万家创业板指数增强A 普通股票型 0.00 3740 li[16]
009982 0P0001LFN4 万家创业板指数增强C 普通股票型 0.00 3740 li[16]
010120 0P0001LF71 九泰久福量化股票A 普通股票型 0.00 3750 li[16]
010121 0P0001LF72 九泰久福量化股票C 普通股票型 0.00 3750 li[16]
010253 0P0001LJ9O 兴银中证500指数增强A 普通股票型 0.00 3770 li[16]
010322 0P0001LLTR 摩根士丹利华鑫新兴产业股票 普通股票型 0.00 3770 li[16]
010854 0P0001LC8R 汇添富沪深300基本面增强指数A 普通股票型 0.00 3790 li[16]
010855 0P0001LC8S 汇添富沪深300基本面增强指数C 普通股票型 0.00 3790 li[16]
010953 0P0001LGK3 天弘国证A50指数A 普通股票型 0.00 3800 li[16]
010954 0P0001LGK4 天弘国证A50指数C 普通股票型 0.00 3800 li[16]
011205 0P0001LJ9P 兴银中证500指数增强C 普通股票型 0.00 3810 li[16]
009794 0P0001K9CN 太平智选一年定期开放股票 普通股票型(封闭) 85.34 4010 li[16]
004051 0P0001AIS0 华夏新锦升灵活配置混合C 灵活配置型基金 65.19 6410 li[16]
009677 0P0001L3FK 浙商智多益稳健一年持有期混合A 沪港深保守混合型 0.00 4200 li[16]
009678 0P0001L3FL 浙商智多益稳健一年持有期混合C 沪港深保守混合型 0.00 4210 li[16]
009725 0P0001K7SS 东方红优质甄选一年持有期混合 沪港深保守混合型 12.68 4210 li[16]
009806 0P0001KEF1 东方红招盈甄选一年持有期混合A 沪港深保守混合型 12.37 4220 li[16]
009807 0P0001KEF2 东方红招盈甄选一年持有期混合C 沪港深保守混合型 12.37 4220 li[16]
009977 0P0001L2WK 银华招利一年持有期混合A 沪港深保守混合型 0.00 4220 li[16]
009978 0P0001L2WL 银华招利一年持有期混合C 沪港深保守混合型 0.00 4230 li[16]
010219 0P0001LANH 汇添富稳健添益一年持有期混合 沪港深保守混合型 0.00 4240 li[16]
010242 0P0001L65L 平安稳健增长混合A 沪港深保守混合型 0.00 4240 li[16]
010243 0P0001L65M 平安稳健增长混合C 沪港深保守混合型 0.00 4240 li[16]
010404 0P0001L8MI 博道盛利6个月持有期混合 沪港深保守混合型 0.00 4240 li[16]
010408 0P0001L9PX 安信浩盈6个月持有期混合 沪港深保守混合型 0.00 4240 li[16]
010480 0P0001LFTD 汇添富稳进双盈一年持有期混合 沪港深保守混合型 0.00 4240 li[16]
010683 0P0001L9PO 中融景颐6个月持有期混合A 沪港深保守混合型 0.00 4260 li[16]
010684 0P0001L9PP 中融景颐6个月持有期混合C 沪港深保守混合型 0.00 4260 li[16]
010688 0P0001LDH8 招商瑞德一年持有期混合A 沪港深保守混合型 0.00 4260 li[16]
010689 0P0001LDH9 招商瑞德一年持有期混合C 沪港深保守混合型 0.00 4260 li[16]
010707 0P0001LFN0 安信平稳合盈一年持有期混合A 沪港深保守混合型 0.00 4260 li[16]
010708 0P0001LFN1 安信平稳合盈一年持有期混合C 沪港深保守混合型 0.00 4260 li[16]
010725 0P0001L3AI 鹏华安享一年持有期混合A 沪港深保守混合型 0.00 4270 li[16]
010726 0P0001L3AJ 鹏华安享一年持有期混合C 沪港深保守混合型 0.00 4270 li[16]
010762 0P0001L65A 博时恒康一年持有期混合A 沪港深保守混合型 0.00 4270 li[16]
010763 0P0001L65B 博时恒康一年持有期混合C 沪港深保守混合型 0.00 4270 li[16]
010775 0P0001L6OO 博时恒旭一年持有期混合A 沪港深保守混合型 0.00 4270 li[16]
010776 0P0001L6OP 博时恒旭一年持有期混合C 沪港深保守混合型 0.00 4270 li[16]
010797 0P0001LDHO 长城优选回报六个月持有期混合A 沪港深保守混合型 0.00 4270 li[16]
010798 0P0001LDHP 长城优选回报六个月持有期混合C 沪港深保守混合型 0.00 4280 li[16]
010830 0P0001LFTF 国泰通利9个月持有期混合A 沪港深保守混合型 0.00 4280 li[16]
010831 0P0001LFTG 国泰通利9个月持有期混合C 沪港深保守混合型 0.00 4280 li[16]
010832 0P0001LI8E 国泰合益混合A 沪港深保守混合型 0.00 4280 li[16]
010833 0P0001LI8F 国泰合益混合C 沪港深保守混合型 0.00 4280 li[16]
010843 0P0001LLTL 富国天润回报混合A 沪港深保守混合型 0.00 4280 li[16]
010844 0P0001LLTK 富国天润回报混合C 沪港深保守混合型 0.00 4280 li[16]
010879 0P0001L8CX 南方宝升混合A 沪港深保守混合型 0.00 4290 li[16]
010880 0P0001L8CY 南方宝升混合C 沪港深保守混合型 0.00 4290 li[16]
010904 0P0001L8VO 博时双季鑫6个月持有期混合A 沪港深保守混合型 0.00 4290 li[16]
010905 0P0001L8VQ 博时双季鑫6个月持有期混合C 沪港深保守混合型 0.00 4290 li[16]
010924 0P0001L8VP 博时双季鑫6个月持有期混合B 沪港深保守混合型 0.00 4290 li[16]
011017 0P0001LCI7 鹏扬景明一年持有期混合 沪港深保守混合型 0.00 4300 li[16]
011044 0P0001LDPM 中银顺泽回报一年持有期混合A 沪港深保守混合型 0.00 4300 li[16]
011045 0P0001LDPN 中银顺泽回报一年持有期混合C 沪港深保守混合型 0.00 4300 li[16]
011052 0P0001L4NZ 鹏华弘裕一年持有期混合A 沪港深保守混合型 0.00 4300 li[16]
011053 0P0001L4O0 鹏华弘裕一年持有期混合C 沪港深保守混合型 0.00 4300 li[16]
011071 0P0001L13N 鹏华安悦一年持有期混合A 沪港深保守混合型 0.00 4300 li[16]
011072 0P0001L13O 鹏华安悦一年持有期混合C 沪港深保守混合型 0.00 4300 li[16]
011095 0P0001LERZ 博时恒泽混合A 沪港深保守混合型 0.00 4310 li[16]
011096 0P0001LES0 博时恒泽混合C 沪港深保守混合型 0.00 4310 li[16]
011118 0P0001LM6W 汇添富稳健睿选一年持有期混合A 沪港深保守混合型 0.00 4310 li[16]
011119 0P0001LM6Z 汇添富稳健睿选一年持有期混合C 沪港深保守混合型 0.00 4310 li[16]
011175 0P0001LG30 平安恒鑫混合A 沪港深保守混合型 0.00 4310 li[16]
011176 0P0001LG31 平安恒鑫混合C 沪港深保守混合型 0.00 4310 li[16]
011302 0P0001LJ17 易方达悦盈一年持有期混合A 沪港深保守混合型 0.00 4310 li[16]
011303 0P0001LJ18 易方达悦盈一年持有期混合C 沪港深保守混合型 0.00 4310 li[16]
011336 0P0001LJ9C 兴全汇吉一年持有期混合A 沪港深保守混合型 0.00 4310 li[16]
011337 0P0001LJ9D 兴全汇吉一年持有期混合C 沪港深保守混合型 0.00 4310 li[16]
011393 0P0001LLIT 中欧融益稳健一年持有期混合A 沪港深保守混合型 0.00 4320 li[16]
011394 0P0001LLIV 中欧融益稳健一年持有期混合C 沪港深保守混合型 0.00 4320 li[16]
011508 0P0001LJPV 易方达悦弘一年持有期混合A 沪港深保守混合型 0.00 4320 li[16]
011509 0P0001LJPW 易方达悦弘一年持有期混合C 沪港深保守混合型 0.00 4320 li[16]
011516 0P0001LMPB 嘉实浦盈一年持有期混合A 沪港深保守混合型 0.00 4320 li[16]
011517 0P0001LMPC 嘉实浦盈一年持有期混合C 沪港深保守混合型 0.00 4320 li[16]
011525 0P0001LN6O 中信保诚丰裕一年持有期混合A 沪港深保守混合型 0.00 4320 li[16]
011526 0P0001LN6N 中信保诚丰裕一年持有期混合C 沪港深保守混合型 0.00 4320 li[16]
011580 0P0001LP0Z 民生加银稳健配置6个月持有期混合(FOF) 沪港深保守混合型 0.00 4320 li[16]
008263 0P0001IYR0 东方红品质优选两年定期开放混合 沪港深保守混合型(封闭) 25.10 4330 li[16]
008416 0P0001IYR1 鹏扬景瑞三年定期开放混合A 沪港深保守混合型(封闭) 28.33 4330 li[16]
008417 0P0001IYR2 鹏扬景瑞三年定期开放混合C 沪港深保守混合型(封闭) 28.33 4330 li[16]
009031 0P0001JKQ8 工银瑞信聚和一年定期开放混合A 沪港深保守混合型(封闭) 19.94 4330 li[16]
009032 0P0001JKQ9 工银瑞信聚和一年定期开放混合C 沪港深保守混合型(封闭) 19.94 4330 li[16]
009144 0P0001JGSZ 博时荣升稳健添利18个月定期开放混合A 沪港深保守混合型(封闭) 5.25 4330 li[16]
009145 0P0001JGT0 博时荣升稳健添利18个月定期开放混合C 沪港深保守混合型(封闭) 5.25 4340 li[16]
009691 0P0001K9CH 国泰浩益18个月封闭运作混合A 沪港深保守混合型(封闭) 20.93 4340 li[16]
009692 0P0001K9CI 国泰浩益18个月封闭运作混合C 沪港深保守混合型(封闭) 20.93 4340 li[16]
009718 0P0001L3L9 招商增浩一年定期开放混合A 沪港深保守混合型(封闭) 0.00 4340 li[16]
009719 0P0001L3LA 招商增浩一年定期开放混合C 沪港深保守混合型(封闭) 0.00 4340 li[16]
009842 0P0001KF5S 东方红明鉴优选两年定期开放混合 沪港深保守混合型(封闭) 23.01 4340 li[16]
009927 0P0001L725 工银瑞信聚利18个月定期开放混合A 沪港深保守混合型(封闭) 0.00 4340 li[16]
009928 0P0001L726 工银瑞信聚利18个月定期开放混合C 沪港深保守混合型(封闭) 0.00 4340 li[16]
010700 0P0001LE90 东方红锦丰优选两年定期开放混合 沪港深保守混合型(封闭) 0.00 4350 li[16]
169108 0P0001JBT1 东方红均衡优选两年定期开放混合 沪港深保守混合型(封闭) 23.80 4350 li[16]
005950 0P0001DCLC 鑫元行业轮动灵活配置混合C 沪港深灵活配置型 79.31 4400 li[16]
010902 0P0001LF6V 博时成长领航灵活配置混合A 沪港深灵活配置型 0.00 4480 li[16]
010903 0P0001LF6W 博时成长领航灵活配置混合C 沪港深灵活配置型 0.00 4480 li[16]
011021 0P0001LFEG 汇添富互联网核心资产六个月持有期混合A 沪港深灵活配置型 0.00 4480 li[16]
011022 0P0001LFEH 汇添富互联网核心资产六个月持有期混合C 沪港深灵活配置型 0.00 4480 li[16]
011056 0P0001LD48 博时汇兴回报一年持有期灵活配置混合 沪港深灵活配置型 0.00 4480 li[16]
007207 0P0001I7G1 华夏常阳三年定期开放混合 沪港深灵活配置型(封闭) 79.86 4510 li[16]
007639 0P0001I3PR 汇添富3年封闭运作竞争优势灵活配置混合 沪港深灵活配置型(封闭) 68.57 4510 li[16]
008966 0P0001J4VX 博时成长优选两年封闭运作灵活配置混合A 沪港深灵活配置型(封闭) 88.65 4510 li[16]
008967 0P0001J4VY 博时成长优选两年封闭运作灵活配置混合C 沪港深灵活配置型(封闭) 88.65 4510 li[16]
009217 0P0001JJ2U 博时荣丰回报三年封闭运作灵活配置混合A 沪港深灵活配置型(封闭) 89.04 4520 li[16]
009218 0P0001JJ2V 博时荣丰回报三年封闭运作灵活配置混合C 沪港深灵活配置型(封闭) 89.04 4520 li[16]
009715 0P0001K69T 汇添富策略增长两年封闭运作灵活配置混合 沪港深灵活配置型(封闭) 90.22 4520 li[16]
970015 0P0001LM7F 申万宏源红利成长灵活配置混合 灵活配置型基金 0.00 6990 li[16]
007501 0P0001IF4Z 万家科创主题3年封闭运作灵活配置混合C 灵活配置型基金(封闭) 78.84 7030 li[16]
008890 0P0001K18K 中邮价值优选一年定期开放灵活配置混合 灵活配置型基金(封闭) 89.45 7040 li[16]
009048 0P0001JET9 浦银安盛科技创新优选三年封闭运作灵活配置混合 灵活配置型基金(封闭) 41.48 7040 li[16]
009595 0P0001K0AL 山西证券裕盛一年定期开放灵活配置混合 灵活配置型基金(封闭) 93.91 7040 li[16]
010130 0P0001KOAP 海富通惠增多策略一年定期开放灵活配置混合A 灵活配置型基金(封闭) 24.81 7040 li[16]
010131 0P0001KOAQ 海富通惠增多策略一年定期开放灵活配置混合C 灵活配置型基金(封闭) 24.81 7040 li[16]
008480 0P0001JC4Z 永赢股息优选混合A 沪港深积极配置型 93.91 4810 None
008481 0P0001JC50 永赢股息优选混合C 沪港深积极配置型 93.91 4810 None
009342 0P0001JV4P 易方达优质企业三年持有期混合 沪港深积极配置型 94.64 4900 li[16]
009859 0P0001L5TN 银华乐享混合 沪港深积极配置型 0.00 4950 li[16]
007315 0P0001L9PQ 汇安嘉盈一年持有期债券A 积极债券型 0.00 7300 li[16]
010041 0P0001LFER 嘉实港股优势混合A 沪港深积极配置型 0.00 4990 li[16]
010042 0P0001LFES 嘉实港股优势混合C 沪港深积极配置型 0.00 4990 li[16]
009465 0P0001LL7B 东方可转债债券A 积极债券型 0.00 7350 li[16]
009466 0P0001LL7A 东方可转债债券C 积极债券型 0.00 7350 li[16]
009943 0P0001LDHB 浦银安盛稳健丰利债券A 积极债券型 0.00 7360 li[16]
009944 0P0001LDHC 浦银安盛稳健丰利债券C 积极债券型 0.00 7370 li[16]
010270 0P0001L9PR 汇安嘉盈一年持有期债券C 积极债券型 0.00 7380 li[16]
010473 0P0001LDPU 华富安华债券A 积极债券型 0.00 7390 li[16]
010474 0P0001LDPV 华富安华债券C 积极债券型 0.00 7390 li[16]
010475 0P0001LFEI 上投摩根安享回报一年持有期债券 积极债券型 0.00 7390 li[16]
010619 0P0001LEKC 华安添利6个月持有期债券A 积极债券型 0.00 7390 li[16]
010620 0P0001LEKD 华安添利6个月持有期债券C 积极债券型 0.00 7390 li[16]
010651 0P0001L7ZV 平安双季增享6个月持有期债券A 积极债券型 0.00 7390 li[16]
010652 0P0001L7ZW 平安双季增享6个月持有期债券C 积极债券型 0.00 7400 li[16]
010803 0P0001LF73 天弘庆享债券A 积极债券型 0.00 7400 li[16]
010804 0P0001LF74 天弘庆享债券C 积极债券型 0.00 7400 li[16]
010899 0P0001LCTL 上银慧恒收益增强债券 积极债券型 0.00 7400 li[16]
011168 0P0001LGU5 嘉实睿享安久双利18个月持有期债券 积极债券型 0.00 7400 li[16]
952020 0P0001LLTN 国君资管君得盈债券A 积极债券型 0.00 7410 li[16]
952320 0P0001LLTM 国君资管君得盈债券C 积极债券型 0.00 7410 li[16]
008743 0P0001JAAS 南方集利18个月定期开放债券A 积极债券型(封闭) 8.36 7440 li[16]
008744 0P0001JAAT 南方集利18个月定期开放债券C 积极债券型(封闭) 8.36 7440 li[16]
009158 0P0001JS1A 中金衡利1年定期开放债券 积极债券型(封闭) 11.13 7440 li[16]
010493 0P0001L1LX 中航瑞昱一年定期开放债券A 积极债券型(封闭) 0.00 7450 li[16]
010494 0P0001L1LY 中航瑞昱一年定期开放债券C 积极债券型(封闭) 0.00 7450 li[16]

@ -1,14 +0,0 @@
代码,晨星专属号,名称,类型,页码,备注
000435, 0P000101H1, 建信稳定添利债券A, 积极债券型, 1180, 页面跳转有问题
004182, 0P0001ABLY, 建信瑞福添利混合A, 保守混合型基金, 2090, 页面跳转有问题
004468, 0P0001ABLZ, 建信瑞福添利混合C, 保守混合型基金, 2090, 页面跳转有问题
512340, 0P00015KX3, 南方中证500原材料指数ETF, 普通股票型, 1280, 页面跳转有问题
000723, 0P0001421O, 建信稳定添利债券C, 积极债券型, 1290, 页面跳转有问题
005747, 0P0001ECUP, 华安MSCI中国A股国际ETF联接A, 普通股票型, 3360, 页面跳转有问题
005748, 0P0001ECUQ, 华安MSCI中国A股国际ETF联接C, 普通股票型, 3360, 页面跳转有问题
006912, 0P0001FIFH, 长城久泰沪深300指数 C, 普通股票型, 3470, 页面跳转有问题
001724, 0P00016FID, 申万菱信多策略灵活配置混合C, 灵活配置型基金, 5830, 页面跳转有问题
512860, 0P0001E1FC, 华安MSCI中国A股国际ETF, 普通股票型, 3930, 页面跳转有问题
005769, 0P0001DGGJ, 南方共享经济灵活配置混合, 沪港深保守混合型, 4100, 页面跳转有问题
006362, 0P0001EG9S, 凯石涵行业精选混合A, 积极配置型, 7530, 页面跳转有问题
006815, 0P0001FIB4, 凯石涵行业精选混合C, 积极配置型, 7560, 页面跳转有问题
1 代码 晨星专属号 名称 类型 页码 备注
2 000435 0P000101H1 建信稳定添利债券A 积极债券型 1180 页面跳转有问题
3 004182 0P0001ABLY 建信瑞福添利混合A 保守混合型基金 2090 页面跳转有问题
4 004468 0P0001ABLZ 建信瑞福添利混合C 保守混合型基金 2090 页面跳转有问题
5 512340 0P00015KX3 南方中证500原材料指数ETF 普通股票型 1280 页面跳转有问题
6 000723 0P0001421O 建信稳定添利债券C 积极债券型 1290 页面跳转有问题
7 005747 0P0001ECUP 华安MSCI中国A股国际ETF联接A 普通股票型 3360 页面跳转有问题
8 005748 0P0001ECUQ 华安MSCI中国A股国际ETF联接C 普通股票型 3360 页面跳转有问题
9 006912 0P0001FIFH 长城久泰沪深300指数 C 普通股票型 3470 页面跳转有问题
10 001724 0P00016FID 申万菱信多策略灵活配置混合C 灵活配置型基金 5830 页面跳转有问题
11 512860 0P0001E1FC 华安MSCI中国A股国际ETF 普通股票型 3930 页面跳转有问题
12 005769 0P0001DGGJ 南方共享经济灵活配置混合 沪港深保守混合型 4100 页面跳转有问题
13 006362 0P0001EG9S 凯石涵行业精选混合A 积极配置型 7530 页面跳转有问题
14 006815 0P0001FIB4 凯石涵行业精选混合C 积极配置型 7560 页面跳转有问题

@ -9,8 +9,8 @@ Copyright (c) 2020 Camel Lu
'''
import os
import math
from utils import parse_cookiestr, set_cookies, login_site
from fund_info_crawler import FundSpider
from utils.login import login_morning_star
from fund_info.crawler import FundSpider
from lib.mysnowflake import IdWorker
import pymysql
from db.connect import connect
@ -19,23 +19,6 @@ connect_instance = connect()
cursor = connect_instance.cursor()
def login():
from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--no-sandbox")
chrome_driver = webdriver.Chrome(options=chrome_options)
chrome_driver.set_page_load_timeout(12000)
login_url = 'https://www.morningstar.cn/membership/signin.aspx'
login_status = login_site(
chrome_driver, login_url)
if login_status:
print('login success')
else:
print('login fail')
exit()
return chrome_driver
if __name__ == '__main__':
# 获取数据库的基金列表
@ -45,8 +28,8 @@ if __name__ == '__main__':
cursor.execute(sql_count)
count = cursor.fetchone() # 获取记录条数
print('count', count[0])
chrome_driver = login()
morning_cookies = chrome_driver.get_cookies()
login_url = 'https://www.morningstar.cn/membership/signin.aspx'
chrome_driver = login_morning_star(login_url, True)
IdWorker = IdWorker()
page_limit = 10
record_total = count[0]
@ -62,7 +45,7 @@ if __name__ == '__main__':
results = cursor.fetchall() # 获取查询的所有记录
for record in results:
each_fund = FundSpider(
record[0], record[1], record[2], chrome_driver, morning_cookies)
record[0], record[1], record[2], chrome_driver)
# 从晨星网上更新信息
is_normal = each_fund.go_fund_url()
if is_normal == False:

@ -15,9 +15,10 @@ from time import sleep, time
from pprint import pprint
import pandas
from db.connect import connect
from fund_info_crawler import FundSpider
from fund_info.crawler import FundSpider
from fund_info.csv import FundCSV
from lib.mysnowflake import IdWorker
from utils import parse_cookiestr, set_cookies, login_site
from utils.login import login_morning_star
from sql_model.fund_query import FundQuery
connect_instance = connect()
@ -26,26 +27,6 @@ cursor = connect_instance.cursor()
lock = Lock()
def login():
from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument('--headless')
chrome_driver = webdriver.Chrome(options=chrome_options)
chrome_driver.set_page_load_timeout(12000)
login_url = 'https://www.morningstar.cn/membership/signin.aspx'
lock.acquire()
login_status = login_site(
chrome_driver, login_url)
lock.release()
if login_status:
print('login success')
else:
print('login fail')
exit()
return chrome_driver
def generate_insert_sql(target_dict, table_name, ignore_list):
keys = ','.join(target_dict.keys())
values = ','.join(['%s'] * len(target_dict))
@ -65,73 +46,52 @@ def generate_insert_sql(target_dict, table_name, ignore_list):
if __name__ == '__main__':
fund_query = FundQuery()
each_fund_query = FundQuery()
record_total = fund_query.get_crawler_quarter_total() # 获取记录条数
record_total = each_fund_query.get_crawler_quarter_fund_total() # 获取记录条数
IdWorker = IdWorker()
page_limit = 5
page_start = 0
error_funds = []
output_catch_head = '代码' + ',' + '晨星专属号' + ',' + '名称' + ',' + \
'类型' + ',' + '股票总仓位' + ',' + '页码' + ',' + '备注' + '\n'
# error_funds = []
# 设置表头
result_dir = './output/'
fund_csv = FundCSV(result_dir)
if page_start == 0:
with open(result_dir + 'fund_morning_season_catch.csv', 'w+') as csv_file:
csv_file.write(output_catch_head)
output_catch_error = '代码' + ',' + '晨星专属号' + ',' + '名称' + ',' + \
'类型' + ',' + '页码' + ',' + '备注' + '\n'
if page_start == 0:
with open(result_dir + 'fund_morning_season_error.csv', 'w+') as csv_file:
csv_file.write(output_catch_error)
df = pandas.read_csv(
result_dir + 'fund_morning_season_error.csv', usecols=[0, 2, 4])
fund_list = df.values.tolist()
fund_csv.write_season_catch_fund(True)
fund_csv.write_abnormal_url_fund(True)
# df = pandas.read_csv(
# result_dir + 'fund_morning_season_error.csv', usecols=[0, 2, 4])
# fund_list = df.values.tolist()
# print(len(d[d['代码'].astype(str).str.contains('10535')]))
# print(df[df['代码'].astype(str).str.contains('10535')]
# ['股票总仓位'].values)
def crawlData(start, end):
chrome_driver = login()
morning_cookies = chrome_driver.get_cookies()
login_url = 'https://www.morningstar.cn/membership/signin.aspx'
chrome_driver = login_morning_star(login_url, True)
page_start = start
page_limit = 1
page_limit = 10
while(page_start < end):
sql = "SELECT t.fund_code,\
t.morning_star_code, t.fund_name, t.fund_cat \
FROM fund_morning_base as t \
LEFT JOIN fund_morning_snapshot as f ON f.fund_code = t.fund_code \
WHERE t.fund_cat NOT LIKE '%%货币%%' \
AND t.fund_cat NOT LIKE '%%纯债基金%%' \
AND t.fund_cat NOT LIKE '目标日期' \
AND t.fund_cat NOT LIKE '%%短债基金%%' \
AND t.fund_name NOT LIKE '%%C' \
AND t.fund_name NOT LIKE '%%B' \
ORDER BY f.fund_rating_5 DESC,f.fund_rating_3 DESC, \
t.fund_cat, t.fund_code LIMIT %s, %s"
lock.acquire()
cursor.execute(
sql, [page_start, page_limit]) # 执行sql语句
results = cursor.fetchall() # 获取查询的所有记录
lock.release()
results = each_fund_query.select_quarter_fund(
page_start, page_limit)
print('results', results)
for record in results:
sleep(1)
print(current_thread().getName(), 'record-->', record)
each_fund = FundSpider(
record[0], record[1], record[2], chrome_driver, morning_cookies)
record[0], record[1], record[2], chrome_driver)
is_normal = each_fund.go_fund_url()
# 是否能正常跳转到基金详情页没有的话写入csv,退出当前循环
if is_normal == False:
lock.acquire()
error_funds.append(each_fund.fund_code)
# error_funds.append(each_fund.fund_code)
fund_infos = [each_fund.fund_code, each_fund.morning_star_code,
each_fund.fund_name, record[3], page_start, '页面跳转有问题']
with open(result_dir + 'fund_morning_season_error.csv', 'a') as csv_file:
output_line = ', '.join(str(x)
for x in fund_infos) + '\n'
csv_file.write(output_line)
lock.release()
output_line = ', '.join(str(x)
for x in fund_infos) + '\n'
fund_csv.write_abnormal_url_fund(False, output_line)
continue
# 开始爬取数据
quarter_index = each_fund.get_quarter_index() # 数据更新时间
@ -140,42 +100,30 @@ if __name__ == '__main__':
if each_fund.fund_name.endswith('A'):
print('fund_name', each_fund.fund_name[0:-1])
similar_name = each_fund.fund_name[0:-1]
sql_similar = "SELECT t.fund_code,\
t.morning_star_code, t.fund_name \
FROM fund_morning_base as t \
LEFT JOIN fund_morning_snapshot as f ON f.fund_code = t.fund_code \
WHERE t.fund_name LIKE %s \
AND t.fund_name NOT LIKE '%%A';"
lock.acquire()
cursor.execute(
sql_similar, [similar_name + '%']) # 执行sql语句
results = cursor.fetchall() # 获取查询的所有记录
results = each_fund_query.select_similar_fund(
similar_name) # 获取查询的所有记录
print('results', results)
lock.release()
# each_fund.get_fund_season_info() # 基本数据
# each_fund.get_fund_manager_info() # 基金经理模块
# each_fund.get_fund_morning_rating() # 基金晨星评级
# each_fund.get_fund_qt_rating() # 基金风险评级
continue
each_fund.get_fund_season_info() # 基本季度性数据
each_fund.get_fund_manager_info() # 基金经理模块
each_fund.get_fund_morning_rating() # 基金晨星评级
each_fund.get_fund_qt_rating() # 基金风险评级
print('each_fund.total_asset', each_fund.total_asset)
# 判断是否有股票持仓,有则爬取
if each_fund.stock_position['total'] != '0.00' and each_fund.total_asset != None:
each_fund.get_asset_composition_info()
# 爬取过程中是否有异常
# 爬取过程中是否有异常,有的话存在csv中
if each_fund._is_trigger_catch == True:
lock.acquire()
fund_infos = [each_fund.fund_code, each_fund.morning_star_code,
each_fund.fund_name, record[3],
each_fund.stock_position['total'],
page_start, each_fund._catch_detail]
with open(result_dir + 'fund_morning_season_catch.csv', 'a') as csv_file:
output_line = ', '.join(str(x)
for x in fund_infos) + '\n'
csv_file.write(output_line)
lock.release()
fund_csv.write_season_catch_fund(False, output_line)
# 入库
lock.acquire()
snow_flake_id = IdWorker.get_id()
lock.release()
continue
# 基金经理
if each_fund.manager.get('id'):
manager_dict = {
@ -262,35 +210,35 @@ if __name__ == '__main__':
sleep(3)
chrome_driver.close()
threaders = []
start = time()
step_num = 1
# steps = [{
# "start": 800,
# "end": 2500
# }, {
# "start": 2740,
# "end": 5000
# }, {
# "start": 5100,
# "end": 7500
# }, {
# "start": 8300,
# "end": record_total
# }]
# for i in range(1):
# skip_num = 100
# # print(i * step_num + skip_num, (i+1) * step_num)
# # start = steps[i]['start']
# # end = steps[i]['end']
# start = i * step_num
# end = (i + 1) * step_num
# t = Thread(target=crawlData, args=(start, end))
# t.setDaemon(True)
# threaders.append(t)
# t.start()
# for threader in threaders:
# threader.join()
stop = time()
print('run time is %s' % (stop - start))
print('error_funds', error_funds)
start_time = time()
step_num = 10
steps = [{
"start": 800,
"end": 2500
}, {
"start": 2740,
"end": 5000
}, {
"start": 5100,
"end": 7500
}, {
"start": 8300,
"end": record_total
}]
for i in range(0):
skip_num = 10
# print(i * step_num + skip_num, (i+1) * step_num)
# start = steps[i]['start']
# end = steps[i]['end']
start = i * step_num
end = (i + 1) * step_num
t = Thread(target=crawlData, args=(start, end))
t.setDaemon(True)
threaders.append(t)
t.start()
for threader in threaders:
threader.join()
end_time = time()
print('run time is %s' % (end_time - start_time))
# print('error_funds', error_funds)
exit()

@ -16,7 +16,8 @@ from bs4 import BeautifulSoup
import pandas as pd
from selenium.webdriver.support.ui import WebDriverWait
from lib.mysnowflake import IdWorker
from utils import parse_cookiestr, set_cookies, login_site, get_star_count
from utils.login import login_morning_star
from utils.index import get_star_count
from db.connect import connect
connect_instance = connect()
@ -50,37 +51,9 @@ def text_to_be_present_in_element(locator, text, next_page_locator):
return _predicate
def get_fund_list(cookie_str=None):
from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--no-sandbox")
chrome_driver = webdriver.Chrome(options=chrome_options)
chrome_driver.set_page_load_timeout(12000) # 防止页面加载个没完
def get_fund_list():
morning_fund_selector_url = "https://www.morningstar.cn/fundselect/default.aspx"
# "https://cn.morningstar.com/quickrank/default.aspx"
"""
模拟登录,支持两种方式
1. 设置已经登录的cookie
2. 输入账号密码验证码登录验证码识别正确率30%识别识别支持重试
"""
if cookie_str:
set_cookies(chrome_driver, morning_fund_selector_url, cookie_str)
else:
morning_cookies = ""
if morning_cookies == "":
login_status = login_site(chrome_driver, morning_fund_selector_url)
if login_status:
print('login success')
sleep(3)
else:
print('login fail')
exit()
# 获取网站cookie
morning_cookies = chrome_driver.get_cookies()
else:
chrome_driver.get(morning_fund_selector_url) # 再次打开爬取页面
print(chrome_driver.get_cookies()) # 打印设置成功的cookie
chrome_driver = login_morning_star(morning_fund_selector_url, True)
# 定义起始页码
page_num = 445
page_count = 25
@ -104,6 +77,7 @@ def get_fund_list(cookie_str=None):
xpath_str = '/html/body/form/div[8]/div/div[4]/div[3]/div[3]/div[1]/a[%s]' % (
num)
print('page_num', page_num)
# 等待直到当前页样式判断等于page_num
WebDriverWait(chrome_driver, timeout=600).until(text_to_be_present_in_element(
"/html/body/form/div[8]/div/div[4]/div[3]/div[3]/div[1]/span[@style='margin-right:5px;font-weight:Bold;color:red;']", str(page_num), xpath_str))
@ -182,6 +156,4 @@ def get_fund_list(cookie_str=None):
if __name__ == "__main__":
cookie_str = 'Hm_lvt_eca85e284f8b74d1200a42c9faa85464=1610788772; user=username=18219112108@163.com&nickname=camel-lu&status=Free&password=KFPJOQuxD1w=; MS_LocalEmailAddr=18219112108@163.com=; ASP.NET_SessionId=0aenwime2ljio155dogxybev; Hm_lvt_eca85e284f8b74d1200a42c9faa85464=; MSCC=GUflpfSQOVM=; authWeb=5220F774042557D9FA31A08FA717CB8DE74F5016A9ADDB25C269FBB69C7DF340D59E6E63061444FE0B93DBB4F5AAFA6B1D21155C3FAA68C79992F39B9986630AEB6F674F242B6B792693ABB6162784CA329333200C2BBDD44021A1F38E80A363F157CD24D4D0E527C3E8F23E3DEA13C5D9950FF5; Hm_lpvt_eca85e284f8b74d1200a42c9faa85464=1613479786'
fund_list = get_fund_list()

@ -11,20 +11,20 @@ Copyright (c) 2020 Camel Lu
import re
from time import sleep
from bs4 import BeautifulSoup
from utils import parse_cookiestr, set_cookies, login_site, get_star_count, get_season_index
from utils.index import get_star_count, get_season_index
from selenium.common.exceptions import NoSuchElementException
class FundSpider:
# 初始化定义,利用基金代码、基金名称进行唯一化
def __init__(self, code, namecode, name, chrome_driver, morning_cookies):
self.quarter_index = '2021-Q1' # TODO: get quarter_index by current time
def __init__(self, code, namecode, name, chrome_driver):
self.quarter_index = '2021-Q1'
self.update_date = None # 数据更新时间,默认取资产配置更新时间
self.fund_code = code # 基金代码,需要初始化赋值
self.fund_name = name # 基金名称,需要初始化赋值
self.morning_star_code = namecode # 基金编码,晨星网特有,需要建立索引表
self._morning_cookies = morning_cookies or None
self._morning_cookies = chrome_driver.get_cookies() or None
self._chrome_driver = chrome_driver or None
self._is_trigger_catch = False
self._catch_detail = None
@ -49,45 +49,10 @@ class FundSpider:
self.morning_star_rating = dict() # 晨星评级--三年,五年,十年
# 十大持仓信息
self.ten_top_stock_list = [] # 股票十大持仓股信息
# 处理基金详情页跳转
def login_morning_star(self, cookie_str=None):
login_url = 'https://www.morningstar.cn/membership/signin.aspx'
if self._chrome_driver == None:
from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--no-sandbox")
# chrome_options.add_argument('--headless')
# _chrome_driver = webdriver.Chrome("/usr/local/chromedriver")
self._chrome_driver = webdriver.Chrome(options=chrome_options)
self._chrome_driver.set_page_load_timeout(12000)
"""
模拟登录,支持两种方式
1. 设置已经登录的cookie
2. 输入账号密码验证码登录验证码识别正确率30%识别识别支持重试
"""
if cookie_str:
set_cookies(self._chrome_driver,
login_url, cookie_str)
else:
if self._morning_cookies == None:
login_status = login_site(
self._chrome_driver, login_url)
if login_status:
print('login success')
sleep(3)
else:
print('login fail')
exit()
# 获取网站cookie
_morning_cookies = self._chrome_driver.get_cookies()
else:
self._morning_cookies = self._chrome_driver.get_cookies()
# print('cookies', self._morning_cookies) # 打印设置成功的cookie
# 更新基金信息从晨星网上抓取利用selinum原理
# 处理基金详情页跳转
def go_fund_url(self, cookie_str=None):
self.login_morning_star(cookie_str)
# self.login_morning_star(cookie_str)
morning_fund_selector_url = "https://www.morningstar.cn/quicktake/" + \
self.morning_star_code
@ -102,6 +67,7 @@ class FundSpider:
sleep(9)
# self._chrome_driver.execute_script('location.reload()')
#TODO: 选择元素相关抽离到一个专门类中
def get_element_text_by_class_name(self, class_name, parent_id):
try:
text = self._chrome_driver.find_element_by_id(
@ -340,6 +306,7 @@ class FundSpider:
# 总资产 TODO: 增加一个数据更新时间field
self.update_date = self.get_element_text_by_class_name(
"date4", 'aspnetForm')
print('self.update_date ', self.fund_code, self.update_date)
split_dates = self.update_date.split('-', 1)
quarter_index = get_season_index(split_dates[1])
print("self.update_date", split_dates[0] + '-Q' + str(quarter_index))

@ -0,0 +1,39 @@
'''
Desc: 操作CSV
File: /csv.py
Project: fund_info
File Created: Monday, 10th May 2021 7:24:35 pm
Author: luxuemin2108@gmail.com
-----
Copyright (c) 2021 Camel Lu
'''
from threading import Lock
class FundCSV:
def __init__(self, output_dir):
self.output_dir = output_dir
self.lock = Lock()
# 爬取过程中异常基金
def write_season_catch_fund(self, is_init=False, data=None):
head_data = '代码' + ',' + '晨星专属号' + ',' + '名称' + ',' + \
'类型' + ',' + '股票总仓位' + ',' + '页码' + ',' + '备注' + '\n'
mode = 'w+' if is_init else 'a'
write_data = head_data if is_init else data
self.lock.acquire()
with open(self.output_dir + 'fund_morning_season_catch.csv', mode) as csv_file:
csv_file.write(write_data)
self.lock.release()
# 基金url跳转异常基金
def write_abnormal_url_fund(self, is_init=False, data=None):
head_data = '代码' + ',' + '晨星专属号' + ',' + '名称' + ',' + \
'类型' + ',' + '页码' + ',' + '备注' + '\n'
mode = 'w+' if is_init else 'a'
write_data = head_data if is_init else data
self.lock.acquire()
with open(self.output_dir + 'fund_morning_season_abnormal.csv', mode) as csv_file:
csv_file.write(write_data)
self.lock.release()

@ -0,0 +1,35 @@
'''
Desc: insert 相关
File: /fund_insert.py
Project: sql_model
File Created: Monday, 10th May 2021 2:01:55 pm
Author: luxuemin2108@gmail.com
-----
Copyright (c) 2021 Camel Lu
'''
from threading import Lock
from db.connect import connect
class FundInsert:
def __init__(self):
connect_instance = connect()
self.connect_instance = connect_instance
self.cursor = connect_instance.cursor()
self.lock = Lock()
def generate_insert_sql(self, target_dict, table_name, ignore_list):
keys = ','.join(target_dict.keys())
values = ','.join(['%s'] * len(target_dict))
update_values = ''
for key in target_dict.keys():
if key in ignore_list:
continue
update_values = update_values + '{0}=VALUES({0}),'.format(key)
sql_insert = "INSERT INTO {table} ({keys}) VALUES ({values}) ON DUPLICATE KEY UPDATE {update_values}; ".format(
table=table_name,
keys=keys,
values=values,
update_values=update_values[0:-1]
)
return sql_insert

@ -0,0 +1,41 @@
'''
Desc: cookies 相关
File: /cookies.py
Project: utils
File Created: Monday, 10th May 2021 12:39:56 am
Author: luxuemin2108@gmail.com
-----
Copyright (c) 2021 Camel Lu
'''
from urllib import parse
def parse_cookiestr(cookie_str, split_str="; "):
cookielist = []
for item in cookie_str.split(split_str):
cookie = {}
itemname = item.split('=')[0]
iremvalue = item.split('=')[1]
cookie['name'] = itemname
cookie['value'] = parse.unquote(iremvalue)
cookielist.append(cookie)
return cookielist
def set_cookies(chrome_driver, url, cookie_str):
chrome_driver.get(url)
# 2.需要先获取一下url不然使用add_cookie会报错这里有点奇怪
cookie_list = parse_cookiestr(cookie_str)
chrome_driver.delete_all_cookies()
for i in cookie_list:
cookie = {}
# 3.对于使用add_cookie来说参考其函数源码注释需要有name,value字段来表示一条cookie有点生硬
cookie['name'] = i['name']
cookie['value'] = i['value']
# 4.这里需要先删掉之前那次访问时的同名cookie不然自己设置的cookie会失效
# chrome_driver.delete_cookie(i['name'])
# 添加自己的cookie
# print('cookie', cookie)
chrome_driver.add_cookie(cookie)
chrome_driver.refresh()

@ -1,80 +1,8 @@
from urllib import parse
import time
import datetime
import os
from dotenv import load_dotenv
load_dotenv()
def parse_cookiestr(cookie_str, split_str="; "):
cookielist = []
for item in cookie_str.split(split_str):
cookie = {}
itemname = item.split('=')[0]
iremvalue = item.split('=')[1]
cookie['name'] = itemname
cookie['value'] = parse.unquote(iremvalue)
cookielist.append(cookie)
return cookielist
def set_cookies(chrome_driver, url, cookie_str):
chrome_driver.get(url)
# 2.需要先获取一下url不然使用add_cookie会报错这里有点奇怪
cookie_list = parse_cookiestr(cookie_str)
chrome_driver.delete_all_cookies()
for i in cookie_list:
cookie = {}
# 3.对于使用add_cookie来说参考其函数源码注释需要有name,value字段来表示一条cookie有点生硬
cookie['name'] = i['name']
cookie['value'] = i['value']
# 4.这里需要先删掉之前那次访问时的同名cookie不然自己设置的cookie会失效
# chrome_driver.delete_cookie(i['name'])
# 添加自己的cookie
# print('cookie', cookie)
chrome_driver.add_cookie(cookie)
chrome_driver.refresh()
def identify_verification_code(chrome_driver, id="checkcodeImg"):
# 生成年月日时分秒时间
picture_time = time.strftime(
"%Y-%m-%d-%H_%M_%S", time.localtime(time.time()))
directory_time = time.strftime("%Y-%m-%d", time.localtime(time.time()))
# 获取到当前文件的目录,并检查是否有 directory_time 文件夹,如果不存在则自动新建 directory_time 文件
try:
file_Path = os.getcwd() + '/code-record/' + directory_time + '/'
if not os.path.exists(file_Path):
os.makedirs(file_Path)
print("目录新建成功:%s" % file_Path)
else:
print("目录已存在!!!")
except BaseException as msg:
print("新建目录失败:%s" % msg)
try:
from selenium.webdriver.common.by import By
ele = chrome_driver.find_element(By.ID, id)
code_path = './code-record/' + directory_time + '/' + picture_time + '_code.png'
url = ele.screenshot(code_path)
if url:
print("%s :截图成功!!!" % url)
from PIL import Image
image = Image.open(code_path)
# image.show()
import pytesseract
custom_oem_psm_config = '--oem 0 --psm 13 digits'
identify_code = pytesseract.image_to_string(
image, config=custom_oem_psm_config)
code = "".join(identify_code.split())
return code
else:
raise Exception('截图失败,不能保存')
except Exception as pic_msg:
print("截图失败:%s" % pic_msg)
def get_star_count(morning_star_url):
import numpy as np
@ -96,52 +24,6 @@ def get_star_count(morning_star_url):
return i
def login_site(chrome_driver, site_url, redirect_url=None):
site_url = site_url if redirect_url == None else site_url + \
'?ReturnUrl=' + redirect_url
chrome_driver.get(site_url)
time.sleep(2)
from selenium.webdriver.support import expected_conditions as EC
username = chrome_driver.find_element_by_id('emailTxt')
password = chrome_driver.find_element_by_id('pwdValue')
check_code = chrome_driver.find_element_by_id('txtCheckCode')
env_username = os.getenv('morning_star_username')
env_password = os.getenv('morning_star_password')
username.send_keys(env_username)
password.send_keys(env_password)
count = 1
flag = True
while count < 10 and flag:
code = identify_verification_code(chrome_driver)
check_code.clear()
time.sleep(1)
check_code.send_keys(code)
time.sleep(3)
submit = chrome_driver.find_element_by_id('loginGo')
submit.click()
# 通过弹窗判断验证码是否正确
time.sleep(3)
from selenium.webdriver.common.by import By
# message_container = chrome_driver.find_element_by_id('message-container')
try:
message_box = chrome_driver.find_element_by_id(
'message-container')
flag = message_box.is_displayed()
if flag:
close_btn = message_box.find_element(
By.CLASS_NAME, "modal-close")
close_btn.click()
time.sleep(1)
print('flag', flag)
except:
return True
if count > 10:
return False
return True
def parse_csv(datafile):
data = []
with open(datafile, "r") as f:

@ -0,0 +1,129 @@
'''
Desc: 登录
File: /login.py
Project: utils
File Created: Monday, 10th May 2021 12:29:35 am
Author: luxuemin2108@gmail.com
-----
Copyright (c) 2021 Camel Lu
'''
import time
import os
from dotenv import load_dotenv
from .cookies import set_cookies
load_dotenv()
# 二维码识别
def identify_verification_code(chrome_driver, id="checkcodeImg"):
# 生成年月日时分秒时间
picture_time = time.strftime(
"%Y-%m-%d-%H_%M_%S", time.localtime(time.time()))
directory_time = time.strftime("%Y-%m-%d", time.localtime(time.time()))
# 获取到当前文件的目录,并检查是否有 directory_time 文件夹,如果不存在则自动新建 directory_time 文件
try:
file_Path = os.getcwd() + '/code-record/' + directory_time + '/'
if not os.path.exists(file_Path):
os.makedirs(file_Path)
print("目录新建成功:%s" % file_Path)
else:
print("目录已存在!!!")
except BaseException as msg:
print("新建目录失败:%s" % msg)
try:
from selenium.webdriver.common.by import By
ele = chrome_driver.find_element(By.ID, id)
code_path = './code-record/' + directory_time + '/' + picture_time + '_code.png'
url = ele.screenshot(code_path)
if url:
print("%s :截图成功!!!" % url)
from PIL import Image
image = Image.open(code_path)
# image.show()
import pytesseract
custom_oem_psm_config = '--oem 0 --psm 13 digits'
identify_code = pytesseract.image_to_string(
image, config=custom_oem_psm_config)
code = "".join(identify_code.split())
return code
else:
raise Exception('截图失败,不能保存')
except Exception as pic_msg:
print("截图失败:%s" % pic_msg)
# 模拟手动输入账号密码登录
def mock_login_site(chrome_driver, site_url, redirect_url=None):
site_url = site_url if redirect_url == None else site_url + \
'?ReturnUrl=' + redirect_url
chrome_driver.get(site_url)
time.sleep(2)
from selenium.webdriver.support import expected_conditions as EC
username = chrome_driver.find_element_by_id('emailTxt')
password = chrome_driver.find_element_by_id('pwdValue')
check_code = chrome_driver.find_element_by_id('txtCheckCode')
env_username = os.getenv('morning_star_username')
env_password = os.getenv('morning_star_password')
username.send_keys(env_username)
password.send_keys(env_password)
count = 1
flag = True
while count < 10 and flag:
code = identify_verification_code(chrome_driver)
check_code.clear()
time.sleep(1)
check_code.send_keys(code)
time.sleep(3)
submit = chrome_driver.find_element_by_id('loginGo')
submit.click()
# 通过弹窗判断验证码是否正确
time.sleep(3)
from selenium.webdriver.common.by import By
# message_container = chrome_driver.find_element_by_id('message-container')
try:
message_box = chrome_driver.find_element_by_id(
'message-container')
flag = message_box.is_displayed()
if flag:
close_btn = message_box.find_element(
By.CLASS_NAME, "modal-close")
close_btn.click()
time.sleep(1)
print('flag', flag)
except:
return True
if count > 10:
return False
return True
def login_morning_star(redirect_url, is_cookies_login=False):
from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument("--no-sandbox")
chrome_options.add_argument('--headless')
chrome_driver = webdriver.Chrome(options=chrome_options)
chrome_driver.set_page_load_timeout(12000)
"""
模拟登录,支持两种方式
1. 设置已经登录的cookie
2. 输入账号密码验证码登录验证码识别正确率30%识别识别支持重试
"""
login_url = 'https://www.morningstar.cn/membership/signin.aspx'
if is_cookies_login:
target_url = redirect_url if redirect_url else login_url
cookie_str = os.getenv('login_cookie')
set_cookies(chrome_driver, target_url, cookie_str)
else:
login_status = mock_login_site(
chrome_driver, login_url, redirect_url)
if login_status:
print('login success')
else:
print('login fail')
exit()
return chrome_driver
Loading…
Cancel
Save