【小白學爬蟲】用Python分析福彩3D|發現數字的秘密

這是菜鳥學Python的粉絲第3篇原創投稿

閱讀本文大概需要3分鐘

本篇作者:路上行舟+菜鳥學python 合作完成

相信福利彩票大家都買過吧,既然學爬蟲為何不動手寫個小程序抓一下呢,說不定還能發現福彩的秘密,本篇主要面向於對Python爬蟲感興趣的零基礎的同學,實例為中彩網的福利3D彩票,比較有趣,小夥伴們一起動手開始吧

環境:Windows XP

Python :Python 2.7

需要用到的庫:re,xlwt,urllib,collections

1.分析網頁鏈接

1).首先,打開中彩網的福彩3D,查看3D開獎數據zhcw.com/3d/kaijiangshu

2).我們用chrome瀏覽器,分析一下網站的結構和源碼

  • 訪問:

kaijiang.zhcw.com/zhcw/

  • 跳轉到:
  • kaijiang.zhcw.com/zhcw/

經過觀察和分析,開獎數據鏈接很規律,如下:

  • 第一頁:

kaijiang.zhcw.com/zhcw/

  • 最後一頁:

kaijiang.zhcw.com/zhcw/

3).頁面分析結果

  • 經過對開獎數據頁面分析,總共有230頁,鏈接也很規律
  • 思路為從開獎數據頁面抓取開獎日期、開獎期數及開獎號碼等數據
  • 然後循環處理每一頁,最後將數據寫入execl表格即可

2.編寫代碼

新手,只要能達成目的即可,思路就簡單粗暴一點

1).第一步,準備食材:

食從何來,與炒菜一個道理,首先要準備食材,要抓取到所有3D的開獎記錄,那麼就要獲取到所有開獎頁面的html源碼,簡單粗暴一點,循環訪問第1頁到第230頁,將所有頁面的html源碼全部獲取到,示例代碼如下:

輸出的網站源碼為:

其實我們的彩票的數據都隱藏在上面這個源碼html文件裡面,下面我們的主要工作就是解析html文件就可以啦

2).第二步,開火爆炒

用get_3d_html()獲取到的所有頁面源碼

使用正則表達式從中提取到開獎等數據(開獎日期、開獎期號、開獎號碼)

代碼如下:觀察開獎數據頁面源碼,要獲取的數據如下圖紅色框內的數據

構造正則:

<tr>.*?<td align="center">(.*?)</td>.*?<td align="center">(.*?)</td>.*?<td align="center" stylex="padding-left:20px;"><em>(.*?)</em>.*?<em>(.*?)</em>.*?<em>(.*?)</em></td>

>>

(u2017-08-23, u2017228, u5, u3, u5)

(u2017-08-22, u2017227, u8, u8, u5)

(u2017-08-21, u2017226, u9, u0, u3)

(u2017-08-20, u2017225, u8, u0, u1)

(u2017-08-19, u2017224, u2, u6, u5)

(u2017-08-18, u2017223, u7, u7, u8)

(u2017-08-17, u2017222, u7, u3, u1)

(u2017-08-16, u2017221, u8, u5, u7)

(u2017-08-15, u2017220, u2, u8, u7)

(u2017-08-14, u2017219, u5, u1, u3)

...

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: [(u8, 137), (u3, 136), (u9, 136)]

百位數最火的3個數字:3 8 1

Top3 in hundreds place: [(u3, 55), (u8, 50), (u1, 45)]

十位數最火的3個數字:7,9,5

Top3 in ten place: [(u7, 50), (u9, 47), (u5, 45)]

個位數最火的3個數字:9,5,8

Top3 in single place: [(u9, 57), (u5, 46), (u8, 46)]

2.每期出現重複數字的概率

利用set()簡單的統計一下就可以了,發現Python分析數據簡直太方便了

>>

全年有133次出現重複數字,近三分之一的概率

133

Duplicate num percent:31.67%

結論:

這篇文章是「路上行舟」同學投的稿,題材很新穎,思路很清晰,技術難度非常適合小白入門,在保持原文的內容的基礎上,我並加入了一些數據分析地方,非常有意思的文章,歡迎更多的小夥伴投稿. 有趣,好玩,通熟易懂是我們的宗旨,對於好玩的投稿文章,我會跟你們合作一下,這篇就是一個例子

需要源碼:請關注微信公眾號"菜鳥學python",輸入f3

推薦閱讀:

Pandas中的鏈式方法
【Python基礎教程】閱讀&實驗報告〖一〗
技術專題—Python黑客【優質內容聚合貼】
Python面向對象編程從零開始(2)—— 與對象相互了解

TAG:Python | 爬虫计算机网络 |