akshare 1.12.99__py3-none-any.whl → 1.15.73__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 +442 -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.73.dist-info}/METADATA +52 -69
  215. akshare-1.15.73.dist-info/RECORD +385 -0
  216. {akshare-1.12.99.dist-info → akshare-1.15.73.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.73.dist-info}/LICENSE +0 -0
  236. {akshare-1.12.99.dist-info → akshare-1.15.73.dist-info}/top_level.txt +0 -0
@@ -1,249 +0,0 @@
1
- #!/usr/bin/env python
2
- # -*- coding:utf-8 -*-
3
- """
4
- Date: 2022/5/11 17:52
5
- Desc: 加密货币
6
- https://cn.investing.com/crypto/currencies
7
- 高频数据
8
- https://bitcoincharts.com/about/markets-api/
9
- """
10
- import math
11
-
12
- import pandas as pd
13
- import requests
14
- from tqdm import tqdm
15
-
16
- from akshare.datasets import get_crypto_info_csv
17
-
18
-
19
- def crypto_name_url_table(symbol: str = "web") -> pd.DataFrame:
20
- """
21
- 加密货币名称、代码和 ID,每次更新较慢
22
- https://cn.investing.com/crypto/ethereum/historical-data
23
- :param symbol: choice of {"web", "local"}; web 表示从网页获取最新,local 表示利用本地本文件
24
- :type symbol: str
25
- :return: 加密货币名称、代码和 ID
26
- :rtype: pandas.DataFrame
27
- """
28
- if symbol == "web":
29
- headers = {
30
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36",
31
- "X-Requested-With": "XMLHttpRequest",
32
- }
33
- url = "https://cn.investing.com/crypto/Service/LoadCryptoCurrencies"
34
- payload = {
35
- 'draw': '14',
36
- 'columns[0][data]': 'currencies_order',
37
- 'columns[0][name]': 'currencies_order',
38
- 'columns[0][searchable]': 'true',
39
- 'columns[0][orderable]': 'true',
40
- 'columns[0][search][value]': '',
41
- 'columns[0][search][regex]': 'false',
42
- 'columns[1][data]': 'function',
43
- 'columns[1][name]': 'crypto_id',
44
- 'columns[1][searchable]': 'true',
45
- 'columns[1][orderable]': 'false',
46
- 'columns[1][search][value]': '',
47
- 'columns[1][search][regex]': 'false',
48
- 'columns[2][data]': 'function',
49
- 'columns[2][name]': 'name',
50
- 'columns[2][searchable]': 'true',
51
- 'columns[2][orderable]': 'true',
52
- 'columns[2][search][value]': '',
53
- 'columns[2][search][regex]': 'false',
54
- 'columns[3][data]': 'symbol',
55
- 'columns[3][name]': 'symbol',
56
- 'columns[3][searchable]': 'true',
57
- 'columns[3][orderable]': 'true',
58
- 'columns[3][search][value]': '',
59
- 'columns[3][search][regex]': 'false',
60
- 'columns[4][data]': 'function',
61
- 'columns[4][name]': 'price_usd',
62
- 'columns[4][searchable]': 'true',
63
- 'columns[4][orderable]': 'true',
64
- 'columns[4][search][value]': '',
65
- 'columns[4][search][regex]': 'false',
66
- 'columns[5][data]': 'market_cap_formatted',
67
- 'columns[5][name]': 'market_cap_usd',
68
- 'columns[5][searchable]': 'true',
69
- 'columns[5][orderable]': 'true',
70
- 'columns[5][search][value]': '',
71
- 'columns[5][search][regex]': 'false',
72
- 'columns[6][data]': '24h_volume_formatted',
73
- 'columns[6][name]': '24h_volume_usd',
74
- 'columns[6][searchable]': 'true',
75
- 'columns[6][orderable]': 'true',
76
- 'columns[6][search][value]': '',
77
- 'columns[6][search][regex]': 'false',
78
- 'columns[7][data]': 'total_volume',
79
- 'columns[7][name]': 'total_volume',
80
- 'columns[7][searchable]': 'true',
81
- 'columns[7][orderable]': 'true',
82
- 'columns[7][search][value]': '',
83
- 'columns[7][search][regex]': 'false',
84
- 'columns[8][data]': 'change_percent_formatted',
85
- 'columns[8][name]': 'change_percent',
86
- 'columns[8][searchable]': 'true',
87
- 'columns[8][orderable]': 'true',
88
- 'columns[8][search][value]': '',
89
- 'columns[8][search][regex]': 'false',
90
- 'columns[9][data]': 'percent_change_7d_formatted',
91
- 'columns[9][name]': 'percent_change_7d',
92
- 'columns[9][searchable]': 'true',
93
- 'columns[9][orderable]': 'true',
94
- 'columns[9][search][value]': '',
95
- 'columns[9][search][regex]': 'false',
96
- 'order[0][column]': 'currencies_order',
97
- 'order[0][dir]': 'asc',
98
- 'start': '0',
99
- 'length': '100',
100
- 'search[value]': '',
101
- 'search[regex]': 'false',
102
- 'currencyId': '12',
103
- }
104
- r = requests.post(url, data=payload, headers=headers)
105
- data_json = r.json()
106
- total_page = math.ceil(int(data_json['recordsTotal']) / 100)
107
- big_df = pd.DataFrame()
108
- for page in tqdm(range(1, total_page+1), leave=False):
109
- payload.update({
110
- "start": (page-1)*100,
111
- 'length': 100
112
- })
113
- r = requests.post(url, data=payload, headers=headers)
114
- data_json = r.json()
115
- temp_df = pd.DataFrame(data_json['data'])
116
- big_df = pd.concat([big_df, temp_df], ignore_index=True)
117
- big_df = big_df[[
118
- 'symbol',
119
- 'name',
120
- 'name_trans',
121
- 'sml_id',
122
- 'related_pair_ID',
123
- ]]
124
- return big_df
125
- else:
126
- get_crypto_info_csv_path = get_crypto_info_csv()
127
- name_url_df = pd.read_csv(get_crypto_info_csv_path)
128
- return name_url_df
129
-
130
-
131
- def crypto_hist(
132
- symbol: str = "BTC",
133
- period: str = "每日",
134
- start_date: str = "20191020",
135
- end_date: str = "20201020",
136
- ):
137
- """
138
- 加密货币历史数据
139
- https://cn.investing.com/crypto/ethereum/historical-data
140
- :param symbol: 货币名称
141
- :type symbol: str
142
- :param period: choice of {"每日", "每周", "每月"}
143
- :type period: str
144
- :param start_date: '20151020', 注意格式
145
- :type start_date: str
146
- :param end_date: '20201020', 注意格式
147
- :type end_date: str
148
- :return: 加密货币历史数据获取
149
- :rtype: pandas.DataFrame
150
- """
151
- import warnings
152
- warnings.filterwarnings('ignore')
153
- headers = {
154
- "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36",
155
- "X-Requested-With": "XMLHttpRequest",
156
- }
157
- period_map = {"每日": "Daily", "每周": "Weekly", "每月": "Monthly"}
158
- start_date = "/".join([start_date[:4], start_date[4:6], start_date[6:]])
159
- end_date = "/".join([end_date[:4], end_date[4:6], end_date[6:]])
160
- name_url_df = crypto_name_url_table(symbol='local')
161
- curr_id = name_url_df[name_url_df["symbol"] == symbol]["related_pair_ID"].values[0]
162
- sml_id = name_url_df[name_url_df["symbol"] == symbol]["sml_id"].values[0]
163
- url = "https://cn.investing.com/instruments/HistoricalDataAjax"
164
- payload = {
165
- "curr_id": curr_id,
166
- "smlID": sml_id,
167
- "header": "null",
168
- "st_date": start_date,
169
- "end_date": end_date,
170
- "interval_sec": period_map[period],
171
- "sort_col": "date",
172
- "sort_ord": "DESC",
173
- "action": "historical_data",
174
- }
175
- r = requests.post(url, data=payload, headers=headers)
176
-
177
- temp_df = pd.read_html(r.text)[0]
178
- df_data = temp_df.copy()
179
- if period == "每月":
180
- df_data.index = pd.to_datetime(df_data["日期"], format="%Y年%m月")
181
- else:
182
- df_data.index = pd.to_datetime(df_data["日期"], format="%Y年%m月%d日")
183
- if any(df_data["交易量"].astype(str).str.contains("-")):
184
- df_data["交易量"][df_data["交易量"].str.contains("-")] = df_data["交易量"][
185
- df_data["交易量"].str.contains("-")
186
- ].replace("-", 0)
187
- if any(df_data["交易量"].astype(str).str.contains("B")):
188
- df_data["交易量"][df_data["交易量"].str.contains("B").fillna(False)] = (
189
- df_data["交易量"][df_data["交易量"].str.contains("B").fillna(False)]
190
- .str.replace("B", "")
191
- .str.replace(",", "")
192
- .astype(float)
193
- * 1000000000
194
- )
195
- if any(df_data["交易量"].astype(str).str.contains("M")):
196
- df_data["交易量"][df_data["交易量"].str.contains("M").fillna(False)] = (
197
- df_data["交易量"][df_data["交易量"].str.contains("M").fillna(False)]
198
- .str.replace("M", "")
199
- .str.replace(",", "")
200
- .astype(float)
201
- * 1000000
202
- )
203
- if any(df_data["交易量"].astype(str).str.contains("K")):
204
- df_data["交易量"][df_data["交易量"].str.contains("K").fillna(False)] = (
205
- df_data["交易量"][df_data["交易量"].str.contains("K").fillna(False)]
206
- .str.replace("K", "")
207
- .str.replace(",", "")
208
- .astype(float)
209
- * 1000
210
- )
211
- df_data["交易量"] = df_data["交易量"].astype(float)
212
- df_data["涨跌幅"] = pd.DataFrame(
213
- round(
214
- df_data["涨跌幅"].str.replace(",", "").str.replace("%", "").astype(float)
215
- / 100,
216
- 6,
217
- )
218
- )
219
- del df_data["日期"]
220
- df_data.reset_index(inplace=True)
221
- df_data = df_data[[
222
- "日期",
223
- "收盘",
224
- "开盘",
225
- "高",
226
- "低",
227
- "交易量",
228
- "涨跌幅",
229
- ]]
230
- df_data['日期'] = pd.to_datetime(df_data['日期']).dt.date
231
- df_data['收盘'] = pd.to_numeric(df_data['收盘'])
232
- df_data['开盘'] = pd.to_numeric(df_data['开盘'])
233
- df_data['高'] = pd.to_numeric(df_data['高'])
234
- df_data['低'] = pd.to_numeric(df_data['低'])
235
- df_data['交易量'] = pd.to_numeric(df_data['交易量'])
236
- df_data['涨跌幅'] = pd.to_numeric(df_data['涨跌幅'])
237
- df_data.sort_values('日期', inplace=True)
238
- df_data.reset_index(inplace=True, drop=True)
239
- return df_data
240
-
241
-
242
- if __name__ == "__main__":
243
- crypto_name_url_table_df = crypto_name_url_table(symbol="local")
244
- print(crypto_name_url_table_df)
245
-
246
- crypto_hist_df = crypto_hist(
247
- symbol="BTC", period="每日", start_date="20201020", end_date="20220511"
248
- )
249
- print(crypto_hist_df)
@@ -1,123 +0,0 @@
1
- #!/usr/bin/env python
2
- # -*- coding:utf-8 -*-
3
- """
4
- Date: 2021/6/30 15:55
5
- Desc: 获取 IT桔子 的死亡公司数据、千里马和独角兽
6
- https://www.itjuzi.com/deathCompany
7
- https://www.itjuzi.com/chollima
8
- https://www.itjuzi.com/unicorn
9
- """
10
- import pandas as pd
11
-
12
-
13
- def death_company() -> pd.DataFrame:
14
- """
15
- 此数据未更新
16
- IT桔子-死亡公司名单
17
- https://www.itjuzi.com/deathCompany
18
- :return: 死亡公司名单
19
- :rtype: pandas.DataFrame
20
- """
21
- temp_df = pd.read_csv(
22
- "https://jfds-1252952517.cos.ap-chengdu.myqcloud.com/akshare/data/data_juzi/juzi.csv"
23
- )
24
-
25
- temp_df.reset_index(inplace=True, drop=True)
26
- temp_df.columns = [
27
- "公司简称",
28
- "成立时间",
29
- "关闭时间",
30
- "存活天数",
31
- "融资规模",
32
- "行业",
33
- "地点",
34
- ]
35
- return temp_df
36
-
37
-
38
- def nicorn_company() -> pd.DataFrame:
39
- """
40
- 此数据未更新
41
- IT桔子-独角兽公司
42
- https://www.itjuzi.com/unicorn
43
- :return: 独角兽公司
44
- :rtype: pandas.DataFrame
45
- """
46
- temp_df = pd.read_csv(
47
- "https://jfds-1252952517.cos.ap-chengdu.myqcloud.com/akshare/data/data_juzi/nicorn_company.csv",
48
- index_col=0,
49
- )
50
- temp_df.reset_index(drop=True, inplace=True)
51
- del temp_df["com_id"]
52
- del temp_df["com_logo_archive"]
53
- del temp_df["com_city"]
54
- del temp_df["invse_year"]
55
- del temp_df["invse_month"]
56
- del temp_df["invse_day"]
57
- del temp_df["invse_guess_particulars"]
58
- del temp_df["invse_detail_money"]
59
- del temp_df["invse_currency_id"]
60
- del temp_df["invse_similar_money_id"]
61
- del temp_df["invse_round_id"]
62
- del temp_df["money"]
63
- del temp_df["invse_money"]
64
- del temp_df["round"]
65
- temp_df.reset_index(inplace=True)
66
- temp_df["index"] = range(1, len(temp_df) + 1)
67
- temp_df.columns = [
68
- "序号",
69
- "公司",
70
- "地区",
71
- "行业",
72
- "子行业",
73
- ]
74
- return temp_df
75
-
76
-
77
- def maxima_company() -> pd.DataFrame:
78
- """
79
- 此数据未更新
80
- IT桔子-千里马公司
81
- https://www.itjuzi.com/chollima
82
- :return: 千里马公司
83
- :rtype: pandas.DataFrame
84
- """
85
- temp_df = pd.read_csv(
86
- "https://jfds-1252952517.cos.ap-chengdu.myqcloud.com/akshare/data/data_juzi/maxima.csv",
87
- index_col=0,
88
- )
89
- temp_df.reset_index(drop=True, inplace=True)
90
- del temp_df["com_id"]
91
- del temp_df["com_logo_archive"]
92
- del temp_df["com_scope_id"]
93
- del temp_df["invse_year"]
94
- del temp_df["invse_month"]
95
- del temp_df["invse_day"]
96
- del temp_df["invse_similar_money_id"]
97
- del temp_df["invse_guess_particulars"]
98
- del temp_df["invse_detail_money"]
99
- del temp_df["invse_currency_id"]
100
- del temp_df["invse_round_id"]
101
- del temp_df["money"]
102
- del temp_df["invse_money"]
103
- del temp_df["round"]
104
- temp_df.reset_index(inplace=True)
105
- temp_df["index"] = range(1, len(temp_df) + 1)
106
- temp_df.columns = [
107
- "序号",
108
- "公司",
109
- "行业",
110
- "地区",
111
- ]
112
- return temp_df
113
-
114
-
115
- if __name__ == "__main__":
116
- death_company_df = death_company()
117
- print(death_company_df)
118
-
119
- nicorn_company_df = nicorn_company()
120
- print(nicorn_company_df)
121
-
122
- maxima_company_df = maxima_company()
123
- print(maxima_company_df)
@@ -1,170 +0,0 @@
1
- #!/usr/bin/env python
2
- # -*- coding:utf-8 -*-
3
- """
4
- Date: 2021/5/10 17:06
5
- Desc: 提供英为财情-国际大宗商品期货
6
- https://cn.investing.com/commodities/brent-oil-historical-data
7
- """
8
- import re
9
-
10
- import pandas as pd
11
- import requests
12
- from bs4 import BeautifulSoup
13
-
14
- from akshare.index.cons import short_headers, long_headers
15
-
16
-
17
- def get_sector_symbol_name_url() -> dict:
18
- """
19
- 期货所对应板块的 URL
20
- :return: dict
21
- {'能源': '/commodities/energy',
22
- '金属': '/commodities/metals',
23
- '农业': '/commodities/softs',
24
- '商品指数': '/indices/commodities-indices'}
25
- """
26
- url = "https://cn.investing.com/commodities/"
27
- res = requests.get(url, headers=short_headers)
28
- soup = BeautifulSoup(res.text, "lxml")
29
- name_url_option_list = soup.find_all(attrs={"class": "linkTitle"}) # 去掉-所有国家及地区
30
- url_list = [item.find("a")["href"] for item in name_url_option_list]
31
- name_list = [item.get_text() for item in name_url_option_list]
32
- name_code_map_dict = {}
33
- name_code_map_dict.update(zip(name_list, url_list))
34
- return name_code_map_dict
35
-
36
-
37
- def futures_global_commodity_name_url_map(sector: str = "能源") -> dict:
38
- """
39
- 参考网页: https://cn.investing.com/commodities/
40
- 获取选择板块对应的: 具体期货品种的 url 地址
41
- :param sector: 板块, 对应 get_global_country_name_url 品种名称
42
- :type sector: str
43
- :return: dict of name-url
44
- :rtype: dict
45
- {'伦敦布伦特原油': '/commodities/brent-oil',
46
- 'WTI原油': '/commodities/crude-oil',
47
- '伦敦汽油': '/commodities/london-gas-oil',
48
- '天然气': '/commodities/natural-gas?cid=49787',
49
- '燃料油': '/commodities/heating-oil',
50
- '碳排放': '/commodities/carbon-emissions',
51
- 'RBOB汽油': '/commodities/gasoline-rbob',
52
- '布伦特原油': '/commodities/brent-oil?cid=49769',
53
- '原油': '/commodities/crude-oil?cid=49774'}
54
- """
55
- name_url_dict = get_sector_symbol_name_url()
56
- url = f"https://cn.investing.com{name_url_dict[sector]}"
57
- res = requests.post(url, headers=short_headers)
58
- soup = BeautifulSoup(res.text, "lxml")
59
- url_list = [
60
- item.find("a")["href"].split("?")[0]
61
- for item in soup.find_all(attrs={"class": "plusIconTd"})
62
- ]
63
- name_list = [
64
- item.find("a").get_text()
65
- for item in soup.find_all(attrs={"class": "plusIconTd"})
66
- ]
67
- name_code_map_dict = {}
68
- name_code_map_dict.update(zip(name_list, url_list))
69
- return name_code_map_dict
70
-
71
-
72
- def futures_global_commodity_hist(
73
- sector: str = "能源",
74
- symbol: str = "伦敦布伦特原油",
75
- start_date: str = "20000101",
76
- end_date: str = "20191017",
77
- ) -> pd.DataFrame:
78
- """
79
- 国际大宗商品的历史量价数据
80
- https://cn.investing.com/commodities
81
- :param sector: 板块名称; 调用 futures_global_commodity_name_url_map 函数获取
82
- :type sector: str
83
- :param symbol: 品种名称; 通过访问网站查询
84
- :type symbol: str
85
- :param start_date: 开始日期
86
- :type start_date: str
87
- :param end_date: 结束日期
88
- :type end_date: str
89
- :return: 国际大宗商品的历史量价数据
90
- :rtype: pandas.DataFrame
91
- """
92
- start_date = "/".join([start_date[:4], start_date[4:6], start_date[6:]])
93
- end_date = "/".join([end_date[:4], end_date[4:6], end_date[6:]])
94
- name_code_dict = futures_global_commodity_name_url_map(sector)
95
- temp_url = f"https://cn.investing.com/{name_code_dict[symbol]}-historical-data"
96
- res = requests.post(temp_url, headers=short_headers)
97
- soup = BeautifulSoup(res.text, "lxml")
98
- title = soup.find("h2", attrs={"class": "float_lang_base_1"}).get_text()
99
- res = requests.post(temp_url, headers=short_headers)
100
- soup = BeautifulSoup(res.text, "lxml")
101
- data = soup.find_all(text=re.compile("window.histDataExcessInfo"))[0].strip()
102
- para_data = re.findall(r"\d+", data)
103
- payload = {
104
- "curr_id": para_data[0],
105
- "smlID": para_data[1],
106
- "header": title,
107
- "st_date": start_date,
108
- "end_date": end_date,
109
- "interval_sec": "Daily",
110
- "sort_col": "date",
111
- "sort_ord": "DESC",
112
- "action": "historical_data",
113
- }
114
- url = "https://cn.investing.com/instruments/HistoricalDataAjax"
115
- r = requests.post(url, data=payload, headers=long_headers)
116
- temp_df = pd.read_html(r.text)[0]
117
- temp_df["日期"] = pd.to_datetime(temp_df["日期"], format="%Y年%m月%d日")
118
- if any(temp_df["交易量"].astype(str).str.contains("-")):
119
- temp_df["交易量"][temp_df["交易量"].str.contains("-")] = temp_df["交易量"][
120
- temp_df["交易量"].str.contains("-")
121
- ].replace("-", 0)
122
- if any(temp_df["交易量"].astype(str).str.contains("B")):
123
- temp_df["交易量"][temp_df["交易量"].str.contains("B").fillna(False)] = (
124
- temp_df["交易量"][temp_df["交易量"].str.contains("B").fillna(False)]
125
- .str.replace("B", "")
126
- .astype(float)
127
- * 1000000000
128
- )
129
- if any(temp_df["交易量"].astype(str).str.contains("M")):
130
- temp_df["交易量"][temp_df["交易量"].str.contains("M").fillna(False)] = (
131
- temp_df["交易量"][temp_df["交易量"].str.contains("M").fillna(False)]
132
- .str.replace("M", "")
133
- .astype(float)
134
- * 1000000
135
- )
136
- if any(temp_df["交易量"].astype(str).str.contains("K")):
137
- temp_df["交易量"][temp_df["交易量"].str.contains("K").fillna(False)] = (
138
- temp_df["交易量"][temp_df["交易量"].str.contains("K").fillna(False)]
139
- .str.replace("K", "")
140
- .astype(float)
141
- * 1000
142
- )
143
- temp_df["交易量"] = temp_df["交易量"].astype(float)
144
- temp_df["涨跌幅"] = pd.DataFrame(
145
- round(temp_df["涨跌幅"].str.replace("%", "").astype(float) / 100, 6)
146
- )
147
- temp_df.name = title
148
- temp_df.columns.name = None
149
- temp_df.sort_values(["日期"], ascending=False, inplace=True)
150
- return temp_df
151
-
152
-
153
- if __name__ == "__main__":
154
- temp_dict = futures_global_commodity_name_url_map(sector="能源")
155
- print(temp_dict)
156
-
157
- futures_global_commodity_hist_df = futures_global_commodity_hist(
158
- sector="能源", symbol="伦敦布伦特原油", start_date="19700101", end_date="20210510"
159
- )
160
- print(futures_global_commodity_hist_df)
161
-
162
- # futures_global_commodity_hist_df = futures_global_commodity_hist(
163
- # sector="能源", symbol="伦敦布伦特原油", start_date="1970/01/01", end_date="2021/05/10"
164
- # )
165
- # print(futures_global_commodity_hist_df.to_csv("伦敦布伦特原油_19880627_20080319.csv", encoding="gb2312"))
166
- #
167
- # futures_global_commodity_hist_df = futures_global_commodity_hist(
168
- # sector="能源", symbol="伦敦布伦特原油", start_date="2008/03/19", end_date="2021/05/10"
169
- # )
170
- # print(futures_global_commodity_hist_df.to_csv("伦敦布伦特原油_20080319_20210510.csv", encoding="gb2312"))
@@ -1,54 +0,0 @@
1
- #!/usr/bin/env python
2
- # -*- coding:utf-8 -*-
3
- """
4
- Date: 2023/7/2 16:00
5
- Desc: 百度股市通-期货-新闻
6
- https://gushitong.baidu.com/futures/ab-CJ888
7
- """
8
- import pandas as pd
9
- import requests
10
-
11
-
12
- def futures_news_baidu(symbol: str = "AL") -> pd.DataFrame:
13
- """
14
- 百度股市通-期货-新闻
15
- https://gushitong.baidu.com/futures/ab-CJ888
16
- :param symbol: 期货品种代码;大写
17
- :type symbol: str
18
- :return: 新闻
19
- :rtype: pandas.DataFrame
20
- """
21
- url = "https://finance.pae.baidu.com/vapi/getfuturesnews"
22
- params = {"code": f"{symbol}888", "pn": "0", "rn": "2000", "finClientType": "pc"}
23
- r = requests.get(url, params=params)
24
- data_json = r.json()
25
- temp_df = pd.DataFrame(data_json["Result"])
26
- temp_df.rename(
27
- columns={
28
- "loc": "-",
29
- "provider": "-",
30
- "source": "-",
31
- "publish_time": "发布时间",
32
- "third_url": "新闻链接",
33
- "title": "标题",
34
- "is_self_build": "-",
35
- "news_id": "-",
36
- "locate_url": "-",
37
- },
38
- inplace=True,
39
- )
40
- temp_df = temp_df[
41
- [
42
- "标题",
43
- "发布时间",
44
- "新闻链接",
45
- ]
46
- ]
47
- temp_df["发布时间"] = pd.to_datetime(pd.to_numeric(temp_df["发布时间"]), unit="s").dt.date
48
- temp_df.sort_values(["发布时间"], inplace=True, ignore_index=True)
49
- return temp_df
50
-
51
-
52
- if __name__ == "__main__":
53
- futures_news_baidu_df = futures_news_baidu(symbol="AL")
54
- print(futures_news_baidu_df)