akshare 1.12.99__py3-none-any.whl → 1.15.72__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of akshare might be problematic. Click here for more details.

Files changed (236) hide show
  1. akshare/__init__.py +441 -138
  2. akshare/air/air_hebei.py +79 -53
  3. akshare/air/air_zhenqi.py +29 -43
  4. akshare/air/sunrise_tad.py +32 -17
  5. akshare/bank/bank_cbirc_2020.py +12 -9
  6. akshare/bond/bond_cb_ths.py +17 -9
  7. akshare/bond/bond_china.py +38 -39
  8. akshare/bond/bond_china_money.py +75 -48
  9. akshare/bond/bond_info_cm.py +28 -8
  10. akshare/bond/bond_issue_cninfo.py +73 -30
  11. akshare/bond/bond_zh_cov.py +1 -1
  12. akshare/bond/bond_zh_sina.py +57 -51
  13. akshare/cal/__init__.py +0 -0
  14. akshare/cal/rv.py +170 -0
  15. akshare/cost/cost_living.py +7 -5
  16. akshare/currency/currency_safe.py +7 -6
  17. akshare/data/cninfo.js +15 -0
  18. akshare/datasets.py +10 -21
  19. akshare/economic/macro_bank.py +95 -653
  20. akshare/economic/macro_china.py +772 -1024
  21. akshare/economic/macro_china_hk.py +65 -243
  22. akshare/economic/macro_china_nbs.py +24 -7
  23. akshare/economic/macro_constitute.py +17 -12
  24. akshare/economic/macro_euro.py +13 -6
  25. akshare/economic/macro_finance_ths.py +133 -0
  26. akshare/economic/macro_info_ws.py +100 -0
  27. akshare/economic/macro_japan.py +5 -4
  28. akshare/economic/macro_other.py +12 -9
  29. akshare/economic/macro_usa.py +376 -1940
  30. akshare/economic/marco_cnbs.py +11 -6
  31. akshare/energy/energy_carbon.py +94 -125
  32. akshare/event/migration.py +3 -2
  33. akshare/exceptions.py +43 -0
  34. akshare/file_fold/calendar.json +245 -2
  35. akshare/fortune/fortune_500.py +15 -48
  36. akshare/fund/fund_amac.py +157 -75
  37. akshare/fund/fund_em.py +191 -184
  38. akshare/fund/fund_etf_em.py +16 -15
  39. akshare/fund/fund_etf_sina.py +71 -23
  40. akshare/fund/fund_etf_ths.py +93 -0
  41. akshare/fund/fund_fee_em.py +98 -0
  42. akshare/fund/fund_portfolio_em.py +60 -50
  43. akshare/fund/fund_rank_em.py +91 -82
  44. akshare/fund/fund_report_cninfo.py +63 -48
  45. akshare/fund/fund_scale_sina.py +20 -10
  46. akshare/fund/fund_xq.py +139 -109
  47. akshare/futures/cons.py +8 -31
  48. akshare/futures/cot.py +185 -137
  49. akshare/futures/futures_basis.py +97 -32
  50. akshare/futures/futures_comm_ctp.py +37 -0
  51. akshare/futures/futures_comm_qihuo.py +74 -45
  52. akshare/futures/futures_daily_bar.py +121 -184
  53. akshare/futures/futures_hf_em.py +66 -61
  54. akshare/futures/futures_hq_sina.py +79 -61
  55. akshare/futures/futures_index_ccidx.py +6 -3
  56. akshare/futures/futures_inventory_99.py +61 -272
  57. akshare/futures/futures_news_shmet.py +4 -2
  58. akshare/futures/futures_roll_yield.py +12 -25
  59. akshare/futures/futures_spot_stock_em.py +19 -13
  60. akshare/futures/futures_stock_js.py +14 -12
  61. akshare/futures/futures_to_spot.py +38 -33
  62. akshare/futures/futures_warehouse_receipt.py +75 -71
  63. akshare/futures/futures_zh_sina.py +5 -5
  64. akshare/futures/symbol_var.py +18 -13
  65. akshare/futures_derivative/futures_contract_info_czce.py +60 -52
  66. akshare/futures_derivative/futures_contract_info_ine.py +43 -34
  67. akshare/futures_derivative/futures_contract_info_shfe.py +46 -35
  68. akshare/futures_derivative/futures_cot_sina.py +26 -19
  69. akshare/futures_derivative/futures_spot_sys.py +21 -8
  70. akshare/fx/currency_investing.py +19 -285
  71. akshare/index/index_cflp.py +29 -26
  72. akshare/index/index_cni.py +86 -88
  73. akshare/index/index_cons.py +26 -10
  74. akshare/index/index_cx.py +248 -47
  75. akshare/index/index_drewry.py +17 -16
  76. akshare/index/index_option_qvix.py +329 -0
  77. akshare/index/index_research_fund_sw.py +134 -0
  78. akshare/index/{index_sw_research.py → index_research_sw.py} +122 -58
  79. akshare/index/index_spot.py +9 -5
  80. akshare/index/index_stock_hk.py +35 -16
  81. akshare/index/index_stock_us_sina.py +1 -1
  82. akshare/index/index_stock_zh.py +180 -89
  83. akshare/index/index_stock_zh_csindex.py +15 -369
  84. akshare/index/index_sw.py +62 -34
  85. akshare/index/index_yw.py +46 -23
  86. akshare/index/index_zh_a_scope.py +48 -0
  87. akshare/index/index_zh_em.py +6 -4
  88. akshare/interest_rate/interbank_rate_em.py +14 -9
  89. akshare/movie/artist_yien.py +32 -5
  90. akshare/movie/movie_yien.py +92 -18
  91. akshare/movie/video_yien.py +28 -5
  92. akshare/news/news_baidu.py +78 -44
  93. akshare/news/news_cctv.py +38 -38
  94. akshare/news/news_stock.py +6 -3
  95. akshare/nlp/nlp_interface.py +7 -8
  96. akshare/option/cons.py +11 -11
  97. akshare/option/option_comm_qihuo.py +86 -0
  98. akshare/option/option_commodity.py +178 -51
  99. akshare/option/option_daily_stats_sse_szse.py +146 -0
  100. akshare/option/option_em.py +147 -138
  101. akshare/option/option_finance_sina.py +160 -137
  102. akshare/option/option_lhb_em.py +62 -56
  103. akshare/option/option_risk_indicator_sse.py +17 -14
  104. akshare/other/other_car_cpca.py +934 -0
  105. akshare/other/{other_car.py → other_car_gasgoo.py} +15 -54
  106. akshare/qdii/__init__.py +0 -0
  107. akshare/qdii/qdii_jsl.py +233 -0
  108. akshare/request.py +117 -0
  109. akshare/spot/spot_hog_soozhu.py +232 -0
  110. akshare/spot/spot_price_qh.py +121 -0
  111. akshare/spot/spot_sge.py +63 -10
  112. akshare/stock/stock_allotment_cninfo.py +10 -9
  113. akshare/stock/stock_board_concept_em.py +23 -14
  114. akshare/stock/stock_board_industry_em.py +40 -34
  115. akshare/stock/stock_cg_equity_mortgage.py +15 -11
  116. akshare/stock/stock_cg_guarantee.py +41 -51
  117. akshare/stock/stock_cg_lawsuit.py +36 -35
  118. akshare/stock/stock_dividend_cninfo.py +12 -6
  119. akshare/stock/stock_dzjy_em.py +347 -260
  120. akshare/stock/stock_fund_em.py +332 -84
  121. akshare/stock/stock_hk_famous.py +108 -0
  122. akshare/stock/stock_hk_sina.py +8 -7
  123. akshare/stock/stock_hold_control_cninfo.py +100 -15
  124. akshare/stock/stock_hold_control_em.py +4 -3
  125. akshare/stock/stock_hold_num_cninfo.py +18 -12
  126. akshare/stock/stock_hot_rank_em.py +2 -1
  127. akshare/stock/stock_hot_search_baidu.py +5 -2
  128. akshare/stock/stock_industry_cninfo.py +24 -18
  129. akshare/stock/stock_industry_pe_cninfo.py +45 -31
  130. akshare/stock/stock_industry_sw.py +9 -10
  131. akshare/stock/stock_info.py +25 -15
  132. akshare/stock/stock_info_em.py +5 -2
  133. akshare/stock/stock_intraday_em.py +5 -2
  134. akshare/stock/stock_intraday_sina.py +22 -18
  135. akshare/stock/stock_ipo_summary_cninfo.py +25 -10
  136. akshare/stock/stock_new_cninfo.py +32 -19
  137. akshare/stock/stock_news_cx.py +39 -0
  138. akshare/stock/stock_profile_cninfo.py +9 -8
  139. akshare/stock/stock_rank_forecast.py +8 -6
  140. akshare/stock/stock_share_changes_cninfo.py +18 -14
  141. akshare/stock/stock_share_hold.py +24 -19
  142. akshare/stock/stock_summary.py +54 -26
  143. akshare/stock/stock_us_famous.py +15 -6
  144. akshare/stock/stock_us_pink.py +7 -5
  145. akshare/stock/stock_us_sina.py +15 -12
  146. akshare/stock/stock_xq.py +38 -12
  147. akshare/stock/stock_zh_a_sina.py +53 -78
  148. akshare/stock/stock_zh_b_sina.py +32 -55
  149. akshare/stock/stock_zh_kcb_report.py +11 -9
  150. akshare/stock/stock_zh_kcb_sina.py +67 -64
  151. akshare/stock_feature/stock_a_below_net_asset_statistics.py +5 -2
  152. akshare/stock_feature/stock_a_high_low.py +5 -2
  153. akshare/stock_feature/stock_a_indicator.py +12 -9
  154. akshare/stock_feature/stock_a_pe_and_pb.py +27 -6
  155. akshare/stock_feature/stock_account_em.py +58 -40
  156. akshare/stock_feature/stock_analyst_em.py +36 -27
  157. akshare/stock_feature/stock_board_industry_ths.py +136 -400
  158. akshare/stock_feature/stock_comment_em.py +118 -85
  159. akshare/stock_feature/stock_concept_futu.py +183 -0
  160. akshare/stock_feature/stock_cyq_em.py +58 -54
  161. akshare/stock_feature/stock_disclosure_cninfo.py +147 -102
  162. akshare/stock_feature/stock_esg_sina.py +216 -11
  163. akshare/stock_feature/stock_fhps_em.py +60 -25
  164. akshare/stock_feature/stock_fhps_ths.py +25 -6
  165. akshare/stock_feature/stock_fund_flow.py +38 -25
  166. akshare/stock_feature/stock_gdfx_em.py +180 -95
  167. akshare/stock_feature/stock_gdhs.py +73 -49
  168. akshare/stock_feature/stock_gpzy_em.py +78 -46
  169. akshare/stock_feature/stock_hist_em.py +55 -23
  170. akshare/stock_feature/stock_hk_valuation_baidu.py +20 -8
  171. akshare/stock_feature/stock_hsgt_em.py +184 -452
  172. akshare/stock_feature/stock_info.py +52 -29
  173. akshare/stock_feature/stock_inner_trade_xq.py +39 -31
  174. akshare/stock_feature/stock_irm_cninfo.py +32 -9
  175. akshare/stock_feature/stock_jgdy_em.py +41 -38
  176. akshare/stock_feature/stock_lh_yybpm.py +36 -37
  177. akshare/stock_feature/stock_lhb_em.py +135 -71
  178. akshare/stock_feature/stock_lhb_sina.py +93 -46
  179. akshare/stock_feature/stock_margin_em.py +102 -0
  180. akshare/stock_feature/{stock_sse_margin.py → stock_margin_sse.py} +21 -15
  181. akshare/stock_feature/{stock_szse_margin.py → stock_margin_szse.py} +23 -19
  182. akshare/stock_feature/stock_market_legu.py +13 -8
  183. akshare/stock_feature/stock_pankou_em.py +72 -34
  184. akshare/stock_feature/stock_report_em.py +244 -54
  185. akshare/stock_feature/stock_research_report_em.py +48 -19
  186. akshare/stock_feature/stock_sns_sseinfo.py +15 -12
  187. akshare/stock_feature/stock_sy_em.py +86 -33
  188. akshare/stock_feature/stock_technology_ths.py +152 -120
  189. akshare/stock_feature/stock_tfp_em.py +35 -13
  190. akshare/stock_feature/stock_three_report_em.py +119 -77
  191. akshare/stock_feature/stock_ttm_lyr.py +4 -7
  192. akshare/stock_feature/stock_value_em.py +83 -0
  193. akshare/stock_feature/stock_wencai.py +21 -9
  194. akshare/stock_feature/stock_yjyg_em.py +63 -28
  195. akshare/stock_feature/stock_zf_pg.py +61 -38
  196. akshare/stock_feature/stock_zh_valuation_baidu.py +3 -2
  197. akshare/stock_feature/stock_ztb_em.py +62 -40
  198. akshare/stock_fundamental/stock_finance.py +150 -58
  199. akshare/stock_fundamental/stock_finance_ths.py +116 -31
  200. akshare/stock_fundamental/stock_mda_ym.py +5 -3
  201. akshare/stock_fundamental/stock_notice.py +29 -15
  202. akshare/stock_fundamental/stock_profit_forecast_em.py +31 -13
  203. akshare/stock_fundamental/stock_profit_forecast_ths.py +19 -10
  204. akshare/stock_fundamental/stock_register_em.py +448 -0
  205. akshare/stock_fundamental/stock_restricted_em.py +79 -32
  206. akshare/stock_fundamental/stock_zygc.py +10 -8
  207. akshare/stock_fundamental/stock_zyjs_ths.py +5 -3
  208. akshare/tool/trade_date_hist.py +4 -3
  209. akshare/utils/cons.py +10 -0
  210. akshare/utils/context.py +43 -0
  211. akshare/utils/demjson.py +2 -2
  212. akshare/utils/func.py +26 -0
  213. akshare/utils/tqdm.py +13 -3
  214. {akshare-1.12.99.dist-info → akshare-1.15.72.dist-info}/METADATA +52 -69
  215. akshare-1.15.72.dist-info/RECORD +385 -0
  216. {akshare-1.12.99.dist-info → akshare-1.15.72.dist-info}/WHEEL +1 -1
  217. tests/test_func.py +3 -5
  218. akshare/bond/bond_futures.py +0 -50
  219. akshare/bond/bond_investing.py +0 -139
  220. akshare/crypto/crypto_hist_investing.py +0 -249
  221. akshare/fortune/fortune_it_juzi.py +0 -123
  222. akshare/futures/futures_international.py +0 -170
  223. akshare/futures/futures_news_baidu.py +0 -54
  224. akshare/futures/inventory_data.py +0 -100
  225. akshare/futures_derivative/futures_index_price_nh.py +0 -61
  226. akshare/futures_derivative/futures_index_return_nh.py +0 -47
  227. akshare/futures_derivative/futures_index_volatility_nh.py +0 -51
  228. akshare/futures_derivative/futures_other_index_nh.py +0 -145
  229. akshare/index/index_fear_greed_funddb.py +0 -71
  230. akshare/index/index_investing.py +0 -232
  231. akshare/sport/sport_olympic_winter.py +0 -39
  232. akshare/stock_feature/stock_board_concept_ths.py +0 -422
  233. akshare/stock_fundamental/stock_register.py +0 -292
  234. akshare-1.12.99.dist-info/RECORD +0 -374
  235. {akshare-1.12.99.dist-info → akshare-1.15.72.dist-info}/LICENSE +0 -0
  236. {akshare-1.12.99.dist-info → akshare-1.15.72.dist-info}/top_level.txt +0 -0
@@ -1,10 +1,11 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/1/25 18:00
4
+ Date: 2024/6/7 20:00
5
5
  Desc: 天天基金网-基金档案-投资组合
6
6
  https://fundf10.eastmoney.com/ccmx_000001.html
7
7
  """
8
+
8
9
  from io import StringIO
9
10
 
10
11
  import pandas as pd
@@ -14,9 +15,7 @@ from bs4 import BeautifulSoup
14
15
  from akshare.utils import demjson
15
16
 
16
17
 
17
- def fund_portfolio_hold_em(
18
- symbol: str = "000001", date: str = "2023"
19
- ) -> pd.DataFrame:
18
+ def fund_portfolio_hold_em(symbol: str = "000001", date: str = "2024") -> pd.DataFrame:
20
19
  """
21
20
  天天基金网-基金档案-投资组合-基金持仓
22
21
  https://fundf10.eastmoney.com/ccmx_000001.html
@@ -27,7 +26,7 @@ def fund_portfolio_hold_em(
27
26
  :return: 基金持仓
28
27
  :rtype: pandas.DataFrame
29
28
  """
30
- url = "http://fundf10.eastmoney.com/FundArchivesDatas.aspx"
29
+ url = "https://fundf10.eastmoney.com/FundArchivesDatas.aspx"
31
30
  params = {
32
31
  "type": "jjcc",
33
32
  "code": symbol,
@@ -38,35 +37,40 @@ def fund_portfolio_hold_em(
38
37
  }
39
38
  r = requests.get(url, params=params)
40
39
  data_text = r.text
41
- data_json = demjson.decode(data_text[data_text.find("{"): -1])
42
- soup = BeautifulSoup(data_json["content"], "lxml")
40
+ data_json = demjson.decode(data_text[data_text.find("{") : -1])
41
+ soup = BeautifulSoup(data_json["content"], features="lxml")
43
42
  item_label = [
44
43
  item.text.split("\xa0\xa0")[1]
45
- for item in soup.find_all("h4", attrs={"class": "t"})
44
+ for item in soup.find_all(name="h4", attrs={"class": "t"})
46
45
  ]
47
46
  big_df = pd.DataFrame()
48
47
  for item in range(len(item_label)):
49
- temp_df = pd.read_html(StringIO(data_json["content"]), converters={"股票代码": str})[
50
- item
51
- ]
48
+ temp_df = pd.read_html(
49
+ StringIO(data_json["content"]), converters={"股票代码": str}
50
+ )[item]
52
51
  del temp_df["相关资讯"]
53
- temp_df.rename(
54
- columns={"占净值 比例": "占净值比例"}, inplace=True
55
- )
52
+ temp_df.rename(columns={"占净值 比例": "占净值比例"}, inplace=True)
56
53
  temp_df["占净值比例"] = (
57
54
  temp_df["占净值比例"].str.split("%", expand=True).iloc[:, 0]
58
55
  )
59
56
  temp_df.rename(
60
- columns={"持股数(万股)": "持股数", "持仓市值(万元)": "持仓市值"}, inplace=True
57
+ columns={"持股数(万股)": "持股数", "持仓市值(万元)": "持仓市值"},
58
+ inplace=True,
61
59
  )
62
60
  temp_df.rename(
63
- columns={"持股数 (万股)": "持股数", "持仓市值 (万元)": "持仓市值"}, inplace=True
61
+ columns={"持股数 (万股)": "持股数", "持仓市值 (万元)": "持仓市值"},
62
+ inplace=True,
64
63
  )
65
64
  temp_df.rename(
66
- columns={"持股数(万股)": "持股数", "持仓市值(万元人民币)": "持仓市值"}, inplace=True
65
+ columns={"持股数(万股)": "持股数", "持仓市值(万元人民币)": "持仓市值"},
66
+ inplace=True,
67
67
  )
68
68
  temp_df.rename(
69
- columns={"持股数 (万股)": "持股数", "持仓市值 (万元人民币)": "持仓市值"}, inplace=True
69
+ columns={
70
+ "持股数 (万股)": "持股数",
71
+ "持仓市值 (万元人民币)": "持仓市值",
72
+ },
73
+ inplace=True,
70
74
  )
71
75
 
72
76
  temp_df["季度"] = item_label[item]
@@ -81,16 +85,19 @@ def fund_portfolio_hold_em(
81
85
  "季度",
82
86
  ]
83
87
  ]
84
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
88
+ big_df = pd.concat(objs=[temp_df, big_df], ignore_index=True)
85
89
  big_df["占净值比例"] = pd.to_numeric(big_df["占净值比例"], errors="coerce")
86
90
  big_df["持股数"] = pd.to_numeric(big_df["持股数"], errors="coerce")
87
91
  big_df["持仓市值"] = pd.to_numeric(big_df["持仓市值"], errors="coerce")
88
- big_df["序号"] = range(1, len(big_df) + 1)
92
+ del big_df["序号"]
93
+ big_df.reset_index(inplace=True, drop=False)
94
+ big_df["index"] = big_df["index"] + 1
95
+ big_df.rename(columns={"index": "序号"}, inplace=True)
89
96
  return big_df
90
97
 
91
98
 
92
99
  def fund_portfolio_bond_hold_em(
93
- symbol: str = "000001", date: str = "2023"
100
+ symbol: str = "000001", date: str = "2023"
94
101
  ) -> pd.DataFrame:
95
102
  """
96
103
  天天基金网-基金档案-投资组合-债券持仓
@@ -102,7 +109,7 @@ def fund_portfolio_bond_hold_em(
102
109
  :return: 债券持仓
103
110
  :rtype: pandas.DataFrame
104
111
  """
105
- url = "http://fundf10.eastmoney.com/FundArchivesDatas.aspx"
112
+ url = "https://fundf10.eastmoney.com/FundArchivesDatas.aspx"
106
113
  params = {
107
114
  "type": "zqcc",
108
115
  "code": symbol,
@@ -111,17 +118,17 @@ def fund_portfolio_bond_hold_em(
111
118
  }
112
119
  r = requests.get(url, params=params)
113
120
  data_text = r.text
114
- data_json = demjson.decode(data_text[data_text.find("{"): -1])
115
- soup = BeautifulSoup(data_json["content"], "lxml")
121
+ data_json = demjson.decode(data_text[data_text.find("{") : -1])
122
+ soup = BeautifulSoup(data_json["content"], features="lxml")
116
123
  item_label = [
117
124
  item.text.split("\xa0\xa0")[1]
118
- for item in soup.find_all("h4", attrs={"class": "t"})
125
+ for item in soup.find_all(name="h4", attrs={"class": "t"})
119
126
  ]
120
127
  big_df = pd.DataFrame()
121
128
  for item in range(len(item_label)):
122
- temp_df = pd.read_html(StringIO(data_json["content"]), converters={"债券代码": str})[
123
- item
124
- ]
129
+ temp_df = pd.read_html(
130
+ StringIO(data_json["content"]), converters={"债券代码": str}
131
+ )[item]
125
132
  temp_df["占净值比例"] = (
126
133
  temp_df["占净值比例"].str.split("%", expand=True).iloc[:, 0]
127
134
  )
@@ -137,7 +144,7 @@ def fund_portfolio_bond_hold_em(
137
144
  "季度",
138
145
  ]
139
146
  ]
140
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
147
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
141
148
  big_df["占净值比例"] = pd.to_numeric(big_df["占净值比例"], errors="coerce")
142
149
  big_df["持仓市值"] = pd.to_numeric(big_df["持仓市值"], errors="coerce")
143
150
  big_df["序号"] = range(1, len(big_df) + 1)
@@ -145,7 +152,7 @@ def fund_portfolio_bond_hold_em(
145
152
 
146
153
 
147
154
  def fund_portfolio_industry_allocation_em(
148
- symbol: str = "000001", date: str = "2023"
155
+ symbol: str = "000001", date: str = "2023"
149
156
  ) -> pd.DataFrame:
150
157
  """
151
158
  天天基金网-基金档案-投资组合-行业配置
@@ -157,7 +164,7 @@ def fund_portfolio_industry_allocation_em(
157
164
  :return: 行业配置
158
165
  :rtype: pandas.DataFrame
159
166
  """
160
- url = "http://api.fund.eastmoney.com/f10/HYPZ/"
167
+ url = "https://api.fund.eastmoney.com/f10/HYPZ/"
161
168
  headers = {
162
169
  "Accept": "*/*",
163
170
  "Accept-Encoding": "gzip, deflate",
@@ -166,8 +173,9 @@ def fund_portfolio_industry_allocation_em(
166
173
  "Connection": "keep-alive",
167
174
  "Host": "api.fund.eastmoney.com",
168
175
  "Pragma": "no-cache",
169
- "Referer": "http://fundf10.eastmoney.com/",
170
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.82 Safari/537.36",
176
+ "Referer": "https://fundf10.eastmoney.com/",
177
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
178
+ "Chrome/99.0.4844.82 Safari/537.36",
171
179
  }
172
180
  params = {
173
181
  "fundCode": symbol,
@@ -177,7 +185,7 @@ def fund_portfolio_industry_allocation_em(
177
185
  }
178
186
  r = requests.get(url, params=params, headers=headers)
179
187
  data_text = r.text
180
- data_json = demjson.decode(data_text[data_text.find("{"): -1])
188
+ data_json = demjson.decode(data_text[data_text.find("{") : -1])
181
189
  temp_list = []
182
190
  for item in data_json["Data"]["QuarterInfos"]:
183
191
  temp_list.extend(item["HYPZInfo"])
@@ -218,7 +226,7 @@ def fund_portfolio_industry_allocation_em(
218
226
 
219
227
 
220
228
  def fund_portfolio_change_em(
221
- symbol: str = "003567", indicator: str = "累计买入", date: str = "2023"
229
+ symbol: str = "003567", indicator: str = "累计买入", date: str = "2023"
222
230
  ) -> pd.DataFrame:
223
231
  """
224
232
  天天基金网-基金档案-投资组合-重大变动
@@ -236,7 +244,7 @@ def fund_portfolio_change_em(
236
244
  "累计买入": "1",
237
245
  "累计卖出": "2",
238
246
  }
239
- url = "http://fundf10.eastmoney.com/FundArchivesDatas.aspx"
247
+ url = "https://fundf10.eastmoney.com/FundArchivesDatas.aspx"
240
248
  params = {
241
249
  "type": "zdbd",
242
250
  "code": symbol,
@@ -246,20 +254,22 @@ def fund_portfolio_change_em(
246
254
  }
247
255
  r = requests.get(url, params=params)
248
256
  data_text = r.text
249
- data_json = demjson.decode(data_text[data_text.find("{"): -1])
250
- soup = BeautifulSoup(data_json["content"], "lxml")
257
+ data_json = demjson.decode(data_text[data_text.find("{") : -1])
258
+ soup = BeautifulSoup(data_json["content"], features="lxml")
251
259
  item_label = [
252
260
  item.text.split("\xa0\xa0")[1]
253
- for item in soup.find_all("h4", attrs={"class": "t"})
261
+ for item in soup.find_all(name="h4", attrs={"class": "t"})
254
262
  ]
255
263
  big_df = pd.DataFrame()
256
264
  for item in range(len(item_label)):
257
- temp_df = pd.read_html(StringIO(data_json["content"]), converters={"股票代码": str})[
258
- item
259
- ]
265
+ temp_df = pd.read_html(
266
+ StringIO(data_json["content"]), converters={"股票代码": str}
267
+ )[item]
260
268
  del temp_df["相关资讯"]
261
269
  temp_df["占期初基金资产净值比例(%)"] = (
262
- temp_df["占期初基金资产净值比例(%)"].str.split("%", expand=True).iloc[:, 0]
270
+ temp_df["占期初基金资产净值比例(%)"]
271
+ .str.split("%", expand=True)
272
+ .iloc[:, 0]
263
273
  )
264
274
  temp_df["季度"] = item_label[item]
265
275
  temp_df.columns = [
@@ -280,13 +290,15 @@ def fund_portfolio_change_em(
280
290
  "季度",
281
291
  ]
282
292
  ]
283
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
293
+ big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
284
294
  del big_df["序号"]
285
295
  big_df.reset_index(inplace=True)
286
296
  big_df["index"] = big_df.index + 1
287
297
  big_df.rename(columns={"index": "序号"}, inplace=True)
288
298
 
289
- big_df["本期累计买入金额"] = pd.to_numeric(big_df["本期累计买入金额"], errors="coerce")
299
+ big_df["本期累计买入金额"] = pd.to_numeric(
300
+ big_df["本期累计买入金额"], errors="coerce"
301
+ )
290
302
  big_df["占期初基金资产净值比例"] = pd.to_numeric(
291
303
  big_df["占期初基金资产净值比例"], errors="coerce"
292
304
  )
@@ -294,9 +306,7 @@ def fund_portfolio_change_em(
294
306
 
295
307
 
296
308
  if __name__ == "__main__":
297
- fund_portfolio_hold_em_df = fund_portfolio_hold_em(
298
- symbol="011934", date="2023"
299
- )
309
+ fund_portfolio_hold_em_df = fund_portfolio_hold_em(symbol="000001", date="2024")
300
310
  print(fund_portfolio_hold_em_df)
301
311
 
302
312
  fund_portfolio_bond_hold_em_df = fund_portfolio_bond_hold_em(
@@ -304,8 +314,8 @@ if __name__ == "__main__":
304
314
  )
305
315
  print(fund_portfolio_bond_hold_em_df)
306
316
 
307
- fund_portfolio_industry_allocation_em_df = (
308
- fund_portfolio_industry_allocation_em(symbol="000001", date="2023")
317
+ fund_portfolio_industry_allocation_em_df = fund_portfolio_industry_allocation_em(
318
+ symbol="000001", date="2023"
309
319
  )
310
320
  print(fund_portfolio_industry_allocation_em_df)
311
321
 
@@ -1,12 +1,13 @@
1
1
  #!/usr/bin/env python
2
2
  # -*- coding:utf-8 -*-
3
3
  """
4
- Date: 2024/2/29 18:00
4
+ Date: 2024/7/24 13:00
5
5
  Desc: 东方财富网-数据中心-开放基金排行
6
6
  https://fund.eastmoney.com/data/fundranking.html
7
7
  名词解释
8
8
  https://help.1234567.com.cn/list_236.html
9
9
  """
10
+
10
11
  from datetime import datetime, date
11
12
 
12
13
  import pandas as pd
@@ -33,7 +34,7 @@ def fund_open_fund_rank_em(symbol: str = "全部") -> pd.DataFrame:
33
34
  """
34
35
  东方财富网-数据中心-开放基金排行
35
36
  https://fund.eastmoney.com/data/fundranking.html
36
- :param symbol: choice of {"全部", "股票型", "混合型", "债券型", "指数型", "QDII", "LOF", "FOF"}
37
+ :param symbol: choice of {"全部", "股票型", "混合型", "债券型", "指数型", "QDII", "FOF"}
37
38
  :type symbol: str
38
39
  :return: 开放基金排行
39
40
  :rtype: pandas.DataFrame
@@ -64,17 +65,18 @@ def fund_open_fund_rank_em(symbol: str = "全部") -> pd.DataFrame:
64
65
  "qdii": "",
65
66
  "tabSubtype": ",,,,,",
66
67
  "pi": "1",
67
- "pn": "20000",
68
+ "pn": "30000",
68
69
  "dx": "1",
69
70
  "v": "0.1591891419018292",
70
71
  }
71
72
  headers = {
72
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36",
73
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
74
+ "Chrome/81.0.4044.138 Safari/537.36",
73
75
  "Referer": "https://fund.eastmoney.com/fundguzhi.html",
74
76
  }
75
77
  r = requests.get(url, params=params, headers=headers)
76
78
  data_text = r.text
77
- data_json = demjson.decode(data_text[data_text.find("{"): -1])
79
+ data_json = demjson.decode(data_text[data_text.find("{") : -1])
78
80
  temp_df = pd.DataFrame(data_json["datas"])
79
81
  temp_df = temp_df.iloc[:, 0].str.split(",", expand=True)
80
82
  temp_df.reset_index(inplace=True)
@@ -129,20 +131,20 @@ def fund_open_fund_rank_em(symbol: str = "全部") -> pd.DataFrame:
129
131
  "手续费",
130
132
  ]
131
133
  ]
132
- temp_df['日期'] = pd.to_datetime(temp_df['日期'], errors="coerce").dt.date
133
- temp_df['单位净值'] = pd.to_numeric(temp_df['单位净值'], errors="coerce")
134
- temp_df['累计净值'] = pd.to_numeric(temp_df['累计净值'], errors="coerce")
135
- temp_df['日增长率'] = pd.to_numeric(temp_df['日增长率'], errors="coerce")
136
- temp_df['近1周'] = pd.to_numeric(temp_df['近1周'], errors="coerce")
137
- temp_df['近1月'] = pd.to_numeric(temp_df['近1月'], errors="coerce")
138
- temp_df['近3月'] = pd.to_numeric(temp_df['近3月'], errors="coerce")
139
- temp_df['近6月'] = pd.to_numeric(temp_df['近6月'], errors="coerce")
140
- temp_df['近1年'] = pd.to_numeric(temp_df['近1年'], errors="coerce")
141
- temp_df['近2年'] = pd.to_numeric(temp_df['近2年'], errors="coerce")
142
- temp_df['近3年'] = pd.to_numeric(temp_df['近3年'], errors="coerce")
143
- temp_df['今年来'] = pd.to_numeric(temp_df['今年来'], errors="coerce")
144
- temp_df['成立来'] = pd.to_numeric(temp_df['成立来'], errors="coerce")
145
- temp_df['自定义'] = pd.to_numeric(temp_df['自定义'], errors="coerce")
134
+ temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
135
+ temp_df["单位净值"] = pd.to_numeric(temp_df["单位净值"], errors="coerce")
136
+ temp_df["累计净值"] = pd.to_numeric(temp_df["累计净值"], errors="coerce")
137
+ temp_df["日增长率"] = pd.to_numeric(temp_df["日增长率"], errors="coerce")
138
+ temp_df["近1周"] = pd.to_numeric(temp_df["近1周"], errors="coerce")
139
+ temp_df["近1月"] = pd.to_numeric(temp_df["近1月"], errors="coerce")
140
+ temp_df["近3月"] = pd.to_numeric(temp_df["近3月"], errors="coerce")
141
+ temp_df["近6月"] = pd.to_numeric(temp_df["近6月"], errors="coerce")
142
+ temp_df["近1年"] = pd.to_numeric(temp_df["近1年"], errors="coerce")
143
+ temp_df["近2年"] = pd.to_numeric(temp_df["近2年"], errors="coerce")
144
+ temp_df["近3年"] = pd.to_numeric(temp_df["近3年"], errors="coerce")
145
+ temp_df["今年来"] = pd.to_numeric(temp_df["今年来"], errors="coerce")
146
+ temp_df["成立来"] = pd.to_numeric(temp_df["成立来"], errors="coerce")
147
+ temp_df["自定义"] = pd.to_numeric(temp_df["自定义"], errors="coerce")
146
148
  return temp_df
147
149
 
148
150
 
@@ -163,16 +165,17 @@ def fund_exchange_rank_em() -> pd.DataFrame:
163
165
  "sc": "1nzf",
164
166
  "st": "desc",
165
167
  "pi": "1",
166
- "pn": "10000",
168
+ "pn": "30000",
167
169
  "v": "0.1591891419018292",
168
170
  }
169
171
  headers = {
170
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36",
172
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
173
+ "Chrome/81.0.4044.138 Safari/537.36",
171
174
  "Referer": "https://fund.eastmoney.com/fundguzhi.html",
172
175
  }
173
176
  r = requests.get(url, params=params, headers=headers)
174
177
  text_data = r.text
175
- json_data = demjson.decode(text_data[text_data.find("{"): -1])
178
+ json_data = demjson.decode(text_data[text_data.find("{") : -1])
176
179
  temp_df = pd.DataFrame(json_data["datas"])
177
180
  temp_df = temp_df.iloc[:, 0].str.split(",", expand=True)
178
181
  temp_df.reset_index(inplace=True)
@@ -224,19 +227,19 @@ def fund_exchange_rank_em() -> pd.DataFrame:
224
227
  "成立日期",
225
228
  ]
226
229
  ]
227
- temp_df['日期'] = pd.to_datetime(temp_df['日期']).dt.date
228
- temp_df['成立日期'] = pd.to_datetime(temp_df['成立日期']).dt.date
229
- temp_df['单位净值'] = pd.to_numeric(temp_df['单位净值'], errors="coerce")
230
- temp_df['累计净值'] = pd.to_numeric(temp_df['累计净值'], errors="coerce")
231
- temp_df['近1周'] = pd.to_numeric(temp_df['近1周'], errors="coerce")
232
- temp_df['近1月'] = pd.to_numeric(temp_df['近1月'], errors="coerce")
233
- temp_df['近3月'] = pd.to_numeric(temp_df['近3月'], errors="coerce")
234
- temp_df['近6月'] = pd.to_numeric(temp_df['近6月'], errors="coerce")
235
- temp_df['近1年'] = pd.to_numeric(temp_df['近1年'], errors="coerce")
236
- temp_df['近2年'] = pd.to_numeric(temp_df['近2年'], errors="coerce")
237
- temp_df['近3年'] = pd.to_numeric(temp_df['近3年'], errors="coerce")
238
- temp_df['今年来'] = pd.to_numeric(temp_df['今年来'], errors="coerce")
239
- temp_df['成立来'] = pd.to_numeric(temp_df['成立来'], errors="coerce")
230
+ temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
231
+ temp_df["成立日期"] = pd.to_datetime(temp_df["成立日期"]).dt.date
232
+ temp_df["单位净值"] = pd.to_numeric(temp_df["单位净值"], errors="coerce")
233
+ temp_df["累计净值"] = pd.to_numeric(temp_df["累计净值"], errors="coerce")
234
+ temp_df["近1周"] = pd.to_numeric(temp_df["近1周"], errors="coerce")
235
+ temp_df["近1月"] = pd.to_numeric(temp_df["近1月"], errors="coerce")
236
+ temp_df["近3月"] = pd.to_numeric(temp_df["近3月"], errors="coerce")
237
+ temp_df["近6月"] = pd.to_numeric(temp_df["近6月"], errors="coerce")
238
+ temp_df["近1年"] = pd.to_numeric(temp_df["近1年"], errors="coerce")
239
+ temp_df["近2年"] = pd.to_numeric(temp_df["近2年"], errors="coerce")
240
+ temp_df["近3年"] = pd.to_numeric(temp_df["近3年"], errors="coerce")
241
+ temp_df["今年来"] = pd.to_numeric(temp_df["今年来"], errors="coerce")
242
+ temp_df["成立来"] = pd.to_numeric(temp_df["成立来"], errors="coerce")
240
243
  return temp_df
241
244
 
242
245
 
@@ -259,7 +262,8 @@ def fund_money_rank_em() -> pd.DataFrame:
259
262
  "_": "1603867224251",
260
263
  }
261
264
  headers = {
262
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36",
265
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
266
+ "Chrome/81.0.4044.138 Safari/537.36",
263
267
  "Referer": "https://fund.eastmoney.com/fundguzhi.html",
264
268
  }
265
269
  r = requests.get(url, params=params, headers=headers)
@@ -319,20 +323,24 @@ def fund_money_rank_em() -> pd.DataFrame:
319
323
  "手续费",
320
324
  ]
321
325
  ]
322
- temp_df['日期'] = pd.to_datetime(temp_df['日期']).dt.date
323
- temp_df['万份收益'] = pd.to_numeric(temp_df['万份收益'], errors="coerce")
324
- temp_df['年化收益率7日'] = pd.to_numeric(temp_df['年化收益率7日'], errors="coerce")
325
- temp_df['年化收益率14日'] = pd.to_numeric(temp_df['年化收益率14日'], errors="coerce")
326
- temp_df['年化收益率28'] = pd.to_numeric(temp_df['年化收益率28日'], errors="coerce")
327
- temp_df['近1月'] = pd.to_numeric(temp_df['近1月'], errors="coerce")
328
- temp_df['近3月'] = pd.to_numeric(temp_df['近3月'], errors="coerce")
329
- temp_df['近6月'] = pd.to_numeric(temp_df['近6月'], errors="coerce")
330
- temp_df['近1年'] = pd.to_numeric(temp_df['近1年'], errors="coerce")
331
- temp_df['2年'] = pd.to_numeric(temp_df['2年'], errors="coerce")
332
- temp_df['近3年'] = pd.to_numeric(temp_df['近3年'], errors="coerce")
333
- temp_df['5年'] = pd.to_numeric(temp_df['5年'], errors="coerce")
334
- temp_df['今年来'] = pd.to_numeric(temp_df['今年来'], errors="coerce")
335
- temp_df['成立来'] = pd.to_numeric(temp_df['成立来'], errors="coerce")
326
+ temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
327
+ temp_df["万份收益"] = pd.to_numeric(temp_df["万份收益"], errors="coerce")
328
+ temp_df["年化收益率7日"] = pd.to_numeric(temp_df["年化收益率7日"], errors="coerce")
329
+ temp_df["年化收益率14日"] = pd.to_numeric(
330
+ temp_df["年化收益率14"], errors="coerce"
331
+ )
332
+ temp_df["年化收益率28日"] = pd.to_numeric(
333
+ temp_df["年化收益率28日"], errors="coerce"
334
+ )
335
+ temp_df["1月"] = pd.to_numeric(temp_df["1月"], errors="coerce")
336
+ temp_df["近3月"] = pd.to_numeric(temp_df["近3月"], errors="coerce")
337
+ temp_df["6月"] = pd.to_numeric(temp_df["6月"], errors="coerce")
338
+ temp_df["近1年"] = pd.to_numeric(temp_df["近1年"], errors="coerce")
339
+ temp_df["近2年"] = pd.to_numeric(temp_df["近2年"], errors="coerce")
340
+ temp_df["近3年"] = pd.to_numeric(temp_df["近3年"], errors="coerce")
341
+ temp_df["近5年"] = pd.to_numeric(temp_df["近5年"], errors="coerce")
342
+ temp_df["今年来"] = pd.to_numeric(temp_df["今年来"], errors="coerce")
343
+ temp_df["成立来"] = pd.to_numeric(temp_df["成立来"], errors="coerce")
336
344
  return temp_df
337
345
 
338
346
 
@@ -358,13 +366,14 @@ def fund_lcx_rank_em() -> pd.DataFrame:
358
366
  "_": "1603867224251",
359
367
  }
360
368
  headers = {
361
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36",
369
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
370
+ "Chrome/81.0.4044.138 Safari/537.36",
362
371
  "Referer": "https://fund.eastmoney.com/fundguzhi.html",
363
372
  }
364
373
  r = requests.get(url, params=params, headers=headers)
365
374
  try:
366
375
  data_json = r.json()
367
- except:
376
+ except: # noqa: E722
368
377
  return pd.DataFrame()
369
378
  temp_df = pd.DataFrame(data_json["Data"])
370
379
  temp_df.reset_index(inplace=True)
@@ -427,21 +436,22 @@ def fund_hk_rank_em() -> pd.DataFrame:
427
436
  format_date = datetime.now().date().isoformat()
428
437
  url = "https://overseas.1234567.com.cn/overseasapi/OpenApiHander.ashx"
429
438
  params = {
430
- 'api': 'HKFDApi',
431
- 'm': 'MethodFundList',
432
- 'action': '1',
433
- 'pageindex': '0',
434
- 'pagesize': '5000',
435
- 'dy': '1',
436
- 'date1': format_date,
437
- 'date2': format_date,
438
- 'sortfield': 'Y',
439
- 'sorttype': '-1',
440
- 'isbuy': '0',
441
- '_': '1610790553848',
439
+ "api": "HKFDApi",
440
+ "m": "MethodFundList",
441
+ "action": "1",
442
+ "pageindex": "0",
443
+ "pagesize": "5000",
444
+ "dy": "1",
445
+ "date1": format_date,
446
+ "date2": format_date,
447
+ "sortfield": "Y",
448
+ "sorttype": "-1",
449
+ "isbuy": "0",
450
+ "_": "1610790553848",
442
451
  }
443
452
  headers = {
444
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36",
453
+ "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
454
+ "Chrome/81.0.4044.138 Safari/537.36",
445
455
  "Referer": "https://fund.eastmoney.com/fundguzhi.html",
446
456
  }
447
457
  r = requests.get(url, params=params, headers=headers)
@@ -494,20 +504,22 @@ def fund_hk_rank_em() -> pd.DataFrame:
494
504
  "香港基金代码",
495
505
  ]
496
506
  ]
497
- temp_df['日期'] = pd.to_datetime(temp_df['日期']).dt.date
498
- temp_df['单位净值'] = pd.to_numeric(temp_df['单位净值'], errors="coerce")
499
- temp_df['日增长率'] = pd.to_numeric(temp_df['日增长率'], errors="coerce")
500
- temp_df['近1周'] = pd.to_numeric(temp_df['近1周'], errors="coerce")
501
- temp_df['近1月'] = pd.to_numeric(temp_df['近1月'], errors="coerce")
502
- temp_df['近3月'] = pd.to_numeric(temp_df['近3月'], errors="coerce")
503
- temp_df['近6月'] = pd.to_numeric(temp_df['近6月'], errors="coerce")
504
- temp_df['近1年'] = pd.to_numeric(temp_df['近1年'], errors="coerce")
505
- temp_df['近2年'] = pd.to_numeric(temp_df['近2年'], errors="coerce")
506
- temp_df['近3年'] = pd.to_numeric(temp_df['近3年'], errors="coerce")
507
- temp_df['今年来'] = pd.to_numeric(temp_df['今年来'], errors="coerce")
508
- temp_df['成立来'] = pd.to_numeric(temp_df['成立来'], errors="coerce")
509
- temp_df['成立来'] = pd.to_numeric(temp_df['成立来'], errors="coerce")
510
- temp_df['可购买'] = temp_df['可购买'].map(lambda x: "可购买" if x == "1" else "不可购买")
507
+ temp_df["日期"] = pd.to_datetime(temp_df["日期"], errors="coerce").dt.date
508
+ temp_df["单位净值"] = pd.to_numeric(temp_df["单位净值"], errors="coerce")
509
+ temp_df["日增长率"] = pd.to_numeric(temp_df["日增长率"], errors="coerce")
510
+ temp_df["近1周"] = pd.to_numeric(temp_df["近1周"], errors="coerce")
511
+ temp_df["近1月"] = pd.to_numeric(temp_df["近1月"], errors="coerce")
512
+ temp_df["近3月"] = pd.to_numeric(temp_df["近3月"], errors="coerce")
513
+ temp_df["近6月"] = pd.to_numeric(temp_df["近6月"], errors="coerce")
514
+ temp_df["近1年"] = pd.to_numeric(temp_df["近1年"], errors="coerce")
515
+ temp_df["近2年"] = pd.to_numeric(temp_df["近2年"], errors="coerce")
516
+ temp_df["近3年"] = pd.to_numeric(temp_df["近3年"], errors="coerce")
517
+ temp_df["今年来"] = pd.to_numeric(temp_df["今年来"], errors="coerce")
518
+ temp_df["成立来"] = pd.to_numeric(temp_df["成立来"], errors="coerce")
519
+ temp_df["成立来"] = pd.to_numeric(temp_df["成立来"], errors="coerce")
520
+ temp_df["可购买"] = temp_df["可购买"].map(
521
+ lambda x: "可购买" if x == "1" else "不可购买"
522
+ )
511
523
  return temp_df
512
524
 
513
525
 
@@ -530,9 +542,6 @@ if __name__ == "__main__":
530
542
  fund_open_fund_rank_em_df = fund_open_fund_rank_em(symbol="QDII")
531
543
  print(fund_open_fund_rank_em_df)
532
544
 
533
- fund_open_fund_rank_em_df = fund_open_fund_rank_em(symbol="LOF")
534
- print(fund_open_fund_rank_em_df)
535
-
536
545
  fund_open_fund_rank_em_df = fund_open_fund_rank_em(symbol="FOF")
537
546
  print(fund_open_fund_rank_em_df)
538
547