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,直连正常
87 lines
3.1 KiB
Python
87 lines
3.1 KiB
Python
#!/usr/bin/env python
|
||
# -*- coding:utf-8 -*-
|
||
"""
|
||
Date: 2024/7/5 15:00
|
||
Desc: 九期网-商品期权手续费
|
||
https://www.9qihuo.com/qiquanshouxufei
|
||
"""
|
||
|
||
from functools import lru_cache
|
||
from io import StringIO
|
||
|
||
import pandas as pd
|
||
import requests
|
||
from bs4 import BeautifulSoup
|
||
|
||
|
||
@lru_cache()
|
||
def option_comm_symbol() -> pd.DataFrame:
|
||
import urllib3
|
||
|
||
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
|
||
url = "https://www.9qihuo.com/qiquanshouxufei"
|
||
r = requests.get(url, verify=False)
|
||
soup = BeautifulSoup(r.text, features="lxml")
|
||
name = [
|
||
item.string.strip()
|
||
for item in soup.find(name="div", attrs={"id": "inst_list"}).find_all(name="a")
|
||
]
|
||
code = [
|
||
item["href"].split("?")[1].split("=")[1]
|
||
for item in soup.find(name="div", attrs={"id": "inst_list"}).find_all(name="a")
|
||
]
|
||
temp_df = pd.DataFrame([name, code]).T
|
||
temp_df.columns = ["品种名称", "品种代码"]
|
||
return temp_df
|
||
|
||
|
||
def option_comm_info(symbol: str = "工业硅期权") -> pd.DataFrame:
|
||
"""
|
||
九期网-商品期权手续费
|
||
https://www.9qihuo.com/qiquanshouxufei
|
||
:param symbol: choice of {"所有", "上海期货交易所", "大连商品交易所", "郑州商品交易所", "上海国际能源交易中心", "广州期货交易所"}
|
||
:type symbol: str
|
||
:return: 期权手续费
|
||
:rtype: pandas.DataFrame
|
||
"""
|
||
import urllib3
|
||
|
||
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
|
||
symbol_df = option_comm_symbol()
|
||
symbol_str = symbol_df[symbol_df["品种名称"].str.contains(symbol)][
|
||
"品种代码"
|
||
].values[0]
|
||
params = {"heyue": symbol_str}
|
||
url = "https://www.9qihuo.com/qiquanshouxufei"
|
||
r = requests.get(url, params=params, verify=False)
|
||
temp_df = pd.read_html(StringIO(r.text))[0]
|
||
market_symbol = temp_df.iloc[0, 0]
|
||
columns = temp_df.iloc[2, :]
|
||
temp_df = temp_df.iloc[3:, :]
|
||
temp_df.columns = columns
|
||
temp_df["交易所"] = market_symbol
|
||
temp_df.reset_index(drop=True, inplace=True)
|
||
temp_df.index.name = None
|
||
temp_df.columns.name = None
|
||
temp_df["现价"] = pd.to_numeric(temp_df["现价"], errors="coerce")
|
||
temp_df["成交量"] = pd.to_numeric(temp_df["成交量"], errors="coerce")
|
||
temp_df["每跳毛利/元"] = pd.to_numeric(temp_df["每跳毛利/元"], errors="coerce")
|
||
temp_df["每跳净利/元"] = pd.to_numeric(temp_df["每跳净利/元"], errors="coerce")
|
||
soup = BeautifulSoup(r.text, features="lxml")
|
||
raw_date_text = soup.find(name="a", attrs={"id": "dlink"}).previous
|
||
comm_update_time = raw_date_text.split(",")[0].strip("(手续费更新时间:")
|
||
price_update_time = (
|
||
raw_date_text.split(",")[1].strip("价格更新时间:").strip("。)")
|
||
)
|
||
temp_df["手续费更新时间"] = comm_update_time
|
||
temp_df["价格更新时间"] = price_update_time
|
||
return temp_df
|
||
|
||
|
||
if __name__ == "__main__":
|
||
option_comm_symbol_df = option_comm_symbol()
|
||
print(option_comm_symbol_df)
|
||
|
||
option_comm_info_df = option_comm_info(symbol="工业硅期权")
|
||
print(option_comm_info_df)
|