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

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

目录

1. 问题背景
2. 准备工作
3. 简单介绍3.1 Wind 数据库中诸如控股或参股公司该类指标在哪?3.2 本文示例中用到的 pyautogui 包中相关函数的详细介绍3.3 获取上市公司股票代码列表
4. 代码实现过程
相关课程课程一览

连享会 - 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 mousepyautogui.click(x,y)  ## move the mouse to XY coordinates and click itpyautogui.typewrite ((List["证券代码"][i])  ## typewrite the content of listpyautogui.press('enter')  ## press the Enter keypyautogui.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 里包含一家上市公司控股或参股公司详细的名称、直接持股比例、表决权比例、被参控公司注册资本、投资额等数据。结果如下:

Python+Wind:用 Pyautogui 轻松下载 Wind 数据相关推荐

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

    原文链接:https://www.lianxh.cn/news/4abccd481a8e7.html 目录 1. 问题背景 2. 准备工作 3. 简单介绍 3.1 Wind 数据库中诸如控股或参股公司 ...

  2. 大数据可视化python_5种Python绘图库,轻松实现大数据可视化!

    读图时代,图片不够精美绚丽,怎能够吸引住越来越挑剔的眼睛.而拥有"盛世美颜"的图片是怎样炼造而成的呢?大圣众包(www.dashengzb.cn)小编介绍5款交互式图表Python ...

  3. 利用Python自动在CDDIS上下载GNSS数据(观测值、广播星历,电离层格网数据)

    在CDDIS上下载GNSS数据 自动下载电离层格网文件 效果图 自动下载观测值O文件 效果图 自动下载星历n文件 效果图 我们在做GNSS数据处理和分析的时候,难免会用到很多天甚至几年的GNSS数据, ...

  4. 批处理下载MODIS数据

    之前有个不需要密码登录的数据下载网站(https://ladsweb.modaps.eosdis.nasa.gov),手里有别人写好的python爬虫脚本可以批处理下载MODIS数据,这次项目中要用到 ...

  5. python怎么批量下载年报_使用Python批量下载Wind数据库中的PDF报告

    原标题:使用Python批量下载Wind数据库中的PDF报告 背景 最近小编出于工作需要,准备在Wind金融数据终端批量下载上市公司2019年第一季度业绩预告.通过相关的条件检索,发现其相关数据有近百 ...

  6. R语言量化:使用WindR下载Wind数据

    在R语言:使用rvest包抓取新浪财经A股交易数据中我们介绍了如何使用rvest包爬取新浪财经的A股交易数据,但是新浪有一定的反爬虫措施,抓取数据多有不便.最近发现Wind有R语言的量化接口,而且对免 ...

  7. 可爱的 Python: 使用 mechanize 和 Beautiful Soup 轻松收集 Web 数据

    可爱的 Python: 使用 mechanize 和 Beautiful Soup 轻松收集 Web 数据 使用 Python 工具简化 Web 站点数据的提取和组织 David Mertz, Ph. ...

  8. python与网页交互_可爱的 Python: 使用 mechanize 和 Beautiful Soup 轻松收集 Web 数据

    可爱的 Python 使用 mechanize 和 Beautiful Soup 轻松收集 Web 数据 使用 Python 工具简化 Web 站点数据的提取和组织 David Mertz 2010 ...

  9. python爬去百度文库_利用Python语言轻松爬取数据[精品文档]

    利用 Python 语言轻松爬取数据 对于小白来说,爬虫可能是一件非常复杂. 技术门槛很高的事情. 比如有人认为学爬虫必须精通 Python ,然后哼哧哼哧系统学习 Python 的每个知识点,很久之 ...

  10. python爬取百度文库_利用Python语言轻松爬取数据

    利用 Python 语言轻松爬取数据 对于小白来说,爬虫可能是一件非常复杂. 技术门槛很高的事情. 比如有人认为学爬虫必须精通 Python ,然后哼哧哼哧系统学习 Python 的每个知识点,很久之 ...

最新文章

  1. Linux系统搭建Red5服务器
  2. 关于Unity游戏开发方向找工作方面的一些个人看法
  3. learning中的数学
  4. 使用lamba中stream 进行分组统计
  5. python with循环_Python for循环、while循环
  6. 第一章 什么是数组名?
  7. Android start stop命令使用
  8. PaddlePaddle(5)——简单高效的部署与推理方法(Ⅱ)
  9. Android实现计算器布局(约束布局
  10. javaweb项目图
  11. sudo apt-get 与 yum
  12. 测试经典用例练习之水杯测试用例
  13. Unity 实现简单的人物对话系统
  14. axure命令行_axure怎么计算器
  15. 蓝天P7xxtm 系列9代最新BIOS
  16. html仿今日头条数据列表
  17. 最大信息熵增益_信息熵(Entropy)、信息增益(Information Gain)
  18. 微信小程序开发04 性能优化:借助微信开发者工具提升小程序性能
  19. springboot集成mybatis 使用逆向工程 生成sql语句
  20. debug chromium project - create sub proces

热门文章

  1. 批量执行newman
  2. Android中生成库文件与移除以及导入jar包重复问题
  3. .net 调用Oracle 的一些总结。
  4. Linux 简单架设防火墙路由器
  5. c# 扩展方法奇思妙用高级篇三:Enumerable.CastT 应用
  6. python collections模块(队列)
  7. delete语句与reference约束 FK_subplan_job_id冲突问题,导致job无法删除解决办法
  8. (转)递归算法的时间复杂度终结篇与Master method
  9. Android中实现全屏、无标题栏的两种办法(另附Android系统自带样式的解释)
  10. 智能家居的新篇章-PHILIPS HUE