fa45d8aa5f
- health_checklist.json: 192.168.1.122→node122
- ocr_client.py: docstring IP→node122
- docs/market-data-requirements.md: IP→node122
- 所有API调用通过ProxyHandler({})绕过系统代理
Privoxy对node122:18003返回500,直连正常
91 lines
2.8 KiB
Python
91 lines
2.8 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding:utf-8 -*-
|
|
"""
|
|
Date: 2025/10/30 17:00
|
|
Desc: 查询期货合约当前时刻的详情
|
|
https://finance.sina.com.cn/futures/quotes/V2101.shtml
|
|
"""
|
|
|
|
from io import StringIO
|
|
|
|
import pandas as pd
|
|
import requests
|
|
from bs4 import BeautifulSoup
|
|
|
|
|
|
def futures_contract_detail(symbol: str = "AP2101") -> pd.DataFrame:
|
|
"""
|
|
查询期货合约详情
|
|
https://finance.sina.com.cn/futures/quotes/V2101.shtml
|
|
:param symbol: 合约
|
|
:type symbol: str
|
|
:return: 期货合约详情
|
|
:rtype: pandas.DataFrame
|
|
"""
|
|
url = f"https://finance.sina.com.cn/futures/quotes/{symbol}.shtml"
|
|
r = requests.get(url)
|
|
r.encoding = "gb2312"
|
|
temp_df = pd.read_html(StringIO(r.text))[6]
|
|
data_one = temp_df.iloc[:, :2]
|
|
data_one.columns = ["item", "value"]
|
|
data_two = temp_df.iloc[:, 2:4]
|
|
data_two.columns = ["item", "value"]
|
|
data_three = temp_df.iloc[:, 4:]
|
|
data_three.columns = ["item", "value"]
|
|
temp_df = pd.concat(
|
|
objs=[data_one, data_two, data_three], axis=0, ignore_index=True
|
|
)
|
|
return temp_df
|
|
|
|
|
|
def futures_contract_detail_em(symbol: str = "v2602F") -> pd.DataFrame:
|
|
"""
|
|
查询期货合约详情
|
|
https://quote.eastmoney.com/qihuo/v2602F.html
|
|
:param symbol: 合约
|
|
:type symbol: str
|
|
:return: 期货合约详情
|
|
:rtype: pandas.DataFrame
|
|
"""
|
|
url = f"https://quote.eastmoney.com/qihuo/{symbol}.html"
|
|
r = requests.get(url)
|
|
soup = BeautifulSoup(r.text, features="lxml")
|
|
url_text = (
|
|
soup.find(name="div", attrs={"class": "sidertabbox_tsplit"})
|
|
.find(name="div", attrs={"class": "onet"})
|
|
.find("a")["href"]
|
|
)
|
|
inner_symbol = url_text.split("#")[-1].strip("futures_")
|
|
url = f"https://futsse-static.eastmoney.com/redis?msgid={inner_symbol}_info"
|
|
r = requests.get(url)
|
|
data_json = r.json()
|
|
temp_df = pd.DataFrame.from_dict(data_json, orient="index")
|
|
column_mapping = {
|
|
"vname": "交易品种",
|
|
"vcode": "交易代码",
|
|
"jydw": "交易单位",
|
|
"bjdw": "报价单位",
|
|
"market": "上市交易所",
|
|
"zxbddw": "最小变动价格",
|
|
"zdtbfd": "跌涨停板幅度",
|
|
"hyjgyf": "合约交割月份",
|
|
"jysj": "交易时间",
|
|
"zhjyr": "最后交易日",
|
|
"zhjgr": "最后交割日",
|
|
"jgpj": "交割品级",
|
|
"zcjybzj": "最初交易保证金",
|
|
"jgfs": "交割方式",
|
|
}
|
|
temp_df.rename(index=column_mapping, inplace=True)
|
|
temp_df.reset_index(drop=False, inplace=True)
|
|
temp_df.columns = ["item", "value"]
|
|
return temp_df
|
|
|
|
|
|
if __name__ == "__main__":
|
|
futures_contract_detail_df = futures_contract_detail(symbol="V2101")
|
|
print(futures_contract_detail_df)
|
|
|
|
futures_contract_detail_em_df = futures_contract_detail_em(symbol="l2602F")
|
|
print(futures_contract_detail_em_df)
|