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

python 批量下载财务数据_Python+Wind 批量下载上市公司年报 - Part 1/2

Python+Wind 批量下载上市公司年报 - Part 1/2作者:张捷

目录1.背景介绍

2.安装Python

3.爬取万得上市公司年报3.1Wind下载公告信息

3.2获得年报地址

4.使用Python抓取PDF年报

5.总结

关于我

1. 背景介绍

蚊子正在进行的研究项目涉及到一个数据无法直接从数据库下载,只能手动从公司年报收集。

经过一番查找,蚊子获知目前能获取上市公司年报的网站或数据库有巨潮资讯网、上交所、深交所、Wind万得等。但是他们均不提供年报批量下载。

听说Python可以爬虫下载年报,蚊子做好了花两三周的时间学习Python的准备。没想到不经意间发现了连享会的公众号文章“Python:爬取上市公司公告-Wind-CSMAR”,大大缩短了蚊子的学习时间,半天就能上手了。

以下是实施步骤:

安装Python

Wind下载公告信息

获得年报地址

使用Python抓取PDF年报

2. 安装Python

蚊子安装的是ANACONDA。安装过程中能打钩的都打钩。运行Jupyter Notebook即可运行Python。

3.爬取Wind上市公司年报

3.1 Wind下载公告信息登录Wind

上方菜单点击“新闻”->“公司公告”->“沪深股票”

点击“高级搜索”标题不包含“摘要”,如果不要ST股,也可以加入关键词“ST”

公司类型选择“年度报告”

所属市场选择“全部A股”

公告日期根据自己的研究需求选择

点击“导出列表”,“公告条数”最多输入9999。蚊子需要下载多年年报,所以在“高级搜索”中自定义日期范围分批导出列表。

3.2 获得年报地址

打开下载好的Excel表格,如下图所示,公告标题这一栏针对每个公告都有相对应的链接。

下一步是提取链接地址。Office 2013年之后的版本可以使用Excel里的FORMULATEXT()公式提取“公告标题”一栏单元格内的链接地址。以第一条为例,显示=HYPERLINK("http://news.windin.com/ns/bulletin.php?code=CED3F4D18ADE&id=114447776&type=1", "ST中新:新2019年年度报告(修正版)")。显然逗号左边双引号内是链接网址。

打开该链接,网页上既有年报内容也有年报PDF超链接可下载。

4. 使用Python抓取PDF年报

(以下代码来自连享会)

导入相应的包:

import os

import pandas as pd

import requests

import re

from lxml import etree #解析网页

from urllib.request import urlretrieve #下载网络文件到本地

import time

设置路径

os.chdir(r"C:\Users\Jie\Desktop\WindAR")

data.head()

读入Excel数据,并删除最后一行空值

data = pd.read_excel("公司公告2019.xlsx")[:-1]

data.head()

定义提取公告地址函数

def address(str):

return str.split('"')[1]

data["公告地址"] = data["公告地址"].apply(address)

利用Xpath提取年报PDF链接

def pdf_url(url):

html = requests.get(url).text

tree = etree.HTML(html) #解析网页

url = tree.xpath("//div[2]/a/@href") #获取PDF链接

return "http://news.windin.com/ns/" + url[0]

data["PDF地址"] = data["公告地址"].apply(pdf_url)

下载PDF年报并在PDF文件夹里

for index, row in data.iterrows(): #下载前10个年报

name = row["证券代码"][:6] + "_" + row["公告日期"] + ".pdf" #文件名称

url = row["PDF地址"] #pdf地址

times = 1 #失败后,重新获取次数

while times <= 3: #3次都失败后跳出循环

try:

urlretrieve(url, filename = r"./PDF/" + name)

print(f"成功下载{name}!")

break

except:

times += 1

print(f"休息5秒!再试第{times}次!")

time.sleep(5)

print("成功下载所有PDF文件!")

总结用新的编程语言完成工作不要怕,先在网上找对应的工作是否有现成的代码,如果有的话只用在人家现有的基础上修修改改就行了,不需要从头开始学习这门语言。

2013之前的Office版本没法用Formulatext函数(为这Office版本蚊子还折腾了半天时间)。

Jupyter Notebook 显示Ln[*]的话,要么是Python没连接上,要么是在忙。“利用Xpath提取年报PDF链接”那段代码运行了挺长时间的,蚊子好几次以为程序出错,不断关了重开,结果发现就是任务有些复杂,需要更多时间而已。

下载数千个PDF年报的话,建议睡前运行以上Python代码,醒来之后便能备份开始工作,免得心急等待。

蚊子准备全部下载完之后再检查年报是否齐全,到时写一篇续集。

这是蚊子第一个Markdown文档,希望发在公众号上顺利显示。

特此感谢连享会提供的技术贴和相关资料!关于我蚊子是一名高校基层工作者,“捷思捷悟”是蚊子的自留地,记录研究和教学工作中遇到的问题、解决方案和感悟。

扫码关注公众号

相关文章:

  • 使用qmake 单独生成Qt程序
  • 检测同心圆_负氧离子检测仪的工作原理与选择
  • oracle wrost practics
  • 物联网专科专业必修课程_河南专升本专科专业热度统计
  • FreeXploiT 成立三年感言!
  • springboot如何保证几个insert语句在同一个事务里_dele锁te amp; insert 死
  • 出国申请PS注意事项
  • python分析彩票_重庆青少年编程Python
  • Windows Embedded CE 6.0开发初体验(六)平台定制
  • python做游戏用什么库_Python库之游戏开发及虚拟现实
  • 纪晓岚
  • 浙江大学pta答案python第七章_Pta mooc“Python编程浙江大学”拼图题集第7章问答,PTAMOOCPython,程序设计,拼题,题目,第七章,及,代码,答案...
  • 从要大褂还是内裤看软件设计与开发过程
  • python高维数据存储_使用python实现多维数据降维操作
  • 代码,梦
  • 【刷算法】从上往下打印二叉树
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • 11111111
  • 2017-08-04 前端日报
  • canvas 高仿 Apple Watch 表盘
  • DataBase in Android
  • es的写入过程
  • java B2B2C 源码多租户电子商城系统-Kafka基本使用介绍
  • tweak 支持第三方库
  • vue-router的history模式发布配置
  • 第2章 网络文档
  • 计算机常识 - 收藏集 - 掘金
  • 利用jquery编写加法运算验证码
  • 小李飞刀:SQL题目刷起来!
  • 7行Python代码的人脸识别
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • #微信小程序(布局、渲染层基础知识)
  • $(selector).each()和$.each()的区别
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (c语言)strcpy函数用法
  • (Redis使用系列) Springboot 使用redis实现接口Api限流 十
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (转)重识new
  • ***微信公众号支付+微信H5支付+微信扫码支付+小程序支付+APP微信支付解决方案总结...
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • [202209]mysql8.0 双主集群搭建 亲测可用
  • [C/C++随笔] char与unsigned char区别
  • [java] 23种设计模式之责任链模式
  • [NAND Flash 6.2] NAND 初始化常用命令:复位 (Reset) 和 Read ID 和 Read UID 操作和代码实现
  • [NAND Flash 6.4] NAND FLASH基本读操作及原理_NAND FLASH Read Operation源码实现
  • [PAT练级笔记] 34 Basic Level 1034 有理数四则运算
  • [python]PyPI使用国内源
  • [Qt桌面开发]一个Qt简单界面的开发
  • [Spring Cloud] gateway全局异常捕捉统一返回值
  • [VS] 诊断工具,检测内存泄漏,进行内存调优
  • [VSCode] 你需要知道的23个实用VSCode快捷键