当前位置: 首页 > 科技观察

教你用Python快速获取行业板块股票,辅助价值投资!

时间:2023-03-16 22:57:34 科技观察

1。行业板块行业板块和概念股在定义上还是有很大区别的。一般来说,概念板块风险较大。它非常不稳定,因为它是根据某个消息进行的短期炒作。因此,风险较高的行业板块按照股票行业分类,偏向于长线,稳定性较高。实际投资方面,短期内可以根据“市场热点”选股,投资概念股。中长期建议以“行业板块”选股进行投资。2.爬取相关板块及个股列表目标对象:aHR0cDovL3N1bW1hcnkuanJqLmNvbS5jbi9oeWJrLw==2-1板块列表首先,我们使用“ToggleJavaScript”插件发现页面上的行业板块数据来源于如下请求结果http://**/?q=cn|bk|17&n=hqa&c=l&o=pl,d&p=1020&_dc=1650680429759其中参数p和_dc为可变参数,p代表页码(从1)、_dc代表13位时间戳,其他查询参数为固定内容。然后,我们写代码获取响应数据,使用正则表达式匹配行业列表中的数据...self.ps_url='http://**/?q=cn|bk|17&n=hqa&c=l&o=pl,d&p={}050&_dc={}'....def__get_timestramp(self):"""获取13位时间戳:return:"""returnint(round(time.time()*1000))...defget_plates_list(self,plate_keyword):"""获取所有板块:返回:"""plates=[]index=0whileTrue:url=self.ps_url.format(index+1,self.__get_timestramp())#分析数据resp=self.session.get(url,headers=self.headers).textmatch=re.compile(r'HqData:(.*?)};',re.S)result=json.loads(re.findall(match,resp)[0].strip().replace("\n",""))ifnotresult:break#根据关键字,过滤有效platestemp_plate_list=[itemforiteminresultifplate_keywordinitem[2]]index+=1foritemintemp_plate_list:print(item)plates.append({"name":item[2],"plate_path":item[1],"up_or_down":str(item[10])+"%","top_stock":item[-6]})returnplates...最后根据关键词筛选板块,重新组装成一个通过板块名称,板块路径PATH,板块价格涨跌幅,贡献最大的股票名称的列表注:通过分析页面发现,根据板块路径PATH,可以拼装进入一个行业板块个股列表页面URL,例如行业板块PATH为400128925,则该行业板块个股列表对应的页面URL为http://summary.**/hybk/400128925。shtml2-2Industrial个股榜爬取行业个股榜与上一步的数据展示逻辑相同,个股榜数据来自同一个来源下面请求http://**的结果/?q=cn|s|bk{}&c=m&n=hqa&o=pl,d&p={}020&_dc={}其中,bk后面是对应的行业部门PATH,p代表页数,_dc代表13位时间戳...#stockself.stock_url='http://**/?q=cn|s|bk{}&c=m&n=hqa&o=pl,d&p={}020&_dc={}'....defget_stock_list(self,plate_path):"""获取某板块下的所有股票信息包括:股票名称、最新价格、市盈率:paraplate_info::return:"""index=0stocks=[]whileTrue:url=self.stock_url.format(plate_path,index+1,self.__get_timestramp())resp=self.session.get(url,headers=self.headers).textmatch=re.compile(r'HqData:(.*?)};',re.S)result=json.loads(re.findall(match,resp)[0].strip().replace("\n",""))ifnotresult:breakindex+=1foritemminresult:ifitem[-1]<0:continuestocks.append({"stock_name":item[2],"pe":item[-1],"price":item[8],"up_or_down":str(item[12])+"%"})#按市盈率降序排列股票。sort(key=lambdax:x["pe"])returnstocks将响应结果用正则表达式匹配后,得到股票名称、PE市盈率、股价、涨跌幅4个关键数据。最后,将股票列表按PE升序排序,直接返回3。服务化当然我们可以把这部分逻辑服务化给前端使用,从而提升用户体验。例如使用FastAPI可以快速创建两个服务:根据key按word获取行业板块列表,根据板块路径获取个股列表frompydanticimportBaseModel#plateclassPlate(BaseModel):content:str#keyword#板类下的股票PlateStock(BaseModel):plate_path:str#platepath#=============================================================...#获取板块列表@app.post("/xag/plate_list")asyncdefget_plate_list(plate:Plate):pstock=PStock()try:result=pstock.get_plates_list(plate.content)returnsuccess(data=result,message="查询成功!")exceptExceptionase:returnfail()finally:pstock.teardown()#获取所有库存列出某个plate@app.post("/xag/plate_stock_list")asyncdefget_plate_list(plateStock:PlateStock):pstock=PStock()try:result=pstock.get_stock_list(plateStock.plate_path)returnssuccess(data=result,message="查询成功!”)exceptExceptionase:returnfail()finally:pstock.teardown()...前端以Uniapp为例,使用uni-table组件显示行业板块列表和个股列表。部分代码如下://个股列表platestock.vue...提交0">盘子变化强势股{{item.up_or_down}}{{item.top_stock}}...方法:{//表单提交数据提交(ref){this.$refs[ref].validate().then(res=>{this.$http('xag/plate_list',this.baseFormData,{hideLoading:false,hideMsg:false,method:'POST'}).then(res=>{console.log("内容:",res.data)if(res.data&&res.data.length>0){this.$tip.success("查询成功!")this.result=res.data}else{this.$tip.success("查询结果为空,请使用其他关键字查询!")}}).catch(err=>{console.log("发生异常,异常信息:",err)})}).catch(err=>{console.log('err',err);})}...项目最终部署完成后,可在前端页面根据板块名称选择合适的股票进行投资4.综上所述,由于行业板块更适合中长期投资,我们只需要筛选出一个板块基于某个关键词,然后在板块下的个股列表中非常直观的查看投资市盈率低的股票