教你用 Python 快速获取行业板块股,辅助价值投资!
大家好,我是菜鸟哥!
本篇文章,我们来聊聊如何根据「 行业板块 」辅助我们进行价值投资。
# 1. 行业板块
行业板块与概念股在定义上还是有很大区别的。
一般来说,概念板块的风险更大,基于某个消息被短期炒作,很不稳定,因此风险更大
行业板块是按股票行业进行分类,往往注重于长期,稳定性更高。
在实际投资上,短期可以根据按「 市场热点 」从概念股进行选股投资,中长期还是建议按「 行业板块 」选股进行投资。
# 2. 爬取相关板块及个股列表
目标对象:
aHR0cDovL3N1bW1hcnkuanJqLmNvbS5jbi9oeWJrLw==
2-1 板块列表
首先,我们使用 「 Toggle JavaScript 」插件发现页面中的行业板块数据来源于下面的请求结果
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:"""return int(round(time.time() * 1000))
...def get_plates_list(self, plate_keyword):"""获取所有板块:return:"""plates = []index = 0while True: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", ""))if not result:break# 根据关键字,过滤有效板块temp_plate_list = [item for item in result if plate_keyword in item[2]]index += 1for item in temp_plate_list:print(item)plates.append({"name": item[2],"plate_path": item[1],"up_or_down": str(item[10]) + "%","top_stock": item[-6]})return plates
...
最后,根据关键字对板块进行一次筛选,通过板块名、板块路径 PATH、板块涨跌幅、最大贡献股票名称重新组装成一个列表
注意:通过分析页面发现,根据板块路径 PATH 可以组装成行业板块个股列表页面 URL
比如,行业板块 PATH 为 400128925,那么行业板块对应个股列表的页面 URL 为
http://summary.**/hybk/400128925.shtml
2-2 行业个股列表
爬取行业个股列表和上一步数据展示逻辑一样,个股列表数据同样来源于下面请求的结果
http://**/?q=cn|s|bk{}&c=m&n=hqa&o=pl,d&p={}020&_dc={}
其中,bk 后面对应行业板块 PATH,p 代表页码数,_dc 代表 13 位的时间戳
...
# 个股
self.stock_url = 'http://**/?q=cn|s|bk{}&c=m&n=hqa&o=pl,d&p={}020&_dc={}'
....def get_stock_list(self, plate_path):"""获取某一个板块下所有的个股信息包含:股票名称、最新价格、涨跌幅、市盈率:param plate_info::return:"""index = 0stocks = []while True: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", ""))if not result:breakindex += 1for item in result:if item[-1] < 0:continuestocks.append({"stock_name": item[2],"pe": item[-1],"price": item[8],"up_or_down": str(item[12]) + "%"})# 按pe降序排列stocks.sort(key=lambda x: x["pe"])return stocks
通过正则表达式对响应结果进行匹配后,获取个股的名称、PE 市盈率、价格、涨跌幅 4 个关键数据
最后,对个股列表按 PE 进行升序排列后直接返回
# 3. 服务化
当然,我们可以将这部分逻辑服务化供前端使用,以此提升用户的体验性
比如,使用 FastAPI 可以快速创建两个服务:根据关键字获取行业板块列表、根据板块路径获取个股列表
from pydantic import BaseModel# 板块
class Plate(BaseModel):content: str # 关键字# 板块下的个股
class PlateStock(BaseModel):plate_path: str # 板块路径#===========================================================
...# 获取板块列表
@app.post("/xag/plate_list")
async def get_plate_list(plate: Plate):pstock = PStock()try:result = pstock.get_plates_list(plate.content)return success(data=result, message="查询成功!")except Exception as e:return fail()finally:pstock.teardown()# 获取某一个板块下的所有股票列表
@app.post("/xag/plate_stock_list")
async def get_plate_list(plateStock: PlateStock):pstock = PStock()try:result = pstock.get_stock_list(plateStock.plate_path)return success(data=result, message="查询成功!")except Exception as e:return fail()finally:pstock.teardown()
...
前端以 Uniapp 为例,使用 uni-table 组件展示行业板块列表及个股列表
部分代码如下:
//个股列表 platestock.vue
...
<view class="box"><uni-forms ref="baseForm" :modelValue="baseFormData" :rules="rules"><uni-forms-item label="关键字" required name="content"><uni-easyinput v-model="baseFormData.content" placeholder="板块关键字" /></uni-forms-item></uni-forms><button type="primary" @click="submit('baseForm')">提交</button><!-- 结果区域 --><view class="result" v-show="result.length>0"><uni-table ref="table" border stripe emptyText="暂无数据"><uni-tr class="uni-item"><uni-th align="center" class="uni-th" width="100%">板块</uni-th><uni-th align="center" class="uni-th" width="100%">涨跌幅</uni-th><uni-th align="center" class="uni-th" width="100%">强势股</uni-th></uni-tr><uni-tr class="uni-item" v-for="(item, index) in result" :key="index" @row-click="rowclick(item)"><uni-td class="uni-th" align="center">{{ item.name }}</uni-td><uni-td align="center" class="uni-th">{{ item.up_or_down }}</uni-td><uni-td align="center" class="uni-th">{{ item.top_stock }}</uni-td></uni-tr></uni-table></view></view>
...
methods: {//表单提交数据submit(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. 总结一下
由于行业板块更适用于中长期投资,我们只需要根据某一个关键字筛选出一个板块,然后在板块下的个股列表中可以非常直观地看出市盈率较低的个股进行投资即可。
需要源码的同学,请在后台输入:小助手,找他领取(暗号:行业板块)
这是我开发的机器人公众号小号,目前增加了天气查询,955公司名单,关注时间查询;后面还会增加图片功能和每日送书抽奖送书活动,以及调戏功能,欢迎来体验,捧场。
全新机器人公众号上线啦,欢迎调戏!
推荐阅读:
入门: 最全的零基础学Python的问题 | 零基础学了8个月的Python | 实战项目 |学Python就是这条捷径
干货:爬取豆瓣短评,电影《后来的我们》 | 38年NBA最佳球员分析 | 从万众期待到口碑扑街!唐探3令人失望 | 笑看新倚天屠龙记 | 灯谜答题王 |用Python做个海量小姐姐素描图 |碟中谍这么火,我用机器学习做个迷你推荐系统电影
趣味:弹球游戏 | 九宫格 | 漂亮的花 | 两百行Python《天天酷跑》游戏!
AI: 会做诗的机器人 | 给图片上色 | 预测收入 | 碟中谍这么火,我用机器学习做个迷你推荐系统电影
小工具: Pdf转Word,轻松搞定表格和水印! | 一键把html网页保存为pdf!| 再见PDF提取收费! | 用90行代码打造最强PDF转换器,word、PPT、excel、markdown、html一键转换 | 制作一款钉钉低价机票提示器! |60行代码做了一个语音壁纸切换器天天看小姐姐!|
年度爆款文案
1).卧槽!Pdf转Word用Python轻松搞定!
2).学Python真香!我用100行代码做了个网站,帮人PS旅行图片,赚个鸡腿吃
3).首播过亿,火爆全网,我分析了《乘风破浪的姐姐》,发现了这些秘密
4).80行代码!用Python做一个哆来A梦分身
5).你必须掌握的20个python代码,短小精悍,用处无穷
6).30个Python奇淫技巧集
7).我总结的80页《菜鸟学Python精选干货.pdf》,都是干货
8).再见Python!我要学Go了!2500字深度分析!
9).发现一个舔狗福利!这个Python爬虫神器太爽了,自动下载妹子图片
点阅读原文,看B站我的视频!
教你用 Python 快速获取行业板块股,辅助价值投资!相关推荐
- 教你用 Python 快速获取行业板块股,辅助价值投资
1. 行业板块 行业板块与概念股在定义上还是有很大区别的. 一般来说,概念板块的风险更大,基于某个消息被短期炒作,很不稳定,因此风险更大 行业板块是按股票行业进行分类,往往注重于长期,稳定性更高. 在 ...
- 用 Python 快速获取基金持仓增减情况 | 更新版
来源:Python数据之道 (ID:PyDataLab) 作者:阳哥 01写在前面 大家好,我是阳哥. 大家知道,在财经领域,Python是有着广泛的用途的.2021年,量化基金开始成为弄潮儿.有不少 ...
- 使用Python快速获取公众号文章定制电子书(二)
原文链接 我的GitHub博客地址 接上篇文章使用Python快速获取公众号文章定制电子书(一).我们现在已经成功的将公众号历史消息的前十条文章给爬取了出来,使用 content_url 这个关键字段 ...
- Python快速获取桌面路径
python 快速获取桌面路径 import os desk = os.path.join(os.path.expanduser("~"), 'Desktop') + '\\'输出 ...
- 用 Python 快速获取基金持仓增值与减持情况
来源:Python数据之道 (ID:PyDataLab) 作者:阳哥 大家好,我是阳哥. 大家知道,在财经领域,Python是有着广泛的用途的,这不,最近A股成交量明显扩大,有不少消息说是量化类的基金 ...
- 全网谁家热干面销量最高?教你用Python轻松获取
▼ 更多精彩推荐,请关注我们 ▼ 作者:Mika 数据:真达 后期:泽龙 [导语]:今天我们聊聊热干面,Python技术部分可以直接看第三部分.公众号后台,回复关键字"热干面" ...
- 教你使用Python爬虫获取电子书资源实战!喜欢学习的小伙伴过来看啦!
最近在学习Python,相对java来说python简单易学.语法简单,工具丰富,开箱即用,适用面广做全栈开发那是极好的,对于小型应用的开发,虽然运行效率慢点,但开发效率极高.大大提高了咱们的生产力. ...
- python高手 百家号_别犹豫,美剧想看就看,手把手教你用Python轻松获取经典美剧地址...
最早一部<越狱>转变了我对美剧的看法.主人公scofield的聪明才智和坚强的毅力,<绝命毒师>里面主人公的中年逆袭,<纸牌屋>里面老谋深算的政客,等等,这些美剧和 ...
- 教你用 Python 快速批量转换 HEIC 文件
点击上方 "AirPython",选择 "加为星标" 第一时间关注 Python 原创干货! 1. 前言 大家好,我是安果! 最近打算做一批日历给亲朋好友,但是 ...
最新文章
- 【ajax+php】动态展示4级单位(省、市、县、镇)
- HDU2855—Fibonacci Check-up
- 【转】使用IIS做HTTP和WebSocket服务的反向代理
- 《C Primer Plus 第五版》读书笔记
- oracle控制文件加载数据,关于SQLLOAD控制文件参数的问题
- agilent3070软件安装
- scheme中文编程
- PHP-文件下载功能总结
- 【问题描述】打印2018年的日历
- detecting current sdk tools version
- radmin配置说明
- 玻纤效应对skew的影响(一)
- Linux系统Word转换PDF,文档字体乱码不显示问题解决
- Codeforces 869 A.The Artful Expedient(博弈论)
- 论文翻译:2021_Acoustic Echo Cancellation with Cross-Domain Learning
- 解决 adb.exe 停止工作小续
- 数据集WordNet-WN11
- 如何在浏览器查看登录密码
- GDKOI 2017 滚粗记
- 如何让提高网站访问速度
热门文章
- 智力题------小白鼠试毒问题
- HBuilderX安装使用教程
- 深入理解java虚拟机第3版 周志明
- lol最克制诺手的英雄_LOL:对线很“无解”的5个英雄,其实他们都有克星,诺手只怕它!...
- 从马王庙里的17包棉花到大型数字化综合医院,探访襄阳市中心医院信息化建设之路...
- 20P60 PR模板预设10 VHS专业预设包制作旧镜头复古磁带效果含背景音乐
- 卡莱特led显示屏调试教程_卡莱特5A接收卡调屏步骤.doc
- 封建制度与奴隶制度的区别
- ker矩阵是什么意思_矩阵形式下的最小二乘法推导
- 香港监管机构收紧加密货币相关法规