今天我在看东方财富官网的数据的时候发现东方财富是千股千评的数据提供了主力参与度信息,这个信息对于我们看股票,分析股票很有帮助,主力参与度越高,股票趋势越强,个股走势强。最近走势强的股票,主力参与度都大于70,这个数据值得我们分析。
我们提供的程序仅仅用于交流学习,坚持爬虫原则
本内容来源自己的微信公众号,数据分析与运用
需要程序的关注下面公众微信号,数据分析与运用,回复千股千评就可以了,直接运行代码
我们看一下数据。我们将数据处理过后,通过主力参与度进行数据排序。
经过对比发现,主力参与度高的股票,走势的很强,主力控盘力度大,市场关注度高,我们随便看应该数据比如天齐锂业。在数据处理中我们构造股票的链接,直接点击就链接到了东方财富数据。
比如我们在看一下通威股份,中环股份等
我们看一下程序的获取,我们提供了全部的数据,还有主力控盘力度,市场参与度,关注度等数据,爬取这个页面的数据。
我们看程序的效果,想学习爬虫的可以看这个文章
我们看程序运行的效果
我们点击全部数据,看一下效果,我加入了进度条。
我们看保存的数据,我构建了股票链接
我们看一下其他数据,比如历史评分。我们输入股票代码比如603260
程序绘制的股票,方便分析
程序代码
import pandas as pd
import json
import jsonpath
import requests
from bs4 import BeautifulSoup
from xml import etree
import tkinter as tk
import akshare as ak
from finta import TA
import matplotlib.pyplot as plt
import mplfinance as mpf
import os
from datetime import datetime
from tqdm import tqdm
import PySimpleGUI as sg
root=tk.Tk()
root.title('东方财富千股千评数据系统')
root.geometry('600x500')
menumode=tk.Menu(root)
stock_pj=tk.Menu(menumode)
menumode.add_cascade(label='东方财富千股千评数据系统',menu=stock_pj)
def plot_kines_figure(df1=None):
'''
df1数据
'''
macd=TA.MACD(df1)
sar=TA.SAR(df1)
df1.rename(columns={'date':'Date','open':'Open','close':'Close','high':'High','low':'Low','volume':'Volume'},inplace=True)
#时间格式转换
plt.rcParams['font.family']='SimHei'
plt.rcParams['axes.unicode_minus']=False
df1['Date']=pd.to_datetime(df1['Date'])
#出现设置索引
df1.set_index(['Date'],inplace=True)
#设置股票颜
mc=mpf.make_marketcolors(up='r',down='g',edge='i',volume='i')
#设置系统
s=mpf.make_mpf_style(marketcolors=mc)
add_plot=[mpf.make_addplot(macd['MACD'],panel=1,title='MACD',color='r'),mpf.make_addplot(macd['SIGNAL'],panel=1,color='y'),
mpf.make_addplot(sar,panel=0,title='SAR',type='scatter')]
#绘制股票图,5,10,20日均线
mpf.plot(df1,type='candle',style=s,addplot=add_plot,volume=True)
plt.show()
def get_all_stock_data():
data=pd.DataFrame()
for i in tqdm(range(1,11)):
url='https://datacenter-web.eastmoney.com/api/data/v1/get'
params={
'callback':'jQuery112307356860297982217_1656654358932',
'sortColumns':'SECURITY_CODE',
'sortTypes':'1',
#获取全部数据500
'pageSize':'500',
'pageNumber':'{}'.format(i),
'reportName':'RPT_DMSK_TS_STOCKNEW',
'quoteColumns':'f2~01~SECURITY_CODE~CLOSE_PRICE,f8~01~SECURITY_CODE~TURNOVERRATE,f3~01~SECURITY_CODE~CHANGE_RATE,f9~01~SECURITY_CODE~PE_DYNAMIC',
'quoteType':'0',
'columns':'ALL',
'filter':'' ,
'token':'894050c76af8597a853f5b408b759f5d'
}
res=requests.get(url=url,params=params)
text=res.text[42:len(res.text)-2]
json_text=json.loads(text)
df=pd.DataFrame(json_text['result']['data'])
columns=['股票市场代码','股票代码','股票类型代码','交易日期','股票名称','市值','流通股','非流通股',
'收盘价','涨跌幅','市场交易代码','换手率%','主力成本','市盈率','20日收盘价','60日收盘价',
'机构参与度','类型','主力流入','主力流出','买卖比例','主力买卖比例','比例','30日比例','50日比例',
'综合评分','上升位数','目前排名','关注指数','市场类型代码']
df.columns=columns
#选择一些主要的数据
df1=df[['股票代码','交易日期','股票名称','收盘价','涨跌幅','主力成本','机构参与度',
'综合评分','上升位数','目前排名','关注指数']]
#构造股票链接
href_data=[]
for i in df['股票代码']:
href='https://data.eastmoney.com/stockdata/{}.html'.format(i)
href_data.append(href)
df1['股票链接']=href_data
data=pd.concat([data,df1],ignore_index=True)
df_data=data.sort_values(by='机构参与度',ascending=False,ignore_index=True)
print(df_data)
df_data.to_excel(r'C:\Users\Administrator\Desktop\千股千评.xlsx')
#机构参与度
def get_stock_jgcyd () -> pd.DataFrame:
'''
机构参与度
'''
symbol=sg.popup_get_text('输入股票代码比如603260')
url = f"https://data.eastmoney.com/stockcomment/api/{symbol}.json"
r = requests.get(url)
data_json = r.json()
print(data_json)
df = pd.DataFrame([data_json['ApiResults']['zlkp']['jgcyd']['XData'], data_json['ApiResults']['zlkp']['jgcyd']['Ydata']['JGCYD']]).T
df.columns = ['date', 'value']
df['date'] = str(datetime.now().year) + '-' + df['date']
df['date'] = pd.to_datetime(df['date']).dt.date
df.sort_values(['date'], inplace=True)
df.reset_index(inplace=True, drop=True)
df['value'] = pd.to_numeric(df['value'])
print(df)
df.to_excel(r'C:\Users\Administrator\Desktop\千股千评.xlsx')
if symbol[0]=='0':
symbol='sz'+symbol
else:
symbol='sh'+symbol
kline_data=ak.stock_zh_a_daily(symbol=symbol,start_date='20210101')
plot_kines_figure(df1=kline_data)
#历史评分
def get_stock_ls_sore():
'''
历史评分
'''
symbol=sg.popup_get_text('输入股票代码比如603260')
url = f"https://data.eastmoney.com/stockcomment/api/{symbol}.json"
r = requests.get(url)
data = r.json()
df = pd.DataFrame([data['ApiResults']['zhpj']['HistoryScore']['XData'], data['ApiResults']['zhpj']['HistoryScore']['Ydata']['Score'], data['ApiResults']['zhpj']['HistoryScore']['Ydata']['Price']]).T
df.columns = ['日期', '评分', "股价"]
df['日期'] = str(datetime.now().year) + '-' + df['日期']
df['日期'] = pd.to_datetime(df['日期']).dt.date
df.sort_values(['日期'], inplace=True)
df.reset_index(inplace=True, drop=True)
df['评分'] = pd.to_numeric(df['评分'])
df['股价'] = pd.to_numeric(df['股价'])
print(df)
df.to_excel(r'C:\Users\Administrator\Desktop\千股千评.xlsx')
if symbol[0]=='0':
symbol='sz'+symbol
else:
symbol='sh'+symbol
kline_data=ak.stock_zh_a_daily(symbol=symbol,start_date='20210101')
plot_kines_figure(df1=kline_data)
#用户关注
def get_stock_yhgz():
'''
用户关注
'''
symbol=sg.popup_get_text('输入股票代码比如603260')
url = f"https://data.eastmoney.com/stockcomment/api/{symbol}.json"
r = requests.get(url)
data = r.json()
df = pd.DataFrame([data['ApiResults']['scrd']['focus'][1]['XData'], data['ApiResults']['scrd']['focus'][1]['Ydata']['StockFocus'], data['ApiResults']['scrd']['focus'][1]['Ydata']['ClosePrice']]).T
df.columns = ['日期', '用户关注指数', "收盘价"]
df['日期'] = str(datetime.now().year) + '-' + df['日期']
df['日期'] = pd.to_datetime(df['日期']).dt.date
df.sort_values(['日期'], inplace=True)
df.reset_index(inplace=True, drop=True)
df['用户关注指数'] = pd.to_numeric(df['用户关注指数'])
df['收盘价'] = pd.to_numeric(df['收盘价'])
print(df)
df.to_excel(r'C:\Users\Administrator\Desktop\千股千评.xlsx')
if symbol[0]=='0':
symbol='sz'+symbol
else:
symbol='sh'+symbol
kline_data=ak.stock_zh_a_daily(symbol=symbol,start_date='20210101')
plot_kines_figure(df1=kline_data)
#市场参与意愿
def stock_comment_detail_scrd_desire_em():
'''
市场参与意愿
'''
symbol=sg.popup_get_text('输入股票代码比如603260')
url = f"https://data.eastmoney.com/stockcomment/api/{symbol}.json"
r = requests.get(url)
data = r.json()
date_str = data['ApiResults']['scrd']['desire'][0][0]['UpdateTime'].split(" ")[0].replace("/", "-")
df = pd.DataFrame([data['ApiResults']['scrd']['desire'][1]['XData'], data['ApiResults']['scrd']['desire'][1]['Ydata']['MajorPeopleNumChg'], data['ApiResults']['scrd']['desire'][1]['Ydata']['PeopleNumChange'], data['ApiResults']['scrd']['desire'][1]['Ydata']['RetailPeopleNumChg']]).T
df.columns = ['日期时间', '大户', "全部", "散户"]
df['日期时间'] = date_str + ' ' + df['日期时间']
df['日期时间'] = pd.to_datetime(df['日期时间'])
df.sort_values(['日期时间'], inplace=True)
df.reset_index(inplace=True, drop=True)
df['大户'] = pd.to_numeric(df['大户'])
df['全部'] = pd.to_numeric(df['全部'])
df['散户'] = pd.to_numeric(df['散户'])
print(df)
df.to_excel(r'C:\Users\Administrator\Desktop\千股千评.xlsx')
if symbol[0]=='0':
symbol='sz'+symbol
else:
symbol='sh'+symbol
kline_data=ak.stock_zh_a_daily(symbol=symbol,start_date='20210101')
plot_kines_figure(df1=kline_data)
#日度市场参与意愿
def get_stock_rdcyyy():
'''
日度市场参与意愿
'''
symbol=sg.popup_get_text('输入股票代码比如603260')
url = f"https://data.eastmoney.com/stockcomment/api/{symbol}.json"
r = requests.get(url)
data = r.json()
date_str = data['ApiResults']['scrd']['desire'][0][0]['UpdateTime'].split(" ")[0].replace("/", "-")
df = pd.DataFrame([data['ApiResults']['scrd']['desire'][2]['XData'], data['ApiResults']['scrd']['desire'][2]['Ydata']['PeopleNumChg'], data['ApiResults']['scrd']['desire'][2]['Ydata']['TotalPeopleNumChange']]).T
df.columns = ['日期', '当日意愿下降', "五日累计意愿"]
df['日期'] = date_str[:4] + '-' + df['日期']
df['日期'] = pd.to_datetime(df['日期']).dt.date
df.sort_values(['日期'], inplace=True)
df.reset_index(inplace=True, drop=True)
df['当日意愿下降'] = pd.to_numeric(df['当日意愿下降'])
df['五日累计意愿'] = pd.to_numeric(df['五日累计意愿'])
print(df)
df.to_excel(r'C:\Users\Administrator\Desktop\千股千评.xlsx')
if symbol[0]=='0':
symbol='sz'+symbol
else:
symbol='sh'+symbol
kline_data=ak.stock_zh_a_daily(symbol=symbol,start_date='20210101')
plot_kines_figure(df1=kline_data)
#市场成本
def get_stock_sccb():
"""
市场成本
"""
symbol=sg.popup_get_text('输入股票代码比如603260')
url = f"https://data.eastmoney.com/stockcomment/api/{symbol}.json"
r = requests.get(url)
data = r.json()
date_str = data['ApiResults']['scrd']['cost'][0][0]['UpdateDate'].split(" ")[0].replace("/", "-")
df = pd.DataFrame([data['ApiResults']['scrd']['cost'][1]['XData'], data['ApiResults']['scrd']['cost'][1]['Ydata']['AvgBuyPrice'], data['ApiResults']['scrd']['cost'][1]['Ydata']['FiveDayAvgBuyPrice']]).T
df.columns = ['日期', '市场成本', "5日市场成本"]
df['日期'] = date_str[:4] + '-' + df['日期']
df['日期'] = pd.to_datetime(df['日期']).dt.date
df.sort_values(['日期'], inplace=True)
df.reset_index(inplace=True, drop=True)
df['市场成本'] = pd.to_numeric(df['市场成本'])
df['5日市场成本'] = pd.to_numeric(df['5日市场成本'])
print(df)
df.to_excel(r'C:\Users\Administrator\Desktop\千股千评.xlsx')
if symbol[0]=='0':
symbol='sz'+symbol
else:
symbol='sh'+symbol
kline_data=ak.stock_zh_a_daily(symbol=symbol,start_date='20210101')
plot_kines_figure(df1=kline_data)
stock_pj.add_command(label='千股千评全部数据',command=get_all_stock_data)
stock_pj.add_command(label='千股千评机构参与度数据',command=get_stock_jgcyd)
stock_pj.add_command(label='千股千评历史评分数据',command=get_stock_ls_sore)
stock_pj.add_command(label='千股千评用户关注数据',command=get_stock_yhgz)
stock_pj.add_command(label='千股千评市场参与意愿',command=stock_comment_detail_scrd_desire_em)
stock_pj.add_command(label='千股千评日度市场参与意愿数据',command=get_stock_rdcyyy)
stock_pj.add_command(label='千股千评市场成本数据',command=get_stock_sccb)
root['menu']=menumode
root.mainloop()