当前位置: 首页 > news >正文

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

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("上市公司行业分类更新结束.")

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Web中的Cookie与Session
  • 对象存储服务MinIO
  • Python如何度量字符串长度,代码示例
  • CREO中边界混合命令如何设置影响曲线?
  • NLP从零开始------14.文本中阶序列处理之语言模型(2)
  • 浅析裸土检测算法的实际应用及裸土检测算法源码样本
  • debian12 - 修改SSH端口连接回包
  • RISC-V全志D1sCVBS套件
  • JAVA之MAC详解以及子线程MDC传递
  • 飞书怎么关联任意两段话
  • 中医文化推广者魏玉龙任国家医药卫生行业继续教育培训基地培训中心主任
  • Java自定义异常处理
  • 关于类与构造函数继承的小挑战
  • bhyve安装win10第一篇:如何下载Win10 iso安装光盘
  • Java, 将 csv 中空值用上一行的值填充
  • [译]Python中的类属性与实例属性的区别
  • 【Under-the-hood-ReactJS-Part0】React源码解读
  • 10个最佳ES6特性 ES7与ES8的特性
  • JAVA 学习IO流
  • JavaScript新鲜事·第5期
  • java概述
  • Laravel 菜鸟晋级之路
  • Linux各目录及每个目录的详细介绍
  • magento 货币换算
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • webpack4 一点通
  • 使用agvtool更改app version/build
  • 数据结构java版之冒泡排序及优化
  • 小试R空间处理新库sf
  • 组复制官方翻译九、Group Replication Technical Details
  • ​secrets --- 生成管理密码的安全随机数​
  • #Datawhale AI夏令营第4期#AIGC方向 文生图 Task2
  • #Datawhale AI夏令营第4期#AIGC文生图方向复盘
  • #Linux(make工具和makefile文件以及makefile语法)
  • #考研#计算机文化知识1(局域网及网络互联)
  • $refs 、$nextTic、动态组件、name的使用
  • (02)Hive SQL编译成MapReduce任务的过程
  • (HAL库版)freeRTOS移植STMF103
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (一)UDP基本编程步骤
  • (一)项目实践-利用Appdesigner制作目标跟踪仿真软件
  • (转)四层和七层负载均衡的区别
  • ***检测工具之RKHunter AIDE
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .Net core 6.0 升8.0
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .Net 基于MiniExcel的导入功能接口示例
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .NET/C#⾯试题汇总系列:⾯向对象
  • .NET开源快速、强大、免费的电子表格组件
  • .net专家(高海东的专栏)
  • .sh 的运行