|
这是菜鸟学Python的粉丝第3篇原创投稿
阅读本文大概需要3分钟
本篇作者:路上行舟+菜鸟学python 合作完成
相信福利彩票大家都买过吧,既然学爬虫为何不动手写个小程序抓一下呢,说不定还能发现福彩的秘密,本篇主要面向于对Python爬虫感兴趣的零基础的同学,实例为中彩网的福利3D彩票,比较有趣,小伙伴们一起动手开始吧
环境:Windows XP
Python :Python 2.7
需要用到的库:re,xlwt,urllib,collections
1.分析网页链接
1).首先,打开中彩网的福彩3D,查看3D开奖数据http://www.zhcw.com/3d/kaijiangshuju/index.shtml?type=0
2).我们用chrome浏览器,分析一下网站的结构和源码
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
3).页面分析结果
- 经过对开奖数据页面分析,总共有230页,链接也很规律
- 思路为从开奖数据页面抓取开奖日期、开奖期数及开奖号码等数据
- 然后循环处理每一页,最后将数据写入execl表格即可
2.编写代码
新手,只要能达成目的即可,思路就简单粗暴一点
1).第一步,准备食材:
食从何来,与炒菜一个道理,首先要准备食材,要抓取到所有3D的开奖记录,那么就要获取到所有开奖页面的html源码,简单粗暴一点,循环访问第1页到第230页,将所有页面的html源码全部获取到,示例代码如下:
输出的网站源码为:
其实我们的彩票的数据都隐藏在上面这个源码html文件里面,下面我们的主要工作就是解析html文件就可以啦
2).第二步,开火爆炒
用get_3d_html()获取到的所有页面源码
使用正则表达式从中提取到开奖等数据(开奖日期、开奖期号、开奖号码)
代码如下:观察开奖数据页面源码,要获取的数据如下图红色框内的数据
构造正则:
<tr>.*?<td align=&#34;center&#34;>(.*?)</td>.*?<td align=&#34;center&#34;>(.*?)</td>.*?<td align=&#34;center&#34; style=&#34;padding-left:20px;&#34;><em>(.*?)</em>.*?<em>(.*?)</em>.*?<em>(.*?)</em></td>
>>
(u&#39;2017-08-23&#39;, u&#39;2017228&#39;, u&#39;5&#39;, u&#39;3&#39;, u&#39;5&#39;)
(u&#39;2017-08-22&#39;, u&#39;2017227&#39;, u&#39;8&#39;, u&#39;8&#39;, u&#39;5&#39;)
(u&#39;2017-08-21&#39;, u&#39;2017226&#39;, u&#39;9&#39;, u&#39;0&#39;, u&#39;3&#39;)
(u&#39;2017-08-20&#39;, u&#39;2017225&#39;, u&#39;8&#39;, u&#39;0&#39;, u&#39;1&#39;)
(u&#39;2017-08-19&#39;, u&#39;2017224&#39;, u&#39;2&#39;, u&#39;6&#39;, u&#39;5&#39;)
(u&#39;2017-08-18&#39;, u&#39;2017223&#39;, u&#39;7&#39;, u&#39;7&#39;, u&#39;8&#39;)
(u&#39;2017-08-17&#39;, u&#39;2017222&#39;, u&#39;7&#39;, u&#39;3&#39;, u&#39;1&#39;)
(u&#39;2017-08-16&#39;, u&#39;2017221&#39;, u&#39;8&#39;, u&#39;5&#39;, u&#39;7&#39;)
(u&#39;2017-08-15&#39;, u&#39;2017220&#39;, u&#39;2&#39;, u&#39;8&#39;, u&#39;7&#39;)
(u&#39;2017-08-14&#39;, u&#39;2017219&#39;, u&#39;5&#39;, u&#39;1&#39;, u&#39;3&#39;)
...
3.把数据写入表格中
经过上面几步,数据已经全部清洗完毕,现在把抓取到的开奖数据保存进excel表格中吧
- 利用xlwt模块生产一个表格对象(关于xlwt的用法可以看历史文章关于Excel表格如何处理|这篇最用心)
- 先写一个表格的头部标题
- 接着循环把获取的数据全部写入表格
- 最后保存数据
4.找出福彩3d的秘密
上面的代码还有2页的数据,现在我们把页面从range(1,3)改成range(1,22),获取全年的数据,然后分析一下,看看数字背后的秘密:
1.最频繁出现的数字
1).找出全年数字出现频率最高的3个数字
2).找出百位数出现频率最高的3个数字
3).找出十位数出现频率最高的3个数字
4).找出个位数出现频率最高的3个数字
>>
全年最火的3个数字: 8 3 9
Most popular nums: [(u&#39;8&#39;, 137), (u&#39;3&#39;, 136), (u&#39;9&#39;, 136)]
百位数最火的3个数字:3 8 1
Top3 in hundreds place: [(u&#39;3&#39;, 55), (u&#39;8&#39;, 50), (u&#39;1&#39;, 45)]
十位数最火的3个数字:7,9,5
Top3 in ten place: [(u&#39;7&#39;, 50), (u&#39;9&#39;, 47), (u&#39;5&#39;, 45)]
个位数最火的3个数字:9,5,8
Top3 in single place: [(u&#39;9&#39;, 57), (u&#39;5&#39;, 46), (u&#39;8&#39;, 46)]
2.每期出现重复数字的概率
利用set()简单的统计一下就可以了,发现Python分析数据简直太方便了
>>
全年有133次出现重复数字,近三分之一的概率
133
Duplicate num percent:31.67%
结论:
这篇文章是“路上行舟”同学投的稿,题材很新颖,思路很清晰,技术难度非常适合小白入门,在保持原文的内容的基础上,我并加入了一些数据分析地方,非常有意思的文章,欢迎更多的小伙伴投稿. 有趣,好玩,通熟易懂是我们的宗旨,对于好玩的投稿文章,我会跟你们合作一下,这篇就是一个例子
需要源码:请关注微信公众号&#34;菜鸟学python&#34;,输入f3 |
|