Python网络数据采集与挖掘
以巨潮资讯、证监会网站为例,利用Python编写爬虫进行了公告信息网络数据采集和挖掘技术实践,主要包括网页请求分析、动态网页的爬取、正则表达式、内容过滤、文本数据挖掘等方面的知识。...
本文主要利用Python对巨潮资讯、证监会ipo首发平台进行网络数据采集和分析挖掘,巨潮资讯网是ajax动态加载网页,通过对其网络请求进行抓包分析,分析出post data参数和响应的具体含义,利用 Python urllib2模拟ajax请求,并对响应的json数据进行抽取采集;证监会IPO首发平台是jsp动态加载网页,请求响应直接返回网页数据,分析出其get请求参数含义,模拟网页请求,对响应网页先进行空格回车等干扰字符过滤剔除,再利用正则表达式匹配抽取关键数据,最后利用Linux对文本数据进行数据挖掘,进行了TOP K统计和分析。
1 需求分析
以巨潮资讯网(www.cninfo.com.cn)、中国证监会 - 首次公开股票信息展示平台(http://ipo.csrc.gov.cn/) 为例,爬取金融公告信息。
2 巨潮网网络数据采集
2.1 巨潮网网站分析首先,访问聚潮资讯网站Robots协议,没有此页说明没有爬虫限制,所有数据对爬虫开放。点击“更多”按钮,网页url无变化,表明此页面为动态加载页面。
分析Web http请求分析可知,网页为AJAX异步加载网页,数据请求为post请求方式
请求URLRequest URL: http://www.cninfo.com.cn/cninfo-new/announcement/query
请求方式Request Method: POST请求表单数据
column:szse
pageNum:1
pageSize:30
seDate:2016-06-03
2.2 编写程序
开发环境:
系统环境 Ubuntu 14.04
开发语言 Python 2.7
爬 虫 库 urllib、urllib2
匹配规则 正则表达式通过上面的程序,可以采集到沪深、香港等现今到往前n多天的历史公告网页数据。2.3 数据存储
数据预览返回数据为Json格式
{"classifiedAnnouncements":null,"totalSecurities":0,"totalAnnouncement":1126,"totalRecordNum":1126,"announcements":[{"id":null,"secCode":"01033","secName":"中石化油服","orgId":"gssh0600871","announcementId":"1202354538","announcementTitle":"股份发行人的证券变动月报表","announcementTime":1464916105000,"adjunctUrl":"finalpage/2016-06-03/1202354538.PDF","adjunctSize":500,"adjunctType":"PDF","storageTime":1464916105000,"columnId":"250501","pageColumn":"香港主板","announcementType":"HKZB","associateAnnouncement":null,"important":null,"batchNum":null,"announcementContent":null,"announcementTypeName":null},{"id":null,"secCode":"08272","secName":"华人饮食集团","orgId":"gshk0008272","announcementId":"1202354534","announcementTitle":"截至二零一六年五月三十一日月报表","announcementTime":1464915025000,"adjunctUrl":"finalpage/2016-06-03/1202354534.PDF","adjunctSize":491,"adjunctType":"PDF","storageTime":1464915025000,"columnId":"250502","pageColumn":"香港创业板","announcementType":"HKCY","associateAnnouncement":null,"important":null,"batchNum":null,"announcementContent":null,"announcementTypeName":null},{"id":null,"secCode":"00891","secName":"利邦","orgId":"9900008927","announcementId":"1202354533","announcementTitle":"董事兼行政总裁之变更","announcementTime":1464913525000,"adjunctUrl":"finalpage/2016-06-03/1202354533.PDF","adjunctSize":370,"adjunctType":"PDF","storageTime":1464913525000,"columnId":"250501","pageColumn":"香港主板","announcementType":"HKZB","associateAnnouncement":null,"important":null,"batchNum":null,"announcementContent":null,"announcementTypeName":null},
……
……
{"id":null,"secCode":"000158","secName":"常山股份","orgId":"gssz0000158","announcementId":"1202352553","announcementTitle":"关于大股东和部分董事、监事、高级管理人员不减持公司股票承诺履行完毕公告","announcementTime":1464883200000,"adjunctUrl":"finalpage/2016-06-03/1202352553.PDF","adjunctSize":237,"adjunctType":"PDF","storageTime":1464852982000,"columnId":"09020202,250101,251302","pageColumn":"深市主板","announcementType":"SZZB","associateAnnouncement":null,"important":null,"batchNum":null,"announcementContent":null,"announcementTypeName":null}],"categoryList":null,"hasMore":false}
存储文件命名为“日期_公告类型”
resp_list = []
resp_list = http_post()
time_stamp = time.localtime(date_time)
seDate = time.strftime('%Y-%m-%d',time_stamp)
str_list = "".join(resp_list)
li = open('file/' + seDate +'_'+column,'w+')
li.write(str_list)
li.close()3 证监会ipo平台网络数据采集
3.1 证监会网站分析访问证监会网站Robots协议,没有此页说明没有爬虫限制,所有数据对爬虫开放。
分析可知,网页为动态加载网页,数据请求为get请求方式
请求URL Request URL: http://ipo.csrc.gov.cn/infoBlock.action
请求方式 Request Method: GET主要查询参数
pageNo: 2
block: 1
3.2 编写程序
通过上面的程序,可以实现对上交所(block=1)、深交所中小板(block=2)、深交所创业板(block=3),从2014-4-18至今的首次发行股票的信息披露数据。
3.3 数据存储剔除网页回车、空格等杂乱数据,基本数据预览如下图采用正则表达式匹配抽取网页中首次公开发行公司名字、时间、保荐机构数据,并存储到相关文件中。4 数据挖掘
从2014-04-18~至今,共采集到1762条数据,对这些公司名字、时间、保荐机构数据进行统计分析
……
文本数据统计、去重、排序(Linux文本操作,大概用到sort、head、管道流、>>、tr等各种命令操作,此处略去n多细节……)
……
4.1 上市公司保荐机构数目top10
序号
保荐机构
数目
1
广发证券股份有限公司
120
2
中信证券股份有限公司
105
3
国信证券股份有限公司
100
4
招商证券股份有限公司
97
5
中信建投证券股份有限公司
89
6
海通证券股份有限公司
71
7
安信证券股份有限公司
65
8
国金证券股份有限公司
63
9
中国国际金融股份有限公司
59
10
华泰联合证券有限责任公司
54
上市地和板块
个数
上交所
796
深交所中小板
320
深交所创业板
646
4.3 时间分布
从2014-4-18至今,首发股票公司每月数目5 总结
本文主要利用Python对巨潮资讯、证监会IPO首发平台进行网络数据采集和分析挖掘,主要包括网页请求分析、动态网页的爬取、正则表达式、内容过滤、文本数据挖掘等方面的知识。本次爬虫为单站点爬虫,未使用Scrapy框架,因为站点除了动态加载页面以外,并未涉及到其他反爬虫限制,所以对请求头伪装、请求IP代理、请求延时、验证码识别等技术暂未涉及,对爬虫通用性、扩展性以及多线程、分布式等方面的优化尚待进行,同时,对文本数据挖掘、自然语言处理、机器学习算法等领域研究有待开展。
关注 图秀大数据
微信扫一扫关注公众号