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

145 lines
5.6 KiB
Python

#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
Date: 2023/5/9 17:06
Desc: 新浪行业-板块行情
http://finance.sina.com.cn/stock/sl/
"""
import json
import math
import pandas as pd
import requests
from akshare.utils import demjson
from tqdm import tqdm
def stock_sector_spot(indicator: str = "新浪行业") -> pd.DataFrame:
"""
新浪行业-板块行情
http://finance.sina.com.cn/stock/sl/
:param indicator: choice of {"新浪行业", "启明星行业", "概念", "地域", "行业"}
:type indicator: str
:return: 指定 indicator 的数据
:rtype: pandas.DataFrame
"""
if indicator == "新浪行业":
url = "http://vip.stock.finance.sina.com.cn/q/view/newSinaHy.php"
r = requests.get(url)
if indicator == "启明星行业":
url = "http://biz.finance.sina.com.cn/hq/qmxIndustryHq.php"
r = requests.get(url)
r.encoding = "gb2312"
if indicator == "概念":
url = "http://money.finance.sina.com.cn/q/view/newFLJK.php"
params = {"param": "class"}
r = requests.get(url, params=params)
if indicator == "地域":
url = "http://money.finance.sina.com.cn/q/view/newFLJK.php"
params = {"param": "area"}
r = requests.get(url, params=params)
if indicator == "行业":
url = "http://money.finance.sina.com.cn/q/view/newFLJK.php"
params = {"param": "industry"}
r = requests.get(url, params=params)
text_data = r.text
json_data = json.loads(text_data[text_data.find("{") :])
temp_df = pd.DataFrame([value.split(",") for key, value in json_data.items()])
temp_df.columns = [
"label",
"板块",
"公司家数",
"平均价格",
"涨跌额",
"涨跌幅",
"总成交量",
"总成交额",
"股票代码",
"个股-涨跌幅",
"个股-当前价",
"个股-涨跌额",
"股票名称",
]
temp_df["公司家数"] = pd.to_numeric(temp_df["公司家数"])
temp_df["平均价格"] = pd.to_numeric(temp_df["平均价格"])
temp_df["涨跌额"] = pd.to_numeric(temp_df["涨跌额"])
temp_df["涨跌幅"] = pd.to_numeric(temp_df["涨跌幅"])
temp_df["总成交量"] = pd.to_numeric(temp_df["总成交量"])
temp_df["总成交额"] = pd.to_numeric(temp_df["总成交额"])
temp_df["个股-涨跌幅"] = pd.to_numeric(temp_df["个股-涨跌幅"])
temp_df["个股-当前价"] = pd.to_numeric(temp_df["个股-当前价"])
temp_df["个股-涨跌额"] = pd.to_numeric(temp_df["个股-涨跌额"])
return temp_df
def stock_sector_detail(sector: str = "gn_gfgn") -> pd.DataFrame:
"""
新浪行业-板块行情-成份详情
http://finance.sina.com.cn/stock/sl/#area_1
:param sector: stock_sector_spot 返回的 label 值, choice of {"新浪行业", "概念", "地域", "行业"}; "启明星行业" 无详情
:type sector: str
:return: 指定 sector 的板块详情
:rtype: pandas.DataFrame
"""
url = "http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeStockCount"
params = {"node": sector}
r = requests.get(url, params=params)
total_num = int(r.json())
total_page_num = math.ceil(int(total_num) / 80)
big_df = pd.DataFrame()
url = "http://vip.stock.finance.sina.com.cn/quotes_service/api/json_v2.php/Market_Center.getHQNodeData"
for page in tqdm(range(1, total_page_num + 1), leave=True):
params = {
"page": str(page),
"num": "80",
"sort": "symbol",
"asc": "1",
"node": sector,
"symbol": "",
"_s_r_a": "page",
}
r = requests.get(url, params=params)
data_text = r.text
data_json = demjson.decode(data_text)
temp_df = pd.DataFrame(data_json)
big_df = pd.concat([big_df, temp_df], ignore_index=True)
big_df["trade"] = pd.to_numeric(big_df["trade"], errors="coerce")
big_df["pricechange"] = pd.to_numeric(big_df["pricechange"], errors="coerce")
big_df["changepercent"] = pd.to_numeric(big_df["changepercent"], errors="coerce")
big_df["buy"] = pd.to_numeric(big_df["buy"], errors="coerce")
big_df["sell"] = pd.to_numeric(big_df["sell"], errors="coerce")
big_df["settlement"] = pd.to_numeric(big_df["settlement"], errors="coerce")
big_df["open"] = pd.to_numeric(big_df["open"], errors="coerce")
big_df["high"] = pd.to_numeric(big_df["high"], errors="coerce")
big_df["low"] = pd.to_numeric(big_df["low"], errors="coerce")
big_df["volume"] = pd.to_numeric(big_df["volume"], errors="coerce")
big_df["amount"] = pd.to_numeric(big_df["amount"], errors="coerce")
big_df["per"] = pd.to_numeric(big_df["per"], errors="coerce")
big_df["pb"] = pd.to_numeric(big_df["pb"], errors="coerce")
big_df["mktcap"] = pd.to_numeric(big_df["mktcap"], errors="coerce")
big_df["nmc"] = pd.to_numeric(big_df["nmc"], errors="coerce")
big_df["turnoverratio"] = pd.to_numeric(big_df["turnoverratio"], errors="coerce")
return big_df
if __name__ == "__main__":
stock_industry_sina_df = stock_sector_spot(indicator="新浪行业")
print(stock_industry_sina_df)
stock_industry_con_df = stock_sector_spot(indicator="概念")
print(stock_industry_con_df)
stock_industry_area_df = stock_sector_spot(indicator="地域")
print(stock_industry_area_df)
stock_industry_ind_df = stock_sector_spot(indicator="行业")
print(stock_industry_ind_df)
stock_industry_star_df = stock_sector_spot(indicator="启明星行业")
print(stock_industry_star_df)
stock_sector_detail_df = stock_sector_detail(sector="hangye_ZC27")
print(stock_sector_detail_df)