tushare 1.4.18__py3-none-any.whl → 1.4.20__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.
- tushare/__init__.py +1 -1
- tushare/stock/rtq.py +143 -133
- tushare/util/format_stock_code.py +2 -5
- {tushare-1.4.18.dist-info → tushare-1.4.20.dist-info}/METADATA +9 -1
- {tushare-1.4.18.dist-info → tushare-1.4.20.dist-info}/RECORD +8 -8
- {tushare-1.4.18.dist-info → tushare-1.4.20.dist-info}/LICENSE +0 -0
- {tushare-1.4.18.dist-info → tushare-1.4.20.dist-info}/WHEEL +0 -0
- {tushare-1.4.18.dist-info → tushare-1.4.20.dist-info}/top_level.txt +0 -0
tushare/__init__.py
CHANGED
tushare/stock/rtq.py
CHANGED
@@ -182,7 +182,7 @@ def realtime_list(src: Optional[str] = None, interval: Optional[int] = 3,
|
|
182
182
|
10、最高:HIGH
|
183
183
|
11、最低:LOW
|
184
184
|
12、今开:OPEN
|
185
|
-
13、昨收:
|
185
|
+
13、昨收:PRICE
|
186
186
|
14、量比:VOL_RATIO
|
187
187
|
15、换手率:TURNOVER_RATE
|
188
188
|
16、市盈率-动态:PE
|
@@ -201,7 +201,7 @@ def realtime_list(src: Optional[str] = None, interval: Optional[int] = 3,
|
|
201
201
|
5、涨跌幅:PCT_CHANGE
|
202
202
|
6、买入:BUY
|
203
203
|
7、卖出:SALE
|
204
|
-
8、昨收:
|
204
|
+
8、昨收:CLOSE
|
205
205
|
9、今开:OPEN
|
206
206
|
10、最高:HIGH
|
207
207
|
11、最低:LOW
|
@@ -249,146 +249,155 @@ def get_stock_all_a_dc(page_count: Optional[int] = None,
|
|
249
249
|
22、60日涨跌幅:60DAY
|
250
250
|
23、年初至今涨跌幅:1YEAR
|
251
251
|
"""
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
"
|
276
|
-
|
277
|
-
|
278
|
-
"成交量",
|
279
|
-
"成交额",
|
280
|
-
"振幅",
|
281
|
-
"换手率",
|
282
|
-
"市盈率-动态",
|
283
|
-
"量比",
|
284
|
-
"5分钟涨跌",
|
285
|
-
"代码",
|
286
|
-
"_",
|
287
|
-
"名称",
|
288
|
-
"最高",
|
289
|
-
"最低",
|
290
|
-
"今开",
|
291
|
-
"昨收",
|
292
|
-
"总市值",
|
293
|
-
"流通市值",
|
294
|
-
"涨速",
|
295
|
-
"市净率",
|
296
|
-
"60日涨跌幅",
|
297
|
-
"年初至今涨跌幅",
|
298
|
-
"-",
|
299
|
-
"-",
|
300
|
-
"-",
|
301
|
-
"-",
|
302
|
-
"-",
|
303
|
-
"-",
|
304
|
-
"-",
|
305
|
-
]
|
306
|
-
temp_df.reset_index(inplace=True)
|
307
|
-
# temp_df["index"] = temp_df.index + 1
|
308
|
-
# temp_df.rename(columns={"index": "序号"}, inplace=True)
|
309
|
-
temp_df = temp_df[
|
310
|
-
[
|
311
|
-
# "序号",
|
312
|
-
"代码",
|
313
|
-
"名称",
|
252
|
+
dfs = []
|
253
|
+
for page in range(1,500):
|
254
|
+
url = "http://82.push2.eastmoney.com/api/qt/clist/get"
|
255
|
+
params = {
|
256
|
+
"pn": page,
|
257
|
+
"pz": "200",
|
258
|
+
"po": "1",
|
259
|
+
"np": "1",
|
260
|
+
"ut": "bd1d9ddb04089700cf9c27f6f7426281",
|
261
|
+
"fltt": "2",
|
262
|
+
"invt": "2",
|
263
|
+
"fid": "f3",
|
264
|
+
"fs": "m:0 t:6,m:0 t:80,m:1 t:2,m:1 t:23,m:0 t:81 s:2048",
|
265
|
+
"fields": "f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152",
|
266
|
+
"_": "1623833739532",
|
267
|
+
}
|
268
|
+
if page_count:
|
269
|
+
params["pz"] = 20
|
270
|
+
r = requests.get(url, params=params, proxies=proxies)
|
271
|
+
data_json = r.json()
|
272
|
+
if not data_json["data"]:
|
273
|
+
break
|
274
|
+
# return pd.DataFrame()
|
275
|
+
temp_df = pd.DataFrame(data_json["data"]["diff"])
|
276
|
+
temp_df.columns = [
|
277
|
+
"_",
|
314
278
|
"最新价",
|
315
279
|
"涨跌幅",
|
316
280
|
"涨跌额",
|
317
281
|
"成交量",
|
318
282
|
"成交额",
|
319
283
|
"振幅",
|
284
|
+
"换手率",
|
285
|
+
"市盈率-动态",
|
286
|
+
"量比",
|
287
|
+
"5分钟涨跌",
|
288
|
+
"代码",
|
289
|
+
"_",
|
290
|
+
"名称",
|
320
291
|
"最高",
|
321
292
|
"最低",
|
322
293
|
"今开",
|
323
294
|
"昨收",
|
324
|
-
"量比",
|
325
|
-
"换手率",
|
326
|
-
"市盈率-动态",
|
327
|
-
"市净率",
|
328
295
|
"总市值",
|
329
296
|
"流通市值",
|
330
297
|
"涨速",
|
331
|
-
"
|
298
|
+
"市净率",
|
332
299
|
"60日涨跌幅",
|
333
300
|
"年初至今涨跌幅",
|
301
|
+
"-",
|
302
|
+
"-",
|
303
|
+
"-",
|
304
|
+
"-",
|
305
|
+
"-",
|
306
|
+
"-",
|
307
|
+
"-",
|
308
|
+
]
|
309
|
+
temp_df.reset_index(inplace=True)
|
310
|
+
# temp_df["index"] = temp_df.index + 1
|
311
|
+
# temp_df.rename(columns={"index": "序号"}, inplace=True)
|
312
|
+
temp_df = temp_df[
|
313
|
+
[
|
314
|
+
# "序号",
|
315
|
+
"代码",
|
316
|
+
"名称",
|
317
|
+
"最新价",
|
318
|
+
"涨跌幅",
|
319
|
+
"涨跌额",
|
320
|
+
"成交量",
|
321
|
+
"成交额",
|
322
|
+
"振幅",
|
323
|
+
"最高",
|
324
|
+
"最低",
|
325
|
+
"今开",
|
326
|
+
"昨收",
|
327
|
+
"量比",
|
328
|
+
"换手率",
|
329
|
+
"市盈率-动态",
|
330
|
+
"市净率",
|
331
|
+
"总市值",
|
332
|
+
"流通市值",
|
333
|
+
"涨速",
|
334
|
+
"5分钟涨跌",
|
335
|
+
"60日涨跌幅",
|
336
|
+
"年初至今涨跌幅",
|
337
|
+
]
|
334
338
|
]
|
335
|
-
]
|
336
339
|
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
|
360
|
-
|
361
|
-
|
362
|
-
|
363
|
-
|
364
|
-
|
365
|
-
|
366
|
-
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
385
|
-
|
386
|
-
|
387
|
-
|
388
|
-
|
389
|
-
|
340
|
+
temp_df["代码"] = temp_df["代码"].apply(format_stock_code)
|
341
|
+
temp_df["最新价"] = pd.to_numeric(temp_df["最新价"], errors="coerce")
|
342
|
+
temp_df["涨跌幅"] = pd.to_numeric(temp_df["涨跌幅"], errors="coerce")
|
343
|
+
temp_df["涨跌额"] = pd.to_numeric(temp_df["涨跌额"], errors="coerce")
|
344
|
+
temp_df["成交量"] = pd.to_numeric(temp_df["成交量"], errors="coerce")
|
345
|
+
temp_df["成交额"] = pd.to_numeric(temp_df["成交额"], errors="coerce")
|
346
|
+
temp_df["振幅"] = pd.to_numeric(temp_df["振幅"], errors="coerce")
|
347
|
+
temp_df["最高"] = pd.to_numeric(temp_df["最高"], errors="coerce")
|
348
|
+
temp_df["最低"] = pd.to_numeric(temp_df["最低"], errors="coerce")
|
349
|
+
temp_df["今开"] = pd.to_numeric(temp_df["今开"], errors="coerce")
|
350
|
+
temp_df["昨收"] = pd.to_numeric(temp_df["昨收"], errors="coerce")
|
351
|
+
temp_df["量比"] = pd.to_numeric(temp_df["量比"], errors="coerce")
|
352
|
+
temp_df["换手率"] = pd.to_numeric(temp_df["换手率"], errors="coerce")
|
353
|
+
temp_df["市盈率-动态"] = pd.to_numeric(temp_df["市盈率-动态"], errors="coerce")
|
354
|
+
temp_df["市净率"] = pd.to_numeric(temp_df["市净率"], errors="coerce")
|
355
|
+
temp_df["总市值"] = pd.to_numeric(temp_df["总市值"], errors="coerce")
|
356
|
+
temp_df["流通市值"] = pd.to_numeric(temp_df["流通市值"], errors="coerce")
|
357
|
+
temp_df["涨速"] = pd.to_numeric(temp_df["涨速"], errors="coerce")
|
358
|
+
temp_df["5分钟涨跌"] = pd.to_numeric(temp_df["5分钟涨跌"], errors="coerce")
|
359
|
+
temp_df["60日涨跌幅"] = pd.to_numeric(temp_df["60日涨跌幅"], errors="coerce")
|
360
|
+
temp_df["年初至今涨跌幅"] = pd.to_numeric(temp_df["年初至今涨跌幅"], errors="coerce")
|
361
|
+
temp_df.columns = [
|
362
|
+
# "RANK",
|
363
|
+
"TS_CODE",
|
364
|
+
"NAME",
|
365
|
+
"PRICE",
|
366
|
+
"PCT_CHANGE",
|
367
|
+
"CHANGE",
|
368
|
+
"VOLUME",
|
369
|
+
"AMOUNT",
|
370
|
+
"SWING",
|
371
|
+
"HIGH",
|
372
|
+
"LOW",
|
373
|
+
"OPEN",
|
374
|
+
"CLOSE",
|
375
|
+
"VOL_RATIO",
|
376
|
+
"TURNOVER_RATE",
|
377
|
+
"PE",
|
378
|
+
"PB",
|
379
|
+
"TOTAL_MV",
|
380
|
+
"FLOAT_MV",
|
381
|
+
"RISE",
|
382
|
+
"5MIN",
|
383
|
+
"60DAY",
|
384
|
+
"1YEAR",
|
385
|
+
]
|
386
|
+
# 指定要转换为 float 类型的列
|
387
|
+
cols_to_convert = ['PRICE', 'PCT_CHANGE', 'CHANGE', "VOLUME", "AMOUNT", "SWING",
|
388
|
+
'HIGH', "LOW", "OPEN", "CLOSE", "VOL_RATIO", "TURNOVER_RATE", "PE", "PB", "TOTAL_MV", "FLOAT_MV",
|
389
|
+
"RISE", "5MIN", "60DAY", "1YEAR"
|
390
|
+
]
|
391
|
+
# 使用 to_numeric() 方法将指定的列转换为 float 类型,并将非数值类型的数据转换为 NaN
|
392
|
+
temp_df[cols_to_convert] = temp_df[cols_to_convert].apply(pd.to_numeric, errors='coerce')
|
393
|
+
dfs.append(
|
394
|
+
temp_df
|
395
|
+
)
|
396
|
+
if page_count:
|
397
|
+
break
|
398
|
+
result_df = pd.concat(dfs, ignore_index=True)
|
390
399
|
# 使用 fillna() 方法将 NaN 值替换为 0
|
391
|
-
df_filled =
|
400
|
+
df_filled = result_df.fillna(0)
|
392
401
|
df_sorted = df_filled.sort_values(by='PCT_CHANGE', ascending=False).reset_index(drop=True)
|
393
402
|
return df_sorted
|
394
403
|
|
@@ -420,12 +429,12 @@ def get_stock_all_a_sina(interval: Optional[int] = 3, page_count: Optional[int]
|
|
420
429
|
:rtype: pandas.DataFrame
|
421
430
|
1、代码:TS_CODE
|
422
431
|
2、名称:NAME
|
423
|
-
3、最新价:
|
432
|
+
3、最新价:PRICE
|
424
433
|
4、涨跌额:CHANGE
|
425
434
|
5、涨跌幅:PCT_CHANGE
|
426
435
|
6、买入:BUY
|
427
436
|
7、卖出:SALE
|
428
|
-
8、昨收:
|
437
|
+
8、昨收:CLOSE
|
429
438
|
9、今开:OPEN
|
430
439
|
10、最高:HIGH
|
431
440
|
11、最低:LOW
|
@@ -519,12 +528,12 @@ def get_stock_all_a_sina(interval: Optional[int] = 3, page_count: Optional[int]
|
|
519
528
|
big_df.columns = [
|
520
529
|
"TS_CODE",
|
521
530
|
"NAME",
|
522
|
-
"
|
531
|
+
"PRICE",
|
523
532
|
"CHANGE",
|
524
533
|
"PCT_CHANGE",
|
525
534
|
"BUY",
|
526
535
|
"SALE",
|
527
|
-
"
|
536
|
+
"CLOSE",
|
528
537
|
"OPEN",
|
529
538
|
"HIGH",
|
530
539
|
"LOW",
|
@@ -636,16 +645,17 @@ def format_str_to_float(x):
|
|
636
645
|
|
637
646
|
if __name__ == '__main__':
|
638
647
|
# df = realtime_quote(ts_code="000688.SH,000010.SH,000012.SH,399005.SZ", src="sina")
|
639
|
-
# df = realtime_list(src="
|
640
|
-
|
648
|
+
# df = realtime_list(src="dc", page_count=1)
|
649
|
+
df = realtime_list(src="dc")
|
650
|
+
print(df)
|
641
651
|
# ts_code = '399005.SZ'
|
642
652
|
# ts_code = '000001.SZ'
|
643
653
|
# # ts_code = '836149.BJ'
|
644
654
|
# # ts_code = '600000.SH'
|
645
655
|
# # ts_code = '000001.SH'
|
646
656
|
# # ts_code = '000010.SH'
|
647
|
-
ts_code = '600148.SH'
|
648
|
-
df = realtime_quote(src="dc", ts_code=ts_code)
|
649
|
-
print(df)
|
657
|
+
# ts_code = '600148.SH'
|
658
|
+
# df = realtime_quote(src="dc", ts_code=ts_code)
|
659
|
+
# print(df)
|
650
660
|
|
651
661
|
|
@@ -44,15 +44,12 @@ def format_stock_code(x, special=""):
|
|
44
44
|
return '%s.SZ' % x
|
45
45
|
if not x[0].isdigit():
|
46
46
|
return x.upper()
|
47
|
-
if str(x[0:3]) in ['920']:
|
47
|
+
if str(x[0:3]) in ['920'] or str(x[0]) in ['8', '4']:
|
48
48
|
x = x.zfill(stock_len) if len(x) < stock_len else x
|
49
49
|
return '%s.BJ' % x
|
50
|
-
if str(x[0]) in ['5', '6'
|
50
|
+
if str(x[0]) in ['5', '6'] or str(x[0:3]) in ['900']:
|
51
51
|
x = x.zfill(stock_len) if len(x) < stock_len else x
|
52
52
|
return '%s.SH' % x
|
53
|
-
elif str(x[0]) in ['8', '4']:
|
54
|
-
x = x.zfill(stock_len) if len(x) < stock_len else x
|
55
|
-
return '%s.BJ' % x
|
56
53
|
else:
|
57
54
|
x = x.zfill(stock_len) if len(x) < stock_len else x
|
58
55
|
return '%s.SZ' % x
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: tushare
|
3
|
-
Version: 1.4.
|
3
|
+
Version: 1.4.20
|
4
4
|
Summary: A utility for crawling historical and Real-time Quotes data of China stocks
|
5
5
|
Home-page: https://tushare.pro
|
6
6
|
Author: Jimmy Liu
|
@@ -80,6 +80,14 @@ return::
|
|
80
80
|
|
81
81
|
Log
|
82
82
|
--------------
|
83
|
+
1.4.20
|
84
|
+
-------
|
85
|
+
- 修复 realtime_list 数值对应问题 close->price pre_close->close
|
86
|
+
--------------
|
87
|
+
1.4.19
|
88
|
+
-------
|
89
|
+
- 修复 realtime_list 返回数据不全的问题
|
90
|
+
-------
|
83
91
|
1.4.17
|
84
92
|
-------
|
85
93
|
- 修复 920 开头更改是北交所
|
@@ -1,4 +1,4 @@
|
|
1
|
-
tushare/__init__.py,sha256=
|
1
|
+
tushare/__init__.py,sha256=1-G9qQDj8PWK8k29c1Ue5maW2VSlZG28yARU928j2Ak,4778
|
2
2
|
tushare/bond/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
3
3
|
tushare/bond/bonds.py,sha256=PJM0xDiWZDpOPwDtbEU9PdP0M_Gu0c599YuB1rbZ3r8,232
|
4
4
|
tushare/coins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -35,7 +35,7 @@ tushare/stock/news_vars.py,sha256=CQ18hvyoeScelBCqKgF_rgAufoEALAUT8y_LERvZKHk,45
|
|
35
35
|
tushare/stock/newsevent.py,sha256=STR7C8MjtZlaXTCG0QNaojBuK4-oxP_8hT7ZIvRpbiI,6944
|
36
36
|
tushare/stock/ref_vars.py,sha256=MIxor-2rISl65I32vUzC-z7ZC_QFzG4sxOKDyjLWuU4,4449
|
37
37
|
tushare/stock/reference.py,sha256=x_HZlrP58T-5OTZ7SLdf2Dh9THj1h7cT4wcIp42IHFI,38227
|
38
|
-
tushare/stock/rtq.py,sha256=
|
38
|
+
tushare/stock/rtq.py,sha256=9AFwrtdvj5v6xXY2DO502BdAdvmBu1LMZdPSU6J2V4I,23925
|
39
39
|
tushare/stock/rtq_vars.py,sha256=V6LeJkSP76z8veRfP_mGiQ63V5YBHoTMaqUA5hSBWh4,4200
|
40
40
|
tushare/stock/shibor.py,sha256=Fx9OUZ429kz6l7ZdaYSD6p_X79ud69PDM9EZogm8xCY,6422
|
41
41
|
tushare/stock/trading.py,sha256=3bvM4pexEYW-uGGEL7g6Vkte4sqGC1iYO6dC8mGLSdM,55619
|
@@ -61,7 +61,7 @@ tushare/util/common.py,sha256=KG86VdlhfnOf0j6SE2bBeowC_7Z54RqWpVnudS6KvEU,2581
|
|
61
61
|
tushare/util/conns.py,sha256=mkcxGGD7-13GXMlrwmo4LMecmgWdm63I8KDpvcW53cI,1456
|
62
62
|
tushare/util/dateu.py,sha256=YSvPvOlMY0qvT2IDwFNOHxTLBrPQ9ULGO7ljfu9tK3s,2931
|
63
63
|
tushare/util/form_date.py,sha256=4nnjp6xo40FftsRP9YY1FJoPErxaWVCkjIp_3O1Qy7M,1119
|
64
|
-
tushare/util/format_stock_code.py,sha256=
|
64
|
+
tushare/util/format_stock_code.py,sha256=co-CSYYu7m7B5W2guWeo4AHMu0fov8PRdy5gdGiGzIg,3563
|
65
65
|
tushare/util/formula.py,sha256=XZVK1NTF8BTrCo78EHLzjAM_wLAjxybrN7Q-6HCHmCo,6863
|
66
66
|
tushare/util/mailmerge.py,sha256=y_QkfHvH8nQ7peC8wQs5idB6xW9PYzzrBynzxgo924M,8980
|
67
67
|
tushare/util/netbase.py,sha256=URvOTLJSgO7e6uCmHHD9EeQ2TRvjpxIEF-wQaWx5cKE,942
|
@@ -72,8 +72,8 @@ tushare/util/verify_token.py,sha256=cuV3RErWbOC318NANCYL6K1LKZ3wSAL2yMwZHA7tD3s,
|
|
72
72
|
tushare/util/protobuf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
73
73
|
tushare/util/protobuf/funcs.py,sha256=UCdK8FxTyjPZsNzoEeXqYzqrQXUmRMvW5hua6GPA66A,779
|
74
74
|
tushare/util/protobuf/response_pb2.py,sha256=vJH9ONkDuJlg6y-q1PvuDZoviKrK7hzNtMieQHK45DI,11347
|
75
|
-
tushare-1.4.
|
76
|
-
tushare-1.4.
|
77
|
-
tushare-1.4.
|
78
|
-
tushare-1.4.
|
79
|
-
tushare-1.4.
|
75
|
+
tushare-1.4.20.dist-info/LICENSE,sha256=C2j55UI0Ul-1-wA1-rn7OaY6b3vGl4YukiyvYzHsU9o,1503
|
76
|
+
tushare-1.4.20.dist-info/METADATA,sha256=CynEim02cLXJTw0u1KcZks_yTYH3uB7tYsrY-J0chNs,3216
|
77
|
+
tushare-1.4.20.dist-info/WHEEL,sha256=Wyh-_nZ0DJYolHNn1_hMa4lM7uDedD_RGVwbmTjyItk,91
|
78
|
+
tushare-1.4.20.dist-info/top_level.txt,sha256=HHOxMuqc31KuAIcxpE0t5dAPMKbaiRtjsjTMFd7FlXI,8
|
79
|
+
tushare-1.4.20.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|