股票的持股股东户数(即股东人数)的变化与一只股票价格走势有着很密切的关系。一般来说,股东人数在增加,说明散户增多,不利于股价上涨;股东人数在减少,说明大多数筹码在主力资金的手中,此时筹码比较集中,后市上涨的概率大。
如何获得一只股票的股东人数,可以在通达信等交易软件中按F10后“股本股东”上查看股东人数的变化,有些证券公司提供的客户端软件可以留言,询问董秘,一般董秘都会回答,投资者可以根据股东人数的变化,分析股票未来的走势。

个股的持股股东人数有以下特点:
- 一只股票的股东人数变化并不是每个交易日结束后都公布,一般公布时间至少相差一个星期,上市公司一个月公布一次算正常;
- 股东人数变化的数据要长期积累,进行分析和比较才有意义,要积累长期数据,就需要记录每个交易日的数据,因为上市公司什么时候公布最新的股东人数并不确定;
- 对于基金或机构来说,买入某只股票一般要至少六个月,才有可能完成一次买卖;
- 流通股数量大的股票和流通股小的股票,股东人数的变化和时间差别很大;
- 分析某只股票最近一波上涨和下跌过程中,股东人数的变化可以为未来可能上涨的时间点提供参考;
- 对于游资炒作的10亿市值左右的小盘股,在一段时间股东人数减少30%以上,可以结合某些财经自媒体的消息,密切关注;
笔者每个交易结束后,都会抓取A股所有股票的股东人数,为日后分析个股的涨跌提供参考。现在把完整的python代码发出来,共同好交流学习!
完整的python代码:
# 抓取个股股东户数信息
import time
import requests
from bs4 import BeautifulSoup
import re
#import pandas as pd
import random
import csv
from pprint import pprint
class EastMoneyScraping:
def __init__(self):
self.tryMaxTime = 3 #每页抓取可重试的最大次数
def start(self):
date = time.localtime(int(time.time()))
dateStr = time.strftime("%Y-%m-%d %H:%M:%S",date)
t1 = time.perf_counter()
flag1 = True #判断这次爬取是否成功
allstocks_holder_info = []
for index in range(1,11): # 每页500,共10页,
thismin_stkomoneyinfo = self.request1(index)
flag1 = thismin_stkomoneyinfo[0]
allstocks_holder_info.extend(thismin_stkomoneyinfo[1])
time.sleep(random.randint(10,30))
print('正在抓取第 ',index,' 页......')
if flag1:
print("时间 {0} 爬取成功!\n".format(dateStr))
else:
print("时间 {0} 爬取失败!\n".format(dateStr))
# info_names = ['col1','col2','col3','col4','col5','col6','col7','col8','col9','col10','col11','col12','col13','col14','col15']
# print(allstocks_holder_info)
# stocks_holdersnum=pd.DataFrame(columns=info_names,data=allstocks_holder_info)
t2 = time.perf_counter()
print(f' 耗时 {round(t2-t1,2)} 秒')
return allstocks_holder_info
def request1(self,page):
dt = int(round(time.time()*1000))
# 股东户数
url = "http://datacenter-web.eastmoney.com/api/data/v1/get?callback=jQuery1123009916465672302577_1629616481931&sortColumns=HOLD_NOTICE_DATE%2CSECURITY_CODE&sortTypes=-1%2C-1&pageSize=500&pageNumber={0}&reportName=RPT_HOLDERNUMLATEST&columns=SECURITY_CODE%2CSECURITY_NAME_ABBR%2CEND_DATE%2CINTERVAL_CHRATE%2CAVG_MARKET_CAP%2CAVG_HOLD_NUM%2CTOTAL_MARKET_CAP%2CTOTAL_A_SHARES%2CHOLD_NOTICE_DATE%2CHOLDER_NUM%2CPRE_HOLDER_NUM%2CHOLDER_NUM_CHANGE%2CHOLDER_NUM_RATIO%2CEND_DATE%2CPRE_END_DATE"eColumns=f2%2Cf3&source=WEB&client=WEB".format(page)
heads = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Safari/537.36"}
try:
resText = requests.get(url)
soup = BeautifulSoup(resText.content, features='lxml')
pattern = re.compile(r'\[{(.*)}\]')
resStr = pattern.search(soup.text).group()
resStr = re.sub(r'\[','',resStr)
resStr = re.sub(r'\]','',resStr)
resStrList = resStr.split('{')
thispage_stkmoneydata = []
i = 0
for i in range(1,len(resStrList)):
if i < len(resStrList)-1 :
singleLine = resStrList[i][0:-2]
else:
singleLine = resStrList[i][0:-1]
tmp_item = re.sub(r'"SECURITY_CODE":','',singleLine)
tmp_item = re.sub(r'"SECURITY_NAME_ABBR":','',tmp_item)
tmp_item = re.sub(r'"END_DATE":','',tmp_item)
tmp_item = re.sub(r'"INTERVAL_CHRATE":','',tmp_item)
tmp_item = re.sub(r'"AVG_MARKET_CAP":','',tmp_item)
tmp_item = re.sub(r'"AVG_HOLD_NUM":','',tmp_item)
tmp_item = re.sub(r'"TOTAL_MARKET_CAP":','',tmp_item)
tmp_item = re.sub(r'"TOTAL_A_SHARES":','',tmp_item)
tmp_item = re.sub(r'"HOLD_NOTICE_DATE":','',tmp_item)
tmp_item = re.sub(r'"HOLDER_NUM":','',tmp_item)
tmp_item = re.sub(r'"PRE_HOLDER_NUM":','',tmp_item)
tmp_item = re.sub(r'"HOLDER_NUM_CHANGE":','',tmp_item)
tmp_item = re.sub(r'"PRE_END_DATE":','',tmp_item)
tmp_item = re.sub(r'"HOLDER_NUM_RATIO":','',tmp_item)
tmp_item = re.sub(r'"f2":','',tmp_item)
tmp_item = re.sub(r'"f3":','',tmp_item)
tmp_item = re.sub(r'"','',tmp_item)
#print(tmp_item)
thispage_stkmoneydata.append(tmp_item.split(','))
i = i + 1
## 抓取每页结果的最后一只股票的股东户数
# print(thispage_stkmoneydata[-1])
# print(thispage_stkmoneydata[-1][0])
# print(thispage_stkmoneydata[-1][-1])
except requests.exceptions.RequestException as e:
if self.tryMaxTime <= 0:
print("本次抓取连接超时")
return False
else:
self.tryMaxTime -= 1
self.request1(page)
return True, thispage_stkmoneydata
if __name__ == "__main__":
moneyScrape = EastMoneyScraping()
thismin_moneyflow = moneyScrape.start()
# print(thismin_moneyflow[-1])
# print(len(thismin_moneyflow[-1]))
# print(type(thismin_moneyflow[-1]))
print('\n示例:(抓取最后一只股票的股东户数信息)')
pprint(thismin_moneyflow[-1])
print(f'\n 本次中抓取 {len(thismin_moneyflow)} 只股票的股东户数信息\n')
# 把爬取的股票户数信息写入csv文件
date = time.localtime(int(time.time()))
dateStr = time.strftime("%Y%m%d",date)
with open('stock_holders'+dateStr+'.csv','w',newline ='',encoding='utf-8') as csv_file:
writer= csv.writer(csv_file)
for item2 in thismin_moneyflow:
tmp_line = item2[0]+','+item2[1]+','+item2[2]+','+item2[3]+','+item2[4]
writer.writerow(item2)
抓取数据结果写入 stock_holders20221215.csv 文件保存,文件名中的日期是运行该程序的日期,格式如下:
688661,和林微纳,2022-12-10 00:00:00,5.99874372,1564747.37619293,23181.4426102657,6066525577.5,89874453,2022-12-15 00:00:00,3877,4139,-262,-6.330031408553,2022-11-30 00:00:00,72.06,2.99
603978,深圳新星,2022-12-09 00:00:00,-3.04761905,208502.810883732,10240.8060355468,3378579547.56,165942021,2022-12-15 00:00:00,16204,16045,159,0.990962916797,2022-11-30 00:00:00,20.08,1.57
601137,博威合金,2022-12-09 00:00:00,-0.53655265,340265.644432957,22944.4129759243,11716366934.76,790044972,2022-12-15 00:00:00,34433,33013,1420,4.301335837397,2022-11-30 00:00:00,14.59,2.96
301312,智立方,2022-12-09 00:00:00,-5.434152,444565.573842567,4545.66026423892,4004202123.6,40942762,2022-12-15 00:00:00,9007,8591,416,4.842276801304,2022-11-18 00:00:00,95.15,0.42
301278,快可电子,2022-12-09 00:00:00,-4.80778053,697259.267037698,6720.57124855613,6640000000,64000000,2022-12-15 00:00:00,9523,11090,-1567,-14.129846708747,2022-10-31 00:00:00,101.42,2.27
301185,鸥玛软件,2022-12-10 00:00:00,2.27416298,156777.816322666,9683.62052641545,2483830944,153417600,2022-12-15 00:00:00,15843,15896,-53,-0.333417211877,2022-11-30 00:00:00,16.2,1.38
301069,凯盛新材,2022-12-09 00:00:00,14.6512443,619334.461649262,18934.1015484336,13759134400,420640000,2022-12-15 00:00:00,22216,21157,1059,5.005435553245,2022-11-30 00:00:00,31.33,0.0
300915,海融科技,2022-12-09 00:00:00,17.69547325,513260.219341974,11216.3509471585,4118400000,90000000,2022-12-15 00:00:00,8024,8497,-473,-5.56667058962,2022-11-18 00:00:00,45.15,-3.55
300894,火星人,2022-12-09 00:00:00,13.17738791,861455.890973036,29674.6776084408,11757150000,405000000,2022-12-15 00:00:00,13648,13747,-99,-0.720157125191,2022-11-30 00:00:00,27.11,-3.18
300743,天地数码,2022-12-09 00:00:00,2.64900662,157198.054602127,12677.2624679135,1714716379.6,138283579,2022-12-15 00:00:00,10908,11003,-95,-0.863400890666,2022-11-30 00:00:00,12.61,3.19
300629,新劲刚,2022-12-09 00:00:00,4.21245421,337844.631998176,11875.0310016934,5187266479.7,182329226,2022-12-15 00:00:00,15354,14329,1025,7.153325423965,2022-11-30 00:00:00,27.73,2.67
300610,晨化股份,2022-12-09 00:00:00,5.08221226,159204.820212766,11323.2446808511,2993050620,212877000,2022-12-15 00:00:00,18800,17100,1700,9.941520467836,2022-11-30 00:00:00,13.47,1.66
.....
601618,中国中冶,2014-09-30 00:00:00,57.44489505,123932.359010335,47666.291927052,42221400000,16239000000,2014-10-30 00:00:00,340681,308639,32042,10.381708079666,2014-06-30 00:00:00,3.33,-1.48
600818,中路股份,2014-09-30 00:00:00,26.15648201,429451.816331699,19441.0057189542,5256490231.9,237957910,2014-10-30 00:00:00,12240,13283,-1043,-7.852141835429,2014-06-30 00:00:00,31.63,0.6
600604,市北高新,2014-09-30 00:00:00,19.4417541,200282.357393787,16138.7878641246,4139035197.9,333524190,2014-10-30 00:00:00,20666,20325,341,1.677736777368,2014-06-30 00:00:00,5.23,0.19
600190,锦州港,2014-09-30 00:00:00,30.6122449,153665.156492554,30012.7258774519,9110960793.6,1779484530,2014-10-28 00:00:00,59291,59738,-447,-0.748267434464,2014-06-30 00:00:00,3.14,-0.95
000020,深华发A,2014-09-30 00:00:00,21.29909366,89030.4828476132,11087.2332313342,1454758089.73,181165391,2014-10-25 00:00:00,16340,17819,-1479,-8.300129075706,2013-09-30 00:00:00,9.95,0.81
601808,中海油服,2014-06-30 00:00:00,4.70705598,527920.764388033,30012.5505621395,52074632120,2960468000,2014-08-27 00:00:00,98641,98164,477,0.485921519091,2014-03-31 00:00:00,16.55,-2.42
600612,老凤祥,2014-06-30 00:00:00,2.38673139,510757.58783887,20180.070637648,8026044735.3,317109630,2014-08-26 00:00:00,15714,15060,654,4.342629482072,2013-09-30 00:00:00,42.31,-1.58
601333,广深铁路,2014-06-30 00:00:00,-3.42205323,41947.8160180686,16514.88819609,14356681980,5652237000,2014-08-22 00:00:00,342251,344734,-2483,-0.720265480051,2014-03-31 00:00:00,2.27,-1.3
600618,氯碱化工,2014-06-30 00:00:00,9.26470588,122791.83244468,16526.4915807106,5571311021.68,749839976,2014-08-22 00:00:00,45372,45718,-346,-0.756813508902,2014-03-31 00:00:00,10.5,0.96
601880,辽港股份,2014-03-31 00:00:00,-5.46875,90515.5299534046,37403.1115509936,8139428000,3363400000,2014-04-30 00:00:00,89923,93271,-3348,-3.589540157176,2013-09-30 00:00:00,1.63,0.0
600685,中船防务,2014-03-11 00:00:00,-7.21466588,131549.09731643,8384.2636912957,6879491593.26,438463454,2014-03-18 00:00:00,52296,54937,-2641,-4.807324753809,2013-12-31 00:00:00,21.62,-0.32
000017,深中华A,2013-06-30 00:00:00,53.47985348,59439.9289306115,14186.1405562319,1269518002.1,302987590,2013-08-24 00:00:00,21358,23944,-2586,-10.800200467758,2011-12-31 00:00:00,4.92,0.2
601992,金隅集团,2013-06-30 00:00:00,-14.67576792,233333.929588228,46666.7859176456,15571773125,3114354625,2013-08-22 00:00:00,66736,76436,-9700,-12.690355329949,2012-09-30 00:00:00,2.61,-1.14
每只股票的数据内容说明如下:
- ‘300337’, 代码
- ‘银邦股份’, 名称
- ‘2022-01-10 00:00:00’, 股东户数统计截止日期
- ‘-8.91959799’, 区间涨跌幅
- ‘205310.088202867’, 户均持股市值
- ‘28318.6328555678’, 户均持股数量
- ‘5958920000’, 总市值-亿
- ‘821920000’, 总股本 – 亿
- ‘2022-01-12 00:00:00’, 公告日期
- ‘29024’, 本次统计股东户数
- ‘30121’, 上次统计股东户数
- ‘-1097’, 两次增减数
- ‘-3.641977357989’, 两次增加比例
- ‘2021-12-31 00:00:00’, 上次股东户数统计截止日期
- ‘8.14’, 最新价
- ‘-0.37’ 涨跌幅
以上代码运行时,每页抓取500只股票,抓取页面之间会随机暂停10-30秒,以防被封禁。
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/76190
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!