Python+Wind:用 Pyautogui 轻松下载 Wind 数据

发布时间:2020-07-03 阅读 5393

Stata 连享会   主页 || 视频 || 推文

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

课程详情 https://gitee.com/arlionn/Course   |   lianxh.cn

课程主页 https://gitee.com/arlionn/Course

作者: 张翠燕(山东大学)
邮箱: zcy1992yan@163.com


目录


???? 相关专题

连享会 - Python 专题
连享会 - 文本分析专题

1. 问题背景

Wind 金融终端数据库中有很多相比其他数据库而言更为精细的数据指标,例如上市公司控股或参股公司信息,其中包含了各年各个参控公司对上市公司的 直接持股比例主营业务成立时间 等比较详细的数据。

遗憾的是,Wind 数据库的使用并不友好:深度数据库中的很多指标无法实现一次性批量下载,只能依据上市公司代码逐一下载,即一家公司的数据下载为一个 Excel 表格。如此一来,若需下载所有上市公司的数据,需要执行三千多次下载任务,耗时耗力。

虽然 Python 可以有效替代人工下载,但 Wind 数据库中存在反爬虫机制,对于很多初学者而言是不小的障碍。若是强制反爬,一不留神还可能面临被封号的风险。值得庆幸的是,Python 中的 pyautogui 安装包可以帮我们轻松规避反爬虫问题,还能解决人工下载三千多次的繁琐问题。其原理是模拟人工鼠标操作行为,是一种「傻瓜机」式的操作。设置好后,就可轻松实现解放双手啦。本文旨在为科研者提供一种减少重复劳动、解放双手的思路。

2. 准备工作

  • Wind 数据库账号
  • Anaconda3 以上版本,利用其自带的 Jupyter Notebook 编辑器编写代码
  • 一份完整的 上市公司代码列表:可直接从 Wind 数据库中下载

3. 简单介绍

3.1 Wind 数据库中诸如控股或参股公司该类指标在哪?

打开 wind 终端首页,定位到多维数据,进而点击深度数据,深度数据下有关于公司资料、知识产权等详细目录,可根据研究需要下载,本文以控股或参股公司数据为例。注意:时间范围改为上市以来或是10Y,保证时间的统一性。若选择上市以来部分证券代码会存在没有数据的情况,则需要将证券代码进行逐步剔除过程,即下载成功的从 excel 表格中删除

3.2 本文示例中用到的 pyautogui 包中相关函数的详细介绍

  pyautogui.position()  ## get the XY position of the mouse
  pyautogui.click(x,y)  ## move the mouse to XY coordinates and click it
  pyautogui.typewrite ((List["证券代码"][i])  ## typewrite the content of list
  pyautogui.press('enter')  ## press the Enter key
  pyautogui.hotkey('altleft','f4')  ## press the Altleft-F4 hotkey combination

3.3 获取上市公司股票代码列表

从 wind 中下载一份完整的上市公司代码列表数据,保存到一个文件夹中,注意存储路径,本示例中的路径为 D:\company code.xlsx。数据结构如图所示:

4. 代码实现过程

##导入模块
import time, sys, smtplib
import pandas as pd
import pyautogui
##测试鼠标位置:pyautogui依据不同电脑屏幕分辨率获取屏幕上(x,y)坐标
print(pyautogui.position())

测试鼠标位置是实现整个过程的核心,基本原理是在 Jupyter 中执行完导入模块后,依据人工手动下载的过程确定鼠标位置,并记录位置 2、3、4 的坐标,为了减少 bug 整个过程中 Wind 数据库切记要保持最大化状态,详解如图所示:

确认 2、3、4 位置后可将其坐标写入过程实现中的对应位置

##导入证券代码
List=pd.read_excel(r"D:\company code.xlsx")
for i in range(0, len(List)):
    print(List["证券代码"][i])
##过程实现
for i in range(0, len(List)):
    time.sleep(5)
    pyautogui.click(1157, 715) ##位置2的坐标
    time.sleep(1) ##停顿时间依据自己电脑反应速度修改
    pyautogui.typewrite(List["证券代码"][i])
    time.sleep(1)
    pyautogui.press('enter')
    time.sleep(10)
    pyautogui.click(1243, 104) ##位置3的坐标
    time.sleep(5)
    pyautogui.click(604, 477) ##位置4的坐标
    time.sleep(1)
    l1=List["证券代码"][i].replace('.','')
    pyautogui.typewrite(l1)
    time.sleep(1)
    pyautogui.press('enter')
    time.sleep(3)
    pyautogui.hotkey('altleft','f4') ##由于Wind中下载的excel会自动打开,因而需利用Alt+F4快捷键将其关闭

最后,执行过程实现部分的方法如图所示:

完成上述操作后,最终将获取一份包含所有上市公司的控股或参股公司数据的 excel 文件夹,每一个 excel 里包含一家上市公司控股或参股公司详细的名称直接持股比例表决权比例被参控公司注册资本投资额等数据。结果如下:

相关课程

连享会-直播课 上线了!
http://lianxh.duanshu.com

免费公开课:


课程一览

支持回看,所有课程可以随时购买观看。

专题 嘉宾 直播/回看视频
最新专题 DSGE, 因果推断, 空间计量等
Stata数据清洗 游万海 直播, 2 小时,已上线
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]

Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。


关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。直播间 有很多视频课程,可以随时观看。
  • 连享会-主页知乎专栏,300+ 推文,实证分析不再抓狂。
  • 公众号推文分类: 计量专题 | 分类推文 | 资源工具。推文分成 内生性 | 空间计量 | 时序面板 | 结果输出 | 交乘调节 五类,主流方法介绍一目了然:DID, RDD, IV, GMM, FE, Probit 等。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会主页  lianxh.cn
连享会主页 lianxh.cn

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会学习群-常见问题解答汇总:
https://gitee.com/arlionn/WD