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文档,希望发在公众号上顺利显示。
特此感谢连享会提供的技术贴和相关资料!关于我蚊子是一名高校基层工作者,“捷思捷悟”是蚊子的自留地,记录研究和教学工作中遇到的问题、解决方案和感悟。
扫码关注公众号
python怎么批量下载年报_Python+Wind 批量下载上市公司年报 - Part 1/2相关推荐
- python 批量下载财务数据_Python+Wind 批量下载上市公司年报 - Part 1/2
Python+Wind 批量下载上市公司年报 - Part 1/2作者:张捷 目录1.背景介绍 2.安装Python 3.爬取万得上市公司年报3.1Wind下载公告信息 3.2获得年报地址 4.使用P ...
- 怎么将excel中的url批量转化为图片_Python+Wind 批量下载上市公司年报 - Part 1/2
Python+Wind 批量下载上市公司年报 - Part 1/2 作者:张捷 目录 1.背景介绍 2.安装Python 3.爬取万得上市公司年报 3.1Wind下载公告信息 3.2获得年报地址 4. ...
- 如何用python批量下载数据_Python实现批量下载文件
Python实现批量下载文件 #!/usr/bin/env python # -*- coding:utf-8 -*- from gevent import monkey monkey.patch_a ...
- python 爬虫 音乐下载 歌手_python爬虫批量下载全民K歌音乐
标签:爬虫 网址示例: https://node.kg.qq.com/personal?uid=639e9983222a338a 直接上源码: import requests import time ...
- python模块批量安装方法_python离线批量安装依赖包
[前提]:已安装pip,下载地址https://pypi.python.org/pypi/pip [步骤一]:打包已安装的依赖包 pip freeze >requirements.txt#生成已 ...
- python怎么批量处理数据_python如何批量处理excel数据?_后端开发
php赋值运算符有哪些_后端开发 php赋值运算符有:1.[=]赋值运算符:2.[+=]加运算符:3.[-=]减运算符:4.[*=]乘运算符:5.[/=]除运算符:6.[.=]连接字符运算符:7.[% ...
- python怎么批量爬取图片_Python制作批量爬取网络图片的方法
Python制作批量爬取网络图片的方法 发布时间:2020-11-17 11:14:24 来源:亿速云 阅读:86 作者:小新 这篇文章给大家分享的是有关Python制作批量爬取网络图片的方法的内容. ...
- python中读取word信息_Python实现批量读取word中表格信息的方法
本文实例讲述了Python实现批量读取word中表格信息的方法.分享给大家供大家参考.具体如下: 单位收集了很多word格式的调查表,领导需要收集表单里的信息,我就把所有调查表放一个文件里,写了个py ...
- python批量生成图_python图像处理-批量生成纯色图片
上一篇文章,是基于现有的图片处理的,那要如何通过代码直接生成图片呢. 生成一张纯色的图片 先设置图片的颜色,接着利用Image模块的new方法新生成一张图片,png格式的图片需要设置成rgba,类似的 ...
最新文章
- 用于半监督语义分割的基于掩码的数据增强
- python正确的赋值语句-Python 赋值语句技巧之序列解包
- Android 第三课 Activity的生命周期
- Android之运行的错误:java.lang.UnsatisfiedLinkError: Couldn‘t find cibloger.so
- 妙用世界之窗浏览器的隐私保护功能
- 撩开Docker的面纱
- linux安装ssh放在,Linux安装SSH
- 与IP地址有关的那些点
- Python HTTP库:requests快速入门
- 5年前我们摸爬滚打进入测试行业,如今你后悔吗?
- FZCCHJW--GB1-0-GBpc-EUC-H:在系统中未找到字体;已替换缺少的字体。
- Geotools解析shp文件
- css三种标签隐藏方法(及它们用法区别), css显隐性问题
- 远程工具显示Linux乱码问题解决方案
- python 图像检索系统_python-计算机视觉 - 图像检索
- 投资组合报告-马科维茨模型
- Ubuntu20.04设置静态IP
- macOS SwiftUI 指示器组件规范之 02 评级指标 Rating Indicators
- GradCAM神经网络可视化解释(原理和实现)
- 关于cv::cuda::GpuMat与PtrStepSz