Files
MoFin/venv/lib/python3.12/site-packages/akshare/stock/stock_profile_em.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

312 lines
11 KiB
Python

#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
Date: 2025/9/11 13:00
Desc: 东方财富-港股-公司概况
https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/CompanyProfile
"""
import pandas as pd
import requests
def stock_hk_security_profile_em(symbol: str = "03900") -> pd.DataFrame:
"""
东方财富-港股-证券资料
https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/CompanyProfile
:param symbol: 股票代码
:type symbol: str
:return: 证券资料
:rtype: pandas.DataFrame
"""
url = "https://datacenter.eastmoney.com/securities/api/data/v1/get"
params = {
"reportName": "RPT_HKF10_INFO_SECURITYINFO",
"columns": "SECUCODE,SECURITY_CODE,SECURITY_NAME_ABBR,SECURITY_TYPE,LISTING_DATE,ISIN_CODE,BOARD,"
"TRADE_UNIT,TRADE_MARKET,GANGGUTONGBIAODISHEN,GANGGUTONGBIAODIHU,PAR_VALUE,"
"ISSUE_PRICE,ISSUE_NUM,YEAR_SETTLE_DAY",
"quoteColumns": "",
"filter": f'(SECUCODE="{symbol}.HK")',
"pageNumber": "1",
"pageSize": "200",
"sortTypes": "",
"sortColumns": "",
"source": "F10",
"client": "PC",
"v": "04748497219912483",
}
r = requests.get(url, params=params)
data_json = r.json()
temp_df = pd.DataFrame(data_json["result"]["data"])
field_mapping = {
"BOARD": "板块",
"GANGGUTONGBIAODIHU": "是否沪港通标的",
"GANGGUTONGBIAODISHEN": "是否深港通标的",
"ISIN_CODE": "ISIN(国际证券识别编码)",
"ISSUE_NUM": "发行量(股)",
"ISSUE_PRICE": "发行价",
"LISTING_DATE": "上市日期",
"PAR_VALUE": "每股面值",
"SECUCODE": "证券代码",
"SECURITY_NAME_ABBR": "证券简称",
"SECURITY_TYPE": "证券类型",
"TRADE_MARKET": "交易所",
"TRADE_UNIT": "每手股数",
"YEAR_SETTLE_DAY": "年结日",
}
temp_df.rename(columns=field_mapping, inplace=True)
temp_df = temp_df[
[
"证券代码",
"证券简称",
"上市日期",
"证券类型",
"发行价",
"发行量(股)",
"每手股数",
"每股面值",
"交易所",
"板块",
"年结日",
"ISIN(国际证券识别编码)",
"是否沪港通标的",
"是否深港通标的",
]
]
return temp_df
def stock_hk_company_profile_em(symbol: str = "03900") -> pd.DataFrame:
"""
东方财富-港股-公司资料
https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/CompanyProfile
:param symbol: 股票代码
:type symbol: str
:return: 公司资料
:rtype: pandas.DataFrame
"""
url = "https://datacenter.eastmoney.com/securities/api/data/v1/get"
params = {
"reportName": "RPT_HKF10_INFO_ORGPROFILE",
"columns": "SECUCODE,SECURITY_CODE,ORG_NAME,ORG_EN_ABBR,BELONG_INDUSTRY,FOUND_DATE,CHAIRMAN,"
"SECRETARY,ACCOUNT_FIRM,REG_ADDRESS,ADDRESS,YEAR_SETTLE_DAY,EMP_NUM,ORG_TEL,ORG_FAX,ORG_EMAIL,"
"ORG_WEB,ORG_PROFILE,REG_PLACE",
"quoteColumns": "",
"filter": f'(SECUCODE="{symbol}.HK")',
"pageNumber": "1",
"pageSize": "200",
"sortTypes": "",
"sortColumns": "",
"source": "F10",
"client": "PC",
"v": "04748497219912483",
}
r = requests.get(url, params=params)
data_json = r.json()
temp_df = pd.DataFrame(data_json["result"]["data"])
field_mapping = {
"ACCOUNT_FIRM": "核数师",
"ADDRESS": "办公地址",
"BELONG_INDUSTRY": "所属行业",
"CHAIRMAN": "董事长",
"EMP_NUM": "员工人数",
"FOUND_DATE": "公司成立日期",
"ORG_EMAIL": "E-MAIL",
"ORG_EN_ABBR": "英文名称",
"ORG_FAX": "传真",
"ORG_NAME": "公司名称",
"ORG_PROFILE": "公司介绍",
"ORG_TEL": "联系电话",
"ORG_WEB": "公司网址",
"REG_ADDRESS": "注册地址",
"REG_PLACE": "注册地",
"SECRETARY": "公司秘书",
"SECUCODE": "股票代码",
"SECURITY_CODE": "证券代码",
"YEAR_SETTLE_DAY": "年结日",
}
temp_df.rename(columns=field_mapping, inplace=True)
temp_df = temp_df[
[
"公司名称",
"英文名称",
"注册地",
"注册地址",
"公司成立日期",
"所属行业",
"董事长",
"公司秘书",
"员工人数",
"办公地址",
"公司网址",
"E-MAIL",
"年结日",
"联系电话",
"核数师",
"传真",
"公司介绍",
]
]
return temp_df
def stock_hk_financial_indicator_em(symbol: str = "03900") -> pd.DataFrame:
"""
东方财富-港股-核心必读-最新指标
https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/CoreReading
:param symbol: 股票代码
:type symbol: str
:return: 财务指标
:rtype: pandas.DataFrame
"""
url = "https://datacenter.eastmoney.com/securities/api/data/v1/get"
params = {
"reportName": "RPT_CUSTOM_HKF10_FN_MAININDICATORMAX",
"columns": "ORG_CODE,SECUCODE,SECURITY_CODE,SECURITY_NAME_ABBR,SECURITY_INNER_CODE,REPORT_DATE,BASIC_EPS,"
"PER_NETCASH_OPERATE,BPS,BPS_NEDILUTED,COMMON_ACS,PER_SHARES,ISSUED_COMMON_SHARES,HK_COMMON_SHARES,"
"TOTAL_MARKET_CAP,HKSK_MARKET_CAP,OPERATE_INCOME,OPERATE_INCOME_SQ,OPERATE_INCOME_QOQ,"
"OPERATE_INCOME_QOQ_SQ,HOLDER_PROFIT,HOLDER_PROFIT_SQ,HOLDER_PROFIT_QOQ,HOLDER_PROFIT_QOQ_SQ,PE_TTM,"
"PE_TTM_SQ,PB_TTM,PB_TTM_SQ,NET_PROFIT_RATIO,NET_PROFIT_RATIO_SQ,ROE_AVG,ROE_AVG_SQ,ROA,"
"ROA_SQ,DIVIDEND_TTM,DIVIDEND_LFY,DIVI_RATIO,DIVIDEND_RATE,IS_CNY_CODE",
"quoteColumns": "",
"filter": f'(SECUCODE="{symbol}.HK")',
"pageNumber": "1",
"pageSize": "200",
"sortTypes": "-1",
"sortColumns": "REPORT_DATE",
"source": "F10",
"client": "PC",
"v": "07945646099062258",
}
r = requests.get(url, params=params)
data_json = r.json()
temp_df = pd.DataFrame(data_json["result"]["data"])
field_mapping = {
"SECURITY_CODE": "股票代码",
"BASIC_EPS": "基本每股收益(元)",
"BPS": "每股净资产(元)",
"COMMON_ACS": "法定股本(股)",
"PER_SHARES": "每手股",
"DIVIDEND_TTM": "每股股息TTM(港元)",
"DIVI_RATIO": "派息比率(%)",
"ISSUED_COMMON_SHARES": "已发行股本(股)",
"HK_COMMON_SHARES": "已发行股本-H股(股)",
"PER_NETCASH_OPERATE": "每股经营现金流(元)",
"DIVIDEND_RATE": "股息率TTM(%)",
"TOTAL_MARKET_CAP": "总市值(港元)",
"HKSK_MARKET_CAP": "港股市值(港元)",
"OPERATE_INCOME": "营业总收入",
"OPERATE_INCOME_QOQ": "营业总收入滚动环比增长(%)",
"NET_PROFIT_RATIO": "销售净利率(%)",
"HOLDER_PROFIT": "净利润",
"HOLDER_PROFIT_QOQ": "净利润滚动环比增长(%)",
"ROE_AVG": "股东权益回报率(%)",
"PE_TTM": "市盈率",
"PB_TTM": "市净率",
"ROA": "总资产回报率(%)",
}
temp_df.rename(columns=field_mapping, inplace=True)
temp_df = temp_df[
[
"基本每股收益(元)",
"每股净资产(元)",
"法定股本(股)",
"每手股",
"每股股息TTM(港元)",
"派息比率(%)",
"已发行股本(股)",
"已发行股本-H股(股)",
"每股经营现金流(元)",
"股息率TTM(%)",
"总市值(港元)",
"港股市值(港元)",
"营业总收入",
"营业总收入滚动环比增长(%)",
"销售净利率(%)",
"净利润",
"净利润滚动环比增长(%)",
"股东权益回报率(%)",
"市盈率",
"市净率",
"总资产回报率(%)",
]
]
return temp_df
def stock_hk_dividend_payout_em(symbol: str = "03900") -> pd.DataFrame:
"""
东方财富-港股-核心必读-分红派息
https://emweb.securities.eastmoney.com/PC_HKF10/pages/home/index.html?code=03900&type=web&color=w#/CoreReading
:param symbol: 股票代码
:type symbol: str
:return: 分红派息
:rtype: pandas.DataFrame
"""
url = "https://datacenter.eastmoney.com/securities/api/data/v1/get"
params = {
"reportName": "RPT_HKF10_MAIN_DIVBASIC",
"columns": "SECURITY_CODE,UPDATE_DATE,REPORT_TYPE,EX_DIVIDEND_DATE,DIVIDEND_DATE,"
"TRANSFER_END_DATE,YEAR,PLAN_EXPLAIN,IS_BFP",
"quoteColumns": "",
"filter": f'(SECURITY_CODE="{symbol}")(IS_BFP="0")',
"pageNumber": "1",
"pageSize": "200",
"sortTypes": "-1,-1",
"sortColumns": "NOTICE_DATE,EX_DIVIDEND_DATE",
"source": "F10",
"client": "PC",
"v": "035584639294227527",
}
r = requests.get(url, params=params)
data_json = r.json()
field_mapping = {
"SECURITY_CODE": "股票代码",
"UPDATE_DATE": "最新公告日期",
"REPORT_TYPE": "分配类型",
"EX_DIVIDEND_DATE": "除净日",
"DIVIDEND_DATE": "发放日",
"TRANSFER_END_DATE": "截至过户日",
"YEAR": "财政年度",
"PLAN_EXPLAIN": "分红方案",
"IS_BFP": "IS_BFP",
}
columns = [
"最新公告日期",
"财政年度",
"分红方案",
"分配类型",
"除净日",
"截至过户日",
"发放日",
]
temp_df = pd.DataFrame(columns=columns)
if data_json["result"] is not None:
temp_df = pd.DataFrame(data_json["result"]["data"])
temp_df.rename(columns=field_mapping, inplace=True)
temp_df = temp_df[columns]
temp_df["最新公告日期"] = pd.to_datetime(
temp_df["最新公告日期"], errors="coerce"
).dt.date
temp_df["除净日"] = pd.to_datetime(temp_df["除净日"], errors="coerce").dt.date
temp_df["发放日"] = pd.to_datetime(
temp_df["发放日"], format="%Y/%m/%d", errors="coerce"
).dt.date
return temp_df
if __name__ == "__main__":
stock_hk_security_profile_em_df = stock_hk_security_profile_em(symbol="03900")
print(stock_hk_security_profile_em_df)
stock_hk_company_profile_em_df = stock_hk_company_profile_em(symbol="03900")
print(stock_hk_company_profile_em_df)
stock_hk_financial_indicator_em_df = stock_hk_financial_indicator_em(symbol="03900")
print(stock_hk_financial_indicator_em_df)
stock_hk_dividend_payout_em_df = stock_hk_dividend_payout_em(symbol="03900")
print(stock_hk_dividend_payout_em_df)