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...
