相信福利彩票大家都买过吧,既然学爬虫为何不动手写个小程序抓一下呢,说不定还能发现福彩的秘密,本篇主要面向于对Python爬虫感兴趣的零基础的同学,实例为中彩网的福利3D彩票,比较有趣,小伙伴们一起动手开始吧。
环境:Windows XP
Python :Python 2.7
需要用到的库:re,xlwt,urllib,collections
访问:
http://kaijiang.zhcw.com/zhcw/inc/3d/3d_wqhg.jsp
跳转到:http://kaijiang.zhcw.com/zhcw/html/3d/list.html
经过观察和分析,开奖数据链接很规律,如下:
第一页:
http://kaijiang.zhcw.com/zhcw/html/3d/list_1.html最后一页:
http://kaijiang.zhcw.com/zhcw/html/3d/list_230.html
经过对开奖数据页面分析,总共有230页,链接也很规律
思路为从开奖数据页面抓取开奖日期、开奖期数及开奖号码等数据
然后循环处理每一页,最后将数据写入execl表格即可
新手,只要能达成目的即可,思路就简单粗暴一点
1).第一步,准备食材:食从何来,与炒菜一个道理,首先要准备食材,要抓取到所有3D的开奖记录,那么就要获取到所有开奖页面的html源码,简单粗暴一点,循环访问第1页到第230页,将所有页面的html源码全部获取到,示例代码如下:
输出的网站源码为:
其实我们的彩票的数据都隐藏在上面这个源码html文件里面,下面我们的主要工作就是解析html文件就可以啦
2).第二步,开火爆炒用get_3d_html()获取到的所有页面源码
使用正则表达式从中提取到开奖等数据(开奖日期、开奖期号、开奖号码)
代码如下:观察开奖数据页面源码,要获取的数据如下图红色框内的数据
构造正则:
(u'2017-08-23', u'2017228', u'5', u'3', u'5')
(u'2017-08-22', u'2017227', u'8', u'8', u'5')
(u'2017-08-21', u'2017226', u'9', u'0', u'3')
(u'2017-08-20', u'2017225', u'8', u'0', u'1')
(u'2017-08-19', u'2017224', u'2', u'6', u'5')
(u'2017-08-18', u'2017223', u'7', u'7', u'8')
(u'2017-08-17', u'2017222', u'7', u'3', u'1')
(u'2017-08-16', u'2017221', u'8', u'5', u'7')
(u'2017-08-15', u'2017220', u'2', u'8', u'7')
(u'2017-08-14', u'2017219', u'5', u'1', u'3')
经过上面几步,数据已经全部清洗完毕,现在把抓取到的开奖数据保存进excel表格中吧
利用xlwt模块生产一个表格对象(关于xlwt的用法可以看历史文章关于Excel表格如何处理|这篇最用心)
先写一个表格的头部标题
接着循环把获取的数据全部写入表格
最后保存数据
上面的代码还有2页的数据,现在我们把页面从range(1,3)改成range(1,22),获取全年的数据,然后分析一下,看看数字背后的秘密:
1.最频繁出现的数字1).找出全年数字出现频率最高的3个数字
2).找出百位数出现频率最高的3个数字
3).找出十位数出现频率最高的3个数字
4).找出个位数出现频率最高的3个数字
全年最火的3个数字: 8 3 9
Most popular nums: [(u'8', 137), (u'3', 136), (u'9', 136)]
百位数最火的3个数字:3 8 1
Top3 in hundreds place: [(u'3', 55), (u'8', 50), (u'1', 45)]
十位数最火的3个数字:7,9,5
Top3 in ten place: [(u'7', 50), (u'9', 47), (u'5', 45)]
个位数最火的3个数字:9,5,8
Top3 in single place: [(u'9', 57), (u'5', 46), (u'8', 46)]
利用set()简单的统计一下就可以了,发现Python分析数据简直太方便了
全年有133次出现重复数字,近三分之一的概率
133
Duplicate num percent:31.67%
作者:菜鸟学python
链接:https://www.jianshu.com/p/7b4ef25d82ad
Python相关栏目本月热门文章
- 1【Linux驱动开发】设备树详解(二)设备树语法详解
- 2别跟客户扯细节
- 3Springboot+RabbitMQ+ACK机制(生产方确认(全局、局部)、消费方确认)、知识盲区
- 4【Java】对象处理流(ObjectOutputStream和ObjectInputStream)
- 5【分页】常见两种SpringBoot项目中分页技巧
- 6一文带你搞懂OAuth2.0
- 7我要写整个中文互联网界最牛逼的JVM系列教程 | 「JVM与Java体系架构」章节:虚拟机与Java虚拟机介绍
- 8【Spring Cloud】新闻头条微服务项目:FreeMarker模板引擎实现文章静态页面生成
- 9JavaSE - 封装、static成员和内部类
- 10树莓派mjpg-streamer实现监控及拍照功能调试
- 11用c++写一个蓝屏代码
- 12从JDK8源码中看ArrayList和LinkedList的区别
- 13idea 1、报错java: 找不到符号 符号: 变量 log 2、转换成Maven项目
- 14在openwrt使用C语言增加ubus接口(包含C uci操作)
- 15Spring 解决循环依赖
- 16SpringMVC——基于MVC架构的Spring框架
- 17Andy‘s First Dictionary C++ STL set应用
- 18动态内存管理
- 19我的创作纪念日
- 20Docker自定义镜像-Dockerfile



