Files
stock/stockapp/src/crawling/stock_selection.py
2024-10-23 12:11:11 +08:00

80 lines
2.3 KiB
Python

# -*- coding:utf-8 -*-
# !/usr/bin/env python
import pandas as pd
import requests
import instock.core.tablestructure as tbs
__author__ = 'myh '
__date__ = '2023/5/9 '
def stock_selection() -> pd.DataFrame:
"""
东方财富网-个股-选股器
https://data.eastmoney.com/xuangu/
:return: 选股器
:rtype: pandas.DataFrame
"""
cols = tbs.TABLE_CN_STOCK_SELECTION['columns']
sty = "" # 初始值 "SECUCODE,SECURITY_CODE,SECURITY_NAME_ABBR,CHANGE_RATE"
for k in cols:
sty = f"{sty},{cols[k]['map']}"
url = "https://data.eastmoney.com/dataapi/xuangu/list"
params = {
"sty": sty[1:],
"filter": "(MARKET+in+(\"上交所主板\",\"深交所主板\",\"深交所创业板\"))(NEW_PRICE>0)",
"p": 1,
"ps": 10000,
"source": "SELECT_SECURITIES",
"client": "WEB"
}
r = requests.get(url, params=params)
data_json = r.json()
data = data_json["result"]["data"]
if not data:
return pd.DataFrame()
temp_df = pd.DataFrame(data)
mask = ~temp_df['CONCEPT'].isna()
temp_df.loc[mask, 'CONCEPT'] = temp_df.loc[mask, 'CONCEPT'].apply(lambda x: ', '.join(x))
mask = ~temp_df['STYLE'].isna()
temp_df.loc[mask, 'STYLE'] = temp_df.loc[mask, 'STYLE'].apply(lambda x: ', '.join(x))
for k in cols:
t = tbs.get_field_type_name(cols[k]["type"])
if t == 'numeric':
temp_df[cols[k]["map"]] = pd.to_numeric(temp_df[cols[k]["map"]], errors="coerce")
elif t == 'datetime':
temp_df[cols[k]["map"]] = pd.to_datetime(temp_df[cols[k]["map"]], errors="coerce").dt.date
return temp_df
def stock_selection_params():
"""
东方财富网-个股-选股器-选股指标
https://data.eastmoney.com/xuangu/
:return: 选股器-选股指标
:rtype: pandas.DataFrame
"""
url = "https://datacenter-web.eastmoney.com/wstock/selection/api/data/get"
params = {
"type": "RPTA_PCNEW_WHOLE",
"sty": "ALL",
"p": 1,
"ps": 50000,
"source": "SELECT_SECURITIES",
"client": "WEB"
}
r = requests.get(url, params=params)
data_json = r.json()
zxzb = data_json["zxzb"] # 指标
print(zxzb)
if __name__ == "__main__":
stock_selection_df = stock_selection()
print(stock_selection)