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

116 lines
4.5 KiB
Python

#!/usr/bin/env python
# -*- coding:utf-8 -*-
"""
Date: 2022/1/7 13:40
Desc: 新浪财经-机构推荐池
http://stock.finance.sina.com.cn/stock/go.php/vIR_RatingNewest/index.phtml
"""
import pandas as pd
import requests
from bs4 import BeautifulSoup
def stock_institute_recommend(symbol: str = "投资评级选股") -> pd.DataFrame:
"""
新浪财经-机构推荐池-最新投资评级
http://stock.finance.sina.com.cn/stock/go.php/vIR_RatingNewest/index.phtml
:param symbol: choice of {'最新投资评级', '上调评级股票', '下调评级股票', '股票综合评级', '首次评级股票', '目标涨幅排名', '机构关注度', '行业关注度', '投资评级选股'}
:type symbol: str
:return: 最新投资评级数据
:rtype: pandas.DataFrame
"""
url = "http://stock.finance.sina.com.cn/stock/go.php/vIR_RatingNewest/index.phtml"
params = {
"num": "40",
"p": "1",
}
r = requests.get(url, params=params)
soup = BeautifulSoup(r.text, "lxml")
indicator_map = {
item.find("a").text: item.find("a")["href"]
for item in soup.find(attrs={"id": "leftMenu"}).find_all("dd")[1].find_all("li")
}
url = indicator_map[symbol]
params = {
"num": "10000",
"p": "1",
}
r = requests.get(url, params=params)
if symbol == "股票综合评级":
temp_df = pd.read_html(r.text, header=0)[0].iloc[:, :9]
temp_df["股票代码"] = temp_df["股票代码"].astype(str).str.zfill(6)
temp_df = temp_df.rename(columns={"综合评级↓": "综合评级"})
return temp_df
if symbol == "首次评级股票":
temp_df = pd.read_html(r.text, header=0)[0].iloc[:, :8]
temp_df["股票代码"] = temp_df["股票代码"].astype(str).str.zfill(6)
temp_df = temp_df.rename(columns={"评级日期↓": "评级日期"})
return temp_df
if symbol == "目标涨幅排名":
temp_df = pd.read_html(r.text, header=0)[0].iloc[:, :7]
temp_df["股票代码"] = temp_df["股票代码"].astype(str).str.zfill(6)
temp_df = temp_df.rename(columns={"平均目标涨幅↓": "平均目标涨幅"})
return temp_df
if symbol == "机构关注度":
temp_df = pd.read_html(r.text, header=0)[0].iloc[:, :11]
temp_df["股票代码"] = temp_df["股票代码"].astype(str).str.zfill(6)
temp_df = temp_df.rename(columns={"关注度↓": "关注度"})
return temp_df
if symbol == "行业关注度":
temp_df = pd.read_html(r.text, header=0)[0].iloc[:, :11]
temp_df = temp_df.rename(columns={"关注度↓": "关注度"})
return temp_df
if symbol == "投资评级选股":
temp_df = pd.read_html(r.text, header=0)[0].iloc[:, :9]
temp_df["股票代码"] = temp_df["股票代码"].astype(str).str.zfill(6)
del temp_df["评级明细"]
temp_df = temp_df.rename(columns={"评级日期↓": "评级日期"})
return temp_df
temp_df = pd.read_html(r.text, header=0)[0].iloc[:, :8]
temp_df["股票代码"] = temp_df["股票代码"].astype(str).str.zfill(6)
temp_df = temp_df.rename(columns={"评级日期↓": "评级日期"})
return temp_df
def stock_institute_recommend_detail(symbol: str = "000001") -> pd.DataFrame:
"""
新浪财经-机构推荐池-股票评级记录
http://stock.finance.sina.com.cn/stock/go.php/vIR_StockSearch/key/sz000001.phtml
:param symbol: 股票代码
:type symbol: str
:return: 具体股票的股票评级记录
:rtype: pandas.DataFrame
"""
url = f"http://stock.finance.sina.com.cn/stock/go.php/vIR_StockSearch/key/{symbol}.phtml"
params = {
"num": "5000",
"p": "1",
}
r = requests.get(url, params=params)
temp_df = pd.read_html(r.text, header=0)[0].iloc[:, :8]
temp_df["股票代码"] = temp_df["股票代码"].astype(str).str.zfill(6)
temp_df = temp_df.rename(columns={"评级日期↓": "评级日期"})
return temp_df
if __name__ == "__main__":
for item in [
"最新投资评级",
"上调评级股票",
"下调评级股票",
"股票综合评级",
"首次评级股票",
"目标涨幅排名",
"机构关注度",
"行业关注度",
"投资评级选股",
]:
stock_institute_recommend_df = stock_institute_recommend(symbol=item)
print(stock_institute_recommend_df)
stock_institute_recommend_detail_df = stock_institute_recommend_detail(
symbol="002709"
)
print(stock_institute_recommend_detail_df)