搭建自己的金融数据源和量化分析平台(七):定时更新上市公司所属行业门类及大类

本文主要是介绍搭建自己的金融数据源和量化分析平台(七):定时更新上市公司所属行业门类及大类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

0x00 前言

由于此前从深交所下载的股票信息中只有行业门类信息,没有行业大类信息,导致后续解析三大报表和量化选股的时候无法进行:
在这里插入图片描述
可以看到深交所的股票是没有大类信息的。
再看看上交所的保险股:
在这里插入图片描述
因此需要将深交所股票的所属大类信息也添加上。
这里可以直接使用中国上市公司协会每隔一段时间发布的《上市公司行业分类结果》。
目前最新版本是《2023年下半年上市公司行业分类结果》
在这里插入图片描述
具体的解析逻辑不再赘述,分析一下HTML的格式就能把最新的pdf拿到手来解析。
直接上爬虫代码:

import osimport pdfplumber
import requests
from lxml import etree'''中国上市公司协会的爬虫,读取和解析最新上市公司行业分类结果 返回格式为:股票代码:[一级行业代码,二级行业代码]。举例如下
{"stock_code1":[industry,industry_2],"stock_code2":[industry,industry_2]
}
'''
def get_A_industry_list():basic_url = 'https://www.capco.org.cn/pub/zgssgsxh/xhgg/hyfl/hyfljg/index.html'mid_url = 'https://www.capco.org.cn/pub/zgssgsxh/xhgg/hyfl/hyfljg/'cache_file_path = "./corporation_category.pdf"response = requests.get(basic_url)response.encoding = 'UTF-8'href_cut = etree.HTML(response.text).xpath(".//div[@class='fr listCon']/h3/a")response.close()href_mid = etree.tostring(element_or_tree=href_cut[0], encoding='utf-8').decode('utf-8')latest_result = href_mid.split("<a href=\"")[1].split("\">")[0].split("./")[1]response = requests.get(mid_url+latest_result)response.encoding = 'UTF-8'href_cut = etree.HTML(response.text).xpath(".//a[@style='font-size:12px; color:#0066cc;']")response.close()pdf_url_mid = etree.tostring(element_or_tree=href_cut[0], encoding='utf-8').decode('utf-8')pdf_url = pdf_url_mid.split("href=\"")[1].split("\" title=\"")[0]response = requests.get(pdf_url)open(cache_file_path, "wb").write(response.content)response.close()result = {}with pdfplumber.open(cache_file_path) as pdf:for page in pdf.pages:tables = page.extract_tables()for table in tables:for line in table:if line[0].find("上市公司") < 0:result[line[0]] = [line[2], line[2]+line[6]]os.remove(cache_file_path)return result

然后控制器那边这样写:

# 更新上市公司所属行业门类及大类
def update_A_corporation_category():database = "stock_a"select_sql = "SELECT stock_code,industry,industry_2 FROM stock_list"update_sql = "update stock_list set industry=%s,industry_2=%s where stock_code=%s"update_rows = []category = get_A_industry_list()select_result = ExecSelect(database, select_sql)  # 读取查询结果for stock in select_result:if stock[2] is None:try:update_rows.append((category[stock[0]][0], category[stock[0]][1], stock[0]))except KeyError:print(stock[0], "暂无大类分类结果")continue# 更新数据库中存在的股票信息if len(update_rows) > 0:result = ExecInsert(database, update_sql, update_rows)if result == 'success':print("更新上市公司行业分类成功.")else:raise CustomException("更新上市公司行业分类时发生数据库异常:" + result)print("上市公司行业分类更新结束.")

然后深交所的行业就可以补齐了:
在这里插入图片描述

这篇关于搭建自己的金融数据源和量化分析平台(七):定时更新上市公司所属行业门类及大类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1101609

相关文章

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

vite搭建vue3项目的搭建步骤

《vite搭建vue3项目的搭建步骤》本文主要介绍了vite搭建vue3项目的搭建步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学... 目录1.确保Nodejs环境2.使用vite-cli工具3.进入项目安装依赖1.确保Nodejs环境

Nginx搭建前端本地预览环境的完整步骤教学

《Nginx搭建前端本地预览环境的完整步骤教学》这篇文章主要为大家详细介绍了Nginx搭建前端本地预览环境的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录项目目录结构核心配置文件:nginx.conf脚本化操作:nginx.shnpm 脚本集成总结:对前端的意义很多

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

Redis中的AOF原理及分析

《Redis中的AOF原理及分析》Redis的AOF通过记录所有写操作命令实现持久化,支持always/everysec/no三种同步策略,重写机制优化文件体积,与RDB结合可平衡数据安全与恢复效率... 目录开篇:从日记本到AOF一、AOF的基本执行流程1. 命令执行与记录2. AOF重写机制二、AOF的

idea+spring boot创建项目的搭建全过程

《idea+springboot创建项目的搭建全过程》SpringBoot是Spring社区发布的一个开源项目,旨在帮助开发者快速并且更简单的构建项目,:本文主要介绍idea+springb... 目录一.idea四种搭建方式1.Javaidea命名规范2JavaWebTomcat的安装一.明确tomcat

MyBatis Plus大数据量查询慢原因分析及解决

《MyBatisPlus大数据量查询慢原因分析及解决》大数据量查询慢常因全表扫描、分页不当、索引缺失、内存占用高及ORM开销,优化措施包括分页查询、流式读取、SQL优化、批处理、多数据源、结果集二次... 目录大数据量查询慢的常见原因优化方案高级方案配置调优监控与诊断总结大数据量查询慢的常见原因MyBAT

分析 Java Stream 的 peek使用实践与副作用处理方案

《分析JavaStream的peek使用实践与副作用处理方案》StreamAPI的peek操作是中间操作,用于观察元素但不终止流,其副作用风险包括线程安全、顺序混乱及性能问题,合理使用场景有限... 目录一、peek 操作的本质:有状态的中间操作二、副作用的定义与风险场景1. 并行流下的线程安全问题2. 顺

MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决

《MyBatis/MyBatis-Plus同事务循环调用存储过程获取主键重复问题分析及解决》MyBatis默认开启一级缓存,同一事务中循环调用查询方法时会重复使用缓存数据,导致获取的序列主键值均为1,... 目录问题原因解决办法如果是存储过程总结问题myBATis有如下代码获取序列作为主键IdMappe

k8s搭建nfs共享存储实践

《k8s搭建nfs共享存储实践》本文介绍NFS服务端搭建与客户端配置,涵盖安装工具、目录设置及服务启动,随后讲解K8S中NFS动态存储部署,包括创建命名空间、ServiceAccount、RBAC权限... 目录1. NFS搭建1.1 部署NFS服务端1.1.1 下载nfs-utils和rpcbind1.1