Files
MoFin/venv/lib/python3.12/site-packages/akshare/stock_fundamental/stock_notice.py
T
知微 fa45d8aa5f fix: 小果地址统一node122(兼容LAN+EasyTier)
- 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,直连正常
2026-06-30 02:56:35 +08:00

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)