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文档,希望发在公众号上顺利显示。

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

扫码关注公众号

python怎么批量下载年报_Python+Wind 批量下载上市公司年报 - Part 1/2相关推荐

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

    Python+Wind 批量下载上市公司年报 - Part 1/2作者:张捷 目录1.背景介绍 2.安装Python 3.爬取万得上市公司年报3.1Wind下载公告信息 3.2获得年报地址 4.使用P ...

  2. 怎么将excel中的url批量转化为图片_Python+Wind 批量下载上市公司年报 - Part 1/2

    Python+Wind 批量下载上市公司年报 - Part 1/2 作者:张捷 目录 1.背景介绍 2.安装Python 3.爬取万得上市公司年报 3.1Wind下载公告信息 3.2获得年报地址 4. ...

  3. 如何用python批量下载数据_Python实现批量下载文件

    Python实现批量下载文件 #!/usr/bin/env python # -*- coding:utf-8 -*- from gevent import monkey monkey.patch_a ...

  4. python 爬虫 音乐下载 歌手_python爬虫批量下载全民K歌音乐

    标签:爬虫 网址示例: https://node.kg.qq.com/personal?uid=639e9983222a338a 直接上源码: import requests import time ...

  5. python模块批量安装方法_python离线批量安装依赖包

    [前提]:已安装pip,下载地址https://pypi.python.org/pypi/pip [步骤一]:打包已安装的依赖包 pip freeze >requirements.txt#生成已 ...

  6. python怎么批量处理数据_python如何批量处理excel数据?_后端开发

    php赋值运算符有哪些_后端开发 php赋值运算符有:1.[=]赋值运算符:2.[+=]加运算符:3.[-=]减运算符:4.[*=]乘运算符:5.[/=]除运算符:6.[.=]连接字符运算符:7.[% ...

  7. python怎么批量爬取图片_Python制作批量爬取网络图片的方法

    Python制作批量爬取网络图片的方法 发布时间:2020-11-17 11:14:24 来源:亿速云 阅读:86 作者:小新 这篇文章给大家分享的是有关Python制作批量爬取网络图片的方法的内容. ...

  8. python中读取word信息_Python实现批量读取word中表格信息的方法

    本文实例讲述了Python实现批量读取word中表格信息的方法.分享给大家供大家参考.具体如下: 单位收集了很多word格式的调查表,领导需要收集表单里的信息,我就把所有调查表放一个文件里,写了个py ...

  9. python批量生成图_python图像处理-批量生成纯色图片

    上一篇文章,是基于现有的图片处理的,那要如何通过代码直接生成图片呢. 生成一张纯色的图片 先设置图片的颜色,接着利用Image模块的new方法新生成一张图片,png格式的图片需要设置成rgba,类似的 ...

最新文章

  1. 用于半监督语义分割的基于掩码的数据增强
  2. python正确的赋值语句-Python 赋值语句技巧之序列解包
  3. Android 第三课 Activity的生命周期
  4. Android之运行的错误:java.lang.UnsatisfiedLinkError: Couldn‘t find cibloger.so
  5. 妙用世界之窗浏览器的隐私保护功能
  6. 撩开Docker的面纱
  7. linux安装ssh放在,Linux安装SSH
  8. 与IP地址有关的那些点
  9. Python HTTP库:requests快速入门
  10. 5年前我们摸爬滚打进入测试行业,如今你后悔吗?
  11. FZCCHJW--GB1-0-GBpc-EUC-H:在系统中未找到字体;已替换缺少的字体。
  12. Geotools解析shp文件
  13. css三种标签隐藏方法(及它们用法区别), css显隐性问题
  14. 远程工具显示Linux乱码问题解决方案
  15. python 图像检索系统_python-计算机视觉 - 图像检索
  16. 投资组合报告-马科维茨模型
  17. Ubuntu20.04设置静态IP
  18. macOS SwiftUI 指示器组件规范之 02 评级指标 Rating Indicators
  19. GradCAM神经网络可视化解释(原理和实现)
  20. 关于cv::cuda::GpuMat与PtrStepSz

热门文章

  1. 区块链相关数据报表_一种基于区块链的财务报表系统及其使用方法与流程
  2. 如何查看本机的ip地址和端口号
  3. 10.网桥是什么?网桥和路由器及交换机的区别?以太网和令牌环网,nat,查公网ip等
  4. getchar()函数的使用方法
  5. scanf与getchar的区别
  6. Linux ps命令详解,Linux查看进程
  7. Linux中zsh插件,Zsh 常用插件
  8. 收集整理威尔逊定理的证明
  9. 答题小程序 服务器,答题小程序如何实现随机发题目
  10. 解读华为云应用平台ROMA,黑科技实现一站式政企上云