这篇文章我们就来说说如何基于“行业板块”来辅助我们进行价值投资1.行业板块行业板块和概念股在定义上还是有很大区别的。一般来说,概念板块风险较大,基于某条消息的短期炒作,非常不稳定,所以风险较高的行业板块是按照股票行业分类的,往往着眼于长线,稳定性较高实际投资方面,短线可根据“市场热点”概念,中长期建议按“行业板块”选股进行投资。2.抓取相关板块和个股名单。in的行业部门数据来自如下请求结果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位时间戳:返回:""ReturnInt(Round(Time.time())*1000))...DEFGET_PLES_LIST(Self,Plate_Keyword):"""获取所有部分:"""""""""Plates=[]IndexIndex=0whileTrue:url=self.ps_url.format(index+1,self.__get_timestramp())#解析数据resp=self.session.get(url,headers=self.headers).text匹配=re.compile(r'HqData:(.*?)};',re.S)结果=json.loads(re.findall(match,resp)[0].strip().replace("\n",""))如果不是结果:中断#根据关键关键,temp_plate_list=[IFplate_keywordinitem[2]]intem[2]]index+=1的temp_plate_list中的项目+=1intemp_plate_list:print(item)plates.append({“name”:“name”:item[2],”plate_path”:item[1],“up_or_down”:str(item[10])+“%”,“top_stock”:item[-6]})返回板...最后,通过通过,路径板块,,涨,贡献股票名称组装成组装成:通过个:通过通过:通过分析页面分析分析页面页面页面,根据根据分析页面分析通过通过通过分析分析通过通过组装成组装成组装成一一组装成组装成组装成重新组装成重新组装成名称名称名称名称名称名称名称组装成组装成组装成组装成组装成组装成组装成组装成组装成组装成组装成组装成组装成组装成组装成一925,则行业板块股票列表对应的页面URL为http://summary.**/hybk/400128925.shtml2-2行业股票列表爬取行业股票列表与数据展示逻辑相同上一步,股票列表数据也来自下面请求的结果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):"""获取一个板块下的所有股票信息包括:stockname,latestprice,市盈率:paramplate_info:ex:return:"""=0stocks=[]whileTrue:url=self.stock_url.format(plate_path,index+1,self.__get_timestramp())resp=self.session.get(url,reheaders=self.headers).compile(r'HqData:(.*?)};',re.S)result=json.loads(re.findall(match,resp)[0].strip().replace("\n",""))如果不是结果:breakbreakindex+=1foriteminresult:ifitem[-1]<0:Continuestocks.append({"stock_name":it[2],"pe":item[-1],"price":item[8],"up_or_down":str(item[12])+"%"})#按pe降序排序stocks.sort(key=lambdax:x["pe"])returnstocks将响应结果用正则表达式匹配后,得到股票名称、PE市盈率、价格、涨跌幅4个关键数据最后将个股列表按PE从小到大排序直接返回3.服务化当然我们可以把这部分逻辑服务化到前端使用,以提高用户体验例如使用FastAPI,可以快速创建两个服务:根据关键字获取行业板块列表,根据板块路径获取个股列表frompydanticimportBaseModel#plateclassPlate(BaseModel):content:str#KEYWORDS#个股下盘类PlateStock(BaseModel):plate_path:str#盘路径#==============================================================。..#获取板列表@app.post("/xag/plate_list")asyncdefget_plate_list(plate:Plate):pstock=PStock()try:result=pstock.get_plates_list(plate.content)returnsuccess(data=result,message="querysuccessful!")exceptExceptionase:returnfail()finally:pstock.teardown()#获取某个板块下所有股票的列表@app.post("/xag/plate_stock_list")asyncdefget_plate_list(plateStock:PlateStock):pstock=PStock()try:result=pstock.get_stock_list(plateStock.plate_path)returnsuccess(data=result,exceptionasmessage="Querysuccess!"):返回fail()finally:pstock.teardown()...前端以Uniapp为例,使用uni-table组件展示行业板块和个股列表。部分代码如下://个股列表platestock.vue...
