python如何选出A股的强势股票

强势股票指前一个交易日交易最活跃的股票,无论是上涨还是下跌,参与的资金量都很大,其筛选条件:

(个股的流通市值÷该股的成交额)< 5

本文讲解如何用python从某财网站抓取A股全部个股的代码、股票名称、换手率、流通市值和成交额数据,然后在Excel中计算出个股的强势数值。

代码如下:

import time
import datetime
import requests
from bs4 import BeautifulSoup
import re
import random

class EastMoneySpider:
    def __init__(self):
        self.tryMaxTime = 3 #每页抓取可重试的最大次数        

    def start(self):
        now = int(time.time())
        date = time.localtime(now)
        dateStr = time.strftime("%Y-%m-%d %H:%M:%S",date)
        t1 = time.perf_counter()
        flag1 = True #判断这次爬取是否成功
        allstocks_hsl = []
        for index in range(1,11): # 每页500,共10页,              
            thismin_stkhsl = self.request1(index)
            flag1 = thismin_stkhsl[0]
            allstocks_hsl.extend(thismin_stkhsl[1])
            time.sleep(random.randint(3,12)) # 抓取页面之间随机涨停几秒,防止被禁
            print('\n正在抓取第 ',index,' 页......')
        if flag1:            
            print("时间 {0} 爬取成功!\n".format(dateStr))
        else:
            print("时间 {0} 爬取失败!\n".format(dateStr))        
        
        t2 = time.perf_counter()
        print('allstocks_hsl len:',len(allstocks_hsl))
        print('allstocks_hsl[0]:',allstocks_hsl[0])    

        print('\n 把当前抓取到的股票信息写入csv文件....') 
        currentDT = datetime.datetime.today().strftime('%Y%m%d')
        hsl_filename = '.\\work_data\\allstocks_ltsz'+ currentDT + '.csv'
        with open(hsl_filename,'w') as new_file:
            for line in allstocks_hsl:
                x = str(line)+'\n'                
                new_file.write(x)
        
        #stocks_hsl.to_csv('allstocks_hsl.csv',encoding='gbk')
        print(f' 耗时 {round(t2-t1,2)} 秒')
        return allstocks_hsl #stocks_hsl

    def request1(self,page):
        dt = int(round(time.time()*1000))          
        url = "http://92.push2.eastmoney.com/api/qt/clist/get?cb=jQuery112404133306165123496_1630231824618&pn={0}&pz=500&po=1&np=1&ut=bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&fid=f3&fs=m:0+t:6,m:0+t:80,m:1+t:2,m:1+t:23&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152&_=1630231824619".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')             
            #print(soup.text)
            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 singleStr in resStrList:                               
                singleStr_split = singleStr.split(',') 
                thispage_stkmoneydata.append(singleStr_split[11][7:-1]+'-'+singleStr_split[13][7:-1]+'-'+singleStr_split[7][5:]+ \
                    '-'+singleStr_split[4][5:]+'-'+singleStr_split[5][5:]+'-'+singleStr_split[19][6:])
                    # 代码 - 名称 - 换手率 - 成交量 - 成交额 - 流通市值
                i = i + 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__":    
    moneySpider = EastMoneySpider()
    def job():
       latest_stockhsl = moneySpider.start()
       print('\nstock_hsratio len:',len(latest_stockhsl))
       print(len(latest_stockhsl))
    #    print(latest_stockhsl[:50])       
    
    thismin_info = job()    
    

抓取20220314收盘后的数据结果保存为
allstocks_ltsz20220314.csv文件(共4828只股票),格式如下:

301131-N聚赛龙-73.61-87977-694711584.0-923901350
300942-易瑞生物-23.17-248476-936812576.0-4232352223
688076-诺泰生物-27.82-126275-484729968.0-1874001039
300306-远方信息-25.84-392454-544146624.0-2133679787
300624-万兴科技-13.77-154946-650181312.0-4729847965
300636-同和药业-7.58-128200-317913072.0-4325809142
688105-诺唯赞-38.12-125997-1525087456.0-3990630141
301060-兰卫医学-64.8-280305-1205152608.0-1870813350
301089-拓新药业-45.41-124899-2528774464.0-5719687470
300965-恒宇信通-11.55-17328-113635046.0-975000000
601933-永辉超市-3.65-3310063-1355224352.0-38568907220
600355-精伦电子-13.49-663738-223852728.0-1717391308
600853-龙建股份-6.73-675927-243607085.0-3728184736
600448-华纺股份-14.52-914440-336005344.0-2336630946
600545-卓郎智能-1.81-342519-106275364.0-6008459194
002103-广博股份-12.74-537031-302609888.0-2444563190
603778-乾景园林-0.48-30941-15594012.0-3239999996
601696-中银证券-11.14-1617528-2072069888.0-18929962085
002910-庄园牧场-8.91-152444-216422125.0-2475266417
603716-塞力医疗-14.93-300641-486059440.0-3267477889
......

导入Excel中筛选出符合强势股票筛选条件的股票(也可以在python程序中写相应的代码做计算和筛选),如下图:

python如何选出A股的强势股票

注意:图中包括上涨和下跌交易最活跃的股票,需要从中观察上涨过程的股票。

抓取网页url =
http://92.push2.eastmoney.com/api/qt/clist/get?cb=
jQuery112404133306165123496_1630231824618&pn=1&pz=500&po=1&np=1&ut=
bd1d9ddb04089700cf9c27f6f7426281&fltt=2&invt=2&fid=f3&fs=m:0+t:6,m:0+t:80,m:1+t:2,m:1+t:23&fields=f1,f2,f3,f4,f5,f6,f7,f8,f9,f10,f12,f13,f14,f15,f16,f17,f18,f20,f21,f23,f24,f25,f22,f11,f62,f128,f136,f115,f152&_=1630231824619 中的数据规格如下:

{"f1":2,
 "f2":77.3, 今日收盘价
 "f3":157.67, 涨跌比%
 "f4":47.3, 涨跌差值
 "f5":87977,  成交量
 "f6":694711584.0,  成交额
 "f7":43.17,  振幅%
 "f8":73.61,  换手率%
 "f9":57.62,  市盈率	
 "f10":"-",
 "f11":1.7,
 "f12":"301131",  股票代码
 "f13":0,
 "f14":"N聚赛龙",
 "f15":88.03,  最高价
 "f16":75.08,  最低价
 "f17":76.01,  开盘价
 "f18":30.0,	昨收
 "f20":3693394000,  总市值
 "f21":923901350,  流通市值
 "f22":-0.18,
 "f23":4.83,
 "f24":157.67,  涨跌比%
 "f25":157.67,
 "f62":244793452.0,
 "f115":57.62,  市盈率
 "f128":"-",
 "f140":"-",
 "f141":"-",
 "f136":"-",
 "f152":2}

发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/76381
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

(0)
股市刺客的头像股市刺客
上一篇 2024 年 7 月 11 日
下一篇 2024 年 7 月 11 日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注