每日公告数量@TOC

一、数据获取与预处理

本文从东方财富网上市公司公告页面获取沪深A股1991-2019年公告数据,按照数据获取的先后顺序,将数据分为以下两个部分一是上市公司公告信息,包括:序号(index)、股票代码(code)、股票名称(name)、公告标题(title)、公告链接(url)、公告日期(date)、小标签(label)、公告类别(class),数据格式如下:

序号 股票代码 股票名称 公告标题 公告链接 公告日期 小标签 公告类别
1 300576 容大感光 关于***的公告 http://***.html 2020-01-03 董事会决议 重大事项

二是上市公司公告正文及其类别,包括:公告链接(url)、公告正文(content)、公告类别(class),数据格式如下:

公告链接 公告正文 公告类别
http://***.html 深圳市容大感光*** 重大事项

1、数据获取的合法性检验

本文的公告数据来自“东方财富网>数据中心>公告大全>沪深A股公告”页面。每个网址都会向用户提供Robots协议(又称爬虫协议)。该协议规定了爬虫程序在各个网页中的权限。如:爬虫协议规定了哪些页面可以被网络爬虫程序抓取,哪些网页不能被抓取。因此,爬虫协议能够判断用户操作的合法性。本文采用python的RobotFileParser模块读取东方财富网公告页面的Robots协议,并判断其爬虫操作的合法性。如果该页面允许爬虫程序抓取信息,则RobotFileParser返回True,如果不允许,返回False。结果显示,东方财富网允许爬虫程序获取公告信息及正文内容,解析爬虫协议的代码如下:

from urllib.robotparser import RobotFileParser
rp=RobotFileParser()
rp.set_url('http://data.eastmoney.com/notices/robots.txt')
rp.read()
#判断公告列表是否可以被抓取
print(rp.can_fetch('*','http://data.eastmoney.com/notices'))
print(rp.can_fetch('*','http://data.eastmoney.com/notices/detail/000651/... .html'))
'''
结果如下:
公告信息列表页面:True
公告正文页面:True
'''

2、获取公告信息

东方财富网沪深A股公告查询的结果只能返回前1000页公告列表,为了获取更多的股票公告,采取按照股票代码查询公告的方式,每次返回对应股票的上市公司公告信息列表页面,例如:股票代码为600158的公告信息页面的网址如下所示:

http://data.eastmoney.com/notices/stock/600158.html

获取其他上市公司公告信息只需将网址中的股票代码替换成相应的股票代码。而单个上市公司的股票信息列表一般不超过1000页。因此,通过上述方式就能获取所有上市公司的公告信息。

2.1 获取沪深A股所有股票代码及名称

通过东方财富网的Choice金融终端的数据导出功能获取沪深A股全部上市公司的股票数据,包含序号(index)、股票代码(code)、股票名称(name)。截至目前,沪深A股总共有3763只股票,详细股票代码及名称见附录。

2.2 抓取公告信息列表流程

获取上市公司公告信息的总流程如下:
(1)读取上司公司股票数据;
(2)遍历股票代码及名称,获取股票代码对应的上市公司公告信息。
(3)重复步骤)(2)直到最后一个上市公司的公告信息被获取时,爬虫停止运行。
总流程图如下:

其中,url_spider为获取单个上市公司公告信息的子流程,该模块采用Selenium网页自动化测试工具和chrome浏览器模拟用户浏览公告页面的操作,从而获取上市公司公告信息。url_spider的主要步骤如下:
(1)输入股票代码;
(2)打开浏览器,并输入股票代码对应网址;
(3)点击公告分类选项,如重大事项等;
(4)获取公告信息并写入数据库;
(5)判断是否为最后一页,如果是,点击“下一页”;
(6)重复步骤(4)(5),直到最后一页为止。
(7)重复步骤(3)(4)(5)(6),直到获取完所有分类选项为止。
下面是url_spider的程序流程图:

3、获取公告正文

通过获取公告信息已经抓取到了所有公告正文的链接(URL),然后利用python requests库发送请求,获取每条链接对应的公告正文。具体步骤如下:
(1)从公告信息数据库中读取公共哦正文网址列表,记为url_list;
(2)遍历url_list,抓取链接对应的上市公司公告正文;
(3)将抓取到的公告正文写入公告正文数据库;
(4)重复步骤(2)(3),直到最后一篇公告正文被写入公告正文数据库。
获取公告正文的程序流程图如下:

4、 增量式抓取数据

上市公司公告信息几乎每天都在产生,增量式爬虫能够及时的获取新增公告。增量式抓取数据的方法是在已经获取到历史数据的基础上,向数据集中追加新产生的数据的方法。同时,增量爬虫能够解决因网络连接失败、程序报错、等问题使得程序意外终止,再次启动程序时程序“遗忘”任务进度的问题。防止数据重复获取,浪费时间、计算和存储资源。要实现增量式爬取只需在普通爬虫中添加日志模块和定时启动模块。日志模块负责记录了任务进度和在程序暂停或报错时自动保存当前进度。定时启动模块负责每日定时启动爬虫程序,并获取最新上市公司公告信息。数据抓取任务非常占用网络传输资源、计算资源,当计算机执行爬虫任务是会影响计算机的正常使用,因此爬虫任务适合在计算机空闲时执行,例如,每天的零点到次日的七点人们一般不会使用电脑。通过linux的crontab实现定时启动和关闭爬虫程序。

5、 预处理

5.1 数据合并与连接

为了方便查看、移动和备份数据,爬虫程序获取到的上市公司公告信息数据和公告正文数据被分别存储在多个文件中,在对数据进行处理、分析之前需要读取这些文件并且将这些数据合并到同一个表格中。最后,公告链接,公告标题,公告类别等信息需要与公告正文数据对应起来,由于公告正文链接与公告正文一一对应,因此公告信息数据与公告正文数据可以通过公告链接进行连接。

5.2 去重、删除异常样本

首先,对公告信息数据进行清洗。由于爬虫程序可能重复获取到同一条公告信息,需要对数据进行去重,即,对重复样本只保留其中一个样本,一般保留第一个样本,后面与之重复的样本全部删除;此外,在数据集中存在极少数同一个样本对应多个类别的情况,这样的样本会对分类算法造成干扰,所以需要全部删除这样的样本;包含缺失值、异常值的样本同样需要删除。去重、删除异常样本之前总样本量为883723,经过去重、删除异常样本之后总样本量为700220。

5.3公告正文预处理

在将公告正文数据投入模型之前需要作以下预处理:
(1)删除公告正文中的特殊字符;
(2)删除重复公告;
(3)设置公告最大长度。
由于公告内容非常多且重要信息主要集中在标题和首段,所以减少计算机性能和时间的开销,截取公告前n个字符是最简单有效的方法。
如何解决:
训练模型时只需将公告标题和正文内容与公告类别一一对应起来。以也就是说不能出现一篇公告有多个类别的情况;从上面测试的结果可以分析出,一篇公告对应多个类别的情况并不是很多,所以只需删除这种情况的公告即可。(这里其实时做了一个假设,即:假设股票公告所属类别唯一。由于公告类别不唯一的情况很少,所以这个假设是合理的。)

5.4 类别不均衡问题

数据不均衡是指不同类别的样本在数据集中的占比不均衡。上市公司类别分布情况如下:

如图所示,上市公司类别分布及不均衡。重大事项、财务报告、信息变更等类别的样本量远大于风险提示、融资公告、资产重组、持股变动。样本不均衡问题会使预测为小样本量的类别的概率下降,从而导致分类的正确率下降。本文同时采取以下方法解决样本不均衡问题:
(1)对大样本量的类别作欠采样;
(2)对小样本量的类别作过采样;
(3)根据样本类别分布,设置不同权重,增加预测为小样本量的类别的概率。

参考文献

1、[Python爬虫]利用Selenium等待Ajax加载及模拟自动翻页,爬取东方财富网公司公告
2、[Python爬虫]爬取东方财富网公司公告需要注意的几个问题
3、Python 爬虫基础Selenium库的使用(二十二01)
4、selenium.webdriver.support.ui 和selenium.webdriver.support.wait的区别
5、Chrome无界面启动使用
6、python 文件读写模式r,r+,w,w+,a,a+的区别(附代码示例)
7、pandas.to_csv
8、python采用 多进程/多线程/协程 写爬虫以及性能对比,牛逼的分分钟就将一个网站爬下来!
9、multiprocessing — 基于进程的并行
10、2、利用map实现并行任务技巧
11、python的return详解。
12、(Python)利用pandas向一个csv文件追加写入数据
13、pandas的唯一值、值计数以及成员资格
14、pandas的值计数,唯一值,成员资格
15、Pandas删除数据的几种情况

文章中有任何错误或不足,欢迎读者在评论区指出!

python网络爬虫——使用selenium抓取东方财富网上市公司公告相关推荐

  1. Python网络爬虫实战:抓取和分析天猫胸罩销售数据

    本文实现一个非常有趣的项目,这个项目是关于胸罩销售数据分析的.Google曾给出了一幅世界女性胸部尺寸分布地图 ,从地图中可以明显看出中国大部分地区呈现绿色(表示平均胸部尺寸为A罩杯),少部分地区呈现 ...

  2. python网络爬虫实战3——抓取新闻内文相关信息

    详细代码见:http://download.csdn.net/download/vinsuan1993/10258596 一.需求说明 我们通过上一篇博客(http://blog.csdn.net/c ...

  3. Python网络爬虫小试刀——抓取ZOL桌面壁纸图片3

    前篇回顾:下载一个类型集合的全部图片 本篇目标:获得一个集合页面中所有集合中所有的图片 使用urllib2获取已知集合网页页面的HTML代码,首先使用正则表达式获取本页图片集合的url,根据上篇所写戏 ...

  4. Python网络爬虫小试刀——抓取ZOL桌面壁纸图片2

    前篇回顾:如何已知图片的url下载图片 本篇目标:下载一个类型集合的全部图片 使用urllib2获取,首先使用正则表达式获取本页图片的url,根据上篇所写downloadImg函数将图片下载到指定文件 ...

  5. [day4]python网络爬虫实战:爬取美女写真图片(Scrapy版)

    l> 我的新书<Android App开发入门与实战>已于2020年8月由人民邮电出版社出版,欢迎购买.点击进入详情 文章目录 1.开发环境 2.第三方库 3.Scrapy简介 4. ...

  6. Python 网络爬虫实战:爬取知乎回答中的全部图片

    平时逛知乎的时候,经常能看到很多很棒的图片,精美的壁纸,搞笑的表情包,有趣的截图等等,总有想全部保存下来的冲动. 于是在一个小老弟的拜托之下,我把之前的知乎爬虫改造了一下,改装成了一个可以下载知乎回答 ...

  7. [day1]python网络爬虫实战:爬取美女写真图片

    l> 我的新书<Android App开发入门与实战>已于2020年8月由人民邮电出版社出版,欢迎购买.点击进入详情 文章目录 1.开发环境 2.第三方库 3.实现 1.分析url格 ...

  8. [day2]python网络爬虫实战:爬取美女写真图片(增强版)

    l> 我的新书<Android App开发入门与实战>已于2020年8月由人民邮电出版社出版,欢迎购买.点击进入详情 文章目录 1.开发环境 2.第三方库 3.实现 1.分析url格 ...

  9. 22.网络爬虫—APP数据抓取详讲

    网络爬虫-APP数据抓取详讲 Fiddler 工作原理 安装完成Fiddler后的配置 前提条件 工具配置 手机数据抓取 Fiddler手机端配置 手机端操作 实战演示 后记 前言:

最新文章

  1. php数据 文本_php直接调用文本文件内容
  2. nagios+mysql+ndo2安装总结
  3. window.open html打开一个新页面
  4. js实现撤销恢复_我们常用的撤销和恢复功能,它们使用了什么设计模式实现吗?...
  5. python reduce函数_Python reduce函数作用及实例解析
  6. php ajax邮箱,PHP+Ajax异步通讯实现用户名邮箱验证是否已注册( 2种方法实现)
  7. python 文件读取报错 ‘utf-8‘ codec can‘t decode
  8. sip 时序图_简单几步让你看懂单片机时序图
  9. 红橙Darren视频笔记 view的绘制流程(上) onMeasure测量代码分析 基于API27
  10. if单分支,二分支,多分支
  11. 「傻瓜」才能写出好代码!
  12. mysql事件类型_MySQL binlog中的事件类型
  13. 哪些NPM仓库更易遭供应链攻击?研究员给出了预测指标
  14. PAT 1066. 图像过滤(15)-乙级
  15. 苹果电脑Mac上怎样实现图像文件格式转换?
  16. 【优化求解】基于NSGA2算法求解多目标优化问题matlab源码
  17. Netapp存储 硬盘显示bad label的解决办法
  18. iOS 增强现实教程:基于位置定位
  19. eclipse安装wtp
  20. ssdt 表修改详细

热门文章

  1. 【CS224n-5】Linguistic Structure: Dependency Parsing
  2. #论文投稿必备#如何解决阅读文献的三大问题:坐不住,记不住,想不开
  3. vscode报错之 对修饰器的实验支持功能在将来的版本中可能更改。在 “tsconfig“ 或 “jsconfig“ 中设置 “experimentalDecorators“ 选项以删除此警告。
  4. 测绘用计算机吗,测绘工程中计算机制图应用
  5. 【时空序列预测第二篇】Convolutional LSTM Network: A Machine Learning Approach for Precipitation Nowcasting
  6. 中长期定存利率下行 大额存单还“香”吗
  7. 人脸识别智能锁的发展选择
  8. CIDR的IP地址的表示与划分方法(转)
  9. 达芬奇的这本“禁书”,竟让全世界顶礼膜拜了 500 年!
  10. Java String类概述