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,直连正常
195 lines
6.2 KiB
Python
195 lines
6.2 KiB
Python
# -*- coding:utf-8 -*-
|
|
# !/usr/bin/env python
|
|
"""
|
|
Date: 2026/4/8 16:00
|
|
Desc: 东方财富网-数据中心-公告大全-沪深 A 股公告
|
|
https://data.eastmoney.com/notices/hsa/5.html
|
|
"""
|
|
|
|
import math
|
|
|
|
import pandas as pd
|
|
import requests
|
|
|
|
from akshare.utils.tqdm import get_tqdm
|
|
|
|
|
|
def _stock_notice_report(
|
|
security: str = None,
|
|
symbol: str = "全部",
|
|
begin_date: str = None,
|
|
end_date: str = None,
|
|
) -> pd.DataFrame:
|
|
"""
|
|
东方财富网-数据中心-公告大全-沪深京 A 股公告
|
|
https://data.eastmoney.com/notices/hsa/5.html
|
|
:param security: 报告类型; choice of {"全部", "重大事项", "财务报告", "融资公告", "风险提示", "资产重组", "信息变更", "持股变动"}
|
|
:type security: str
|
|
:param symbol: 报告类型; choice of {"全部", "重大事项", "财务报告", "融资公告", "风险提示", "资产重组", "信息变更", "持股变动"}
|
|
:type symbol: str
|
|
:param begin_date: 制定日期
|
|
:type begin_date: str
|
|
:param end_date: 制定日期
|
|
:type end_date: str
|
|
:return: 沪深京 A 股公告
|
|
:rtype: pandas.DataFrame
|
|
"""
|
|
url = "https://np-anotice-stock.eastmoney.com/api/security/ann"
|
|
report_map = {
|
|
"全部": "0",
|
|
"财务报告": "1",
|
|
"融资公告": "2",
|
|
"风险提示": "3",
|
|
"信息变更": "4",
|
|
"重大事项": "5",
|
|
"资产重组": "6",
|
|
"持股变动": "7",
|
|
}
|
|
params = {
|
|
"sr": "-1",
|
|
"page_size": "100",
|
|
"page_index": "1",
|
|
"ann_type": "A",
|
|
"client_source": "web",
|
|
"f_node": report_map[symbol],
|
|
"s_node": "0",
|
|
}
|
|
if security:
|
|
params["stock_list"] = security
|
|
if begin_date:
|
|
params["begin_time"] = begin_date
|
|
if end_date:
|
|
params["end_time"] = end_date
|
|
r = requests.get(url, params=params)
|
|
data_json = r.json()
|
|
total_page = math.ceil(data_json["data"]["total_hits"] / 100)
|
|
big_df = pd.DataFrame()
|
|
tqdm = get_tqdm()
|
|
for page in tqdm(range(1, int(total_page) + 1), leave=False):
|
|
params.update(
|
|
{
|
|
"page_index": page,
|
|
}
|
|
)
|
|
r = requests.get(url, params=params)
|
|
data_json = r.json()
|
|
temp_df = pd.DataFrame(data_json["data"]["list"])
|
|
|
|
temp_code_list = []
|
|
for item in data_json["data"]["list"]:
|
|
if len(item["codes"]) == 1:
|
|
temp_code_list.append(item["codes"][0])
|
|
else:
|
|
for code in item["codes"]:
|
|
if code["ann_type"].startswith("A"):
|
|
temp_code_list.append(code)
|
|
break
|
|
temp_codes_df = pd.DataFrame(temp_code_list)
|
|
|
|
try:
|
|
temp_columns_df = pd.DataFrame(
|
|
[item["columns"][0] for item in data_json["data"]["list"]]
|
|
)
|
|
except: # noqa: E722
|
|
continue
|
|
del temp_df["codes"]
|
|
del temp_df["columns"]
|
|
temp_df = pd.concat(objs=[temp_df, temp_columns_df, temp_codes_df], axis=1)
|
|
big_df = pd.concat(objs=[big_df, temp_df], ignore_index=True)
|
|
|
|
big_df.rename(
|
|
columns={
|
|
"art_code": "编码",
|
|
"display_time": "-",
|
|
"eiTime": "-",
|
|
"notice_date": "公告日期",
|
|
"title": "公告标题",
|
|
"column_code": "-",
|
|
"column_name": "公告类型",
|
|
"ann_type": "-",
|
|
"inner_code": "-",
|
|
"market_code": "-",
|
|
"short_name": "名称",
|
|
"stock_code": "代码",
|
|
},
|
|
inplace=True,
|
|
)
|
|
url = "https://data.eastmoney.com/notices/detail/"
|
|
big_df["网址"] = url + big_df["代码"] + "/" + big_df["编码"] + ".html"
|
|
big_df = big_df[
|
|
[
|
|
"代码",
|
|
"名称",
|
|
"公告标题",
|
|
"公告类型",
|
|
"公告日期",
|
|
"网址",
|
|
]
|
|
]
|
|
big_df["公告日期"] = pd.to_datetime(big_df["公告日期"], errors="coerce").dt.date
|
|
return big_df
|
|
|
|
|
|
def stock_notice_report(symbol: str = "全部", date: str = "20220511") -> pd.DataFrame:
|
|
"""
|
|
东方财富网-数据中心-公告大全-沪深京 A 股公告
|
|
https://data.eastmoney.com/notices/hsa/5.html
|
|
:param symbol: 报告类型; choice of {"全部", "重大事项", "财务报告", "融资公告", "风险提示", "资产重组", "信息变更", "持股变动"}
|
|
:type symbol: str
|
|
:param date: 制定日期
|
|
:type date: str
|
|
:return: 沪深京 A 股公告
|
|
:rtype: pandas.DataFrame
|
|
"""
|
|
return _stock_notice_report(
|
|
symbol=symbol,
|
|
begin_date="-".join([date[:4], date[4:6], date[6:]]),
|
|
end_date="-".join([date[:4], date[4:6], date[6:]]),
|
|
)
|
|
|
|
|
|
def stock_individual_notice_report(
|
|
security: str, symbol: str = "全部", begin_date: str = None, end_date: str = None
|
|
) -> pd.DataFrame:
|
|
"""
|
|
东方财富网-数据中心-公告大全-个股
|
|
https://data.eastmoney.com/notices/stock/300237.html
|
|
:param security: 股票代码
|
|
:type security: str
|
|
:param symbol: 报告类型; choice of {"全部", "重大事项", "财务报告", "融资公告", "风险提示", "资产重组", "信息变更", "持股变动"}
|
|
:type symbol: str
|
|
:param begin_date: 开始日期
|
|
:type begin_date: str
|
|
:param end_date: 结束日期
|
|
:type end_date: str
|
|
:return: 个股公告
|
|
:rtype: pandas.DataFrame
|
|
"""
|
|
return _stock_notice_report(
|
|
security=security, symbol=symbol, begin_date=begin_date, end_date=end_date
|
|
)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
stock_individual_notice_report_df = stock_individual_notice_report(
|
|
security="300237", symbol="财务报告", begin_date="20250101", end_date="20260101"
|
|
)
|
|
print(stock_individual_notice_report_df)
|
|
|
|
stock_notice_report_df = stock_notice_report(symbol="财务报告", date="20240612")
|
|
print(stock_notice_report_df)
|
|
|
|
item_list = [
|
|
"全部",
|
|
"财务报告",
|
|
"融资公告",
|
|
"风险提示",
|
|
"信息变更",
|
|
"重大事项",
|
|
"资产重组",
|
|
"持股变动",
|
|
]
|
|
for temp_item in item_list:
|
|
stock_notice_report_df = stock_notice_report(symbol=temp_item, date="20220511")
|
|
print(stock_notice_report_df)
|