背景:

小时候,有种游戏,两个主人公:白XX和曾XX,每个家庭把他俩像活菩萨一样供着,供他们吃,供他们穿

做生意的老板为了这两位活菩萨,关门大吉

农民为了这两位活菩萨卖牛卖田变卖家产

做官的为了这两位活菩萨丢掉乌纱帽

跳楼,自杀,跳河,跑路 成了一时的风气

当然,买码也是闹出很多笑话的

比如:不识字的农民看个CCTV7频道还看出了个特码,最后押注了07,还特么中了大奖。

很多人为了白XX和曾XX,最后变成了CCTV少儿频道天线宝宝的忠实粉丝,这也可以看出特码啊,有木有啊

想起一位长者退休后俨然成为白XX和曾XX的文员,每天都会手动更新记录资料和各种画图,当时我就在想要是我读书能有他一半认真,起码要把北京城读一圈才肯放手。

干活开始,准备将这个东西作为一个系列来深入的研究一下

巧妇难为无米之炊,今天Buddyquan就先想办法把数据从网上弄下来

知识点:splinter库的使用,将抓取数据存入数据库,pandas库连接Mysql数据库进行数据的调用和基本统计整理

教程:谷歌chrome浏览器驱动的安装

简单阐述为什么这次数据抓取选择这个库的原因:

1.一切都得从12306开始说起,当时已经自己倒腾出了查票的一套小程序,可是一直在想怎么绕过那个验证码,后来到网上各种找,看有没有解决办法,真的是东边不亮,亮西边,解决验证码的答案是没找到,倒是搜出了一大把标题党,其实内容就是介绍这个库的使用,耐着性子边操边练,也算入了门,后来去读了官方文档,发现这个家伙用处还是挺大

2.查了很多XXXX彩的网站,发现坑爹的一点就是所有开奖记录都是js生成的网页代码,刚好splinter库的broswer.html返回的就是响应了js后的网页文本(和审查元素看到的一样一样的)

3.1976年到2017年,也就41年,也就是说只要访问41次网页即可,对内存也造成不了多大的伤害,综合考虑,这个splinter就可以派上用场了

那么splinter能干些啥呢?用网上的一句话概括就是:

Splinter执行的时候会自动打开你指定的浏览器,访问指定的URL。

然后你所开发的模拟的任何行为,都会自动完成,你只需要坐在电脑面前,像看电影一样看着屏幕上各种动作自动完成然后收集结果即可。

使用参考文档:http://www.chinaz.com/program/2015/1209/481234.shtml

官方文档:https://splinter.readthedocs.io/en/latest/tutorial.html

怎么安装splinter和chrome浏览器驱动

Step1.安装splinter库(pip install splinter)

step2:安装浏览器驱动,我选择的是chrome的驱动

1.下载。2.解压。3.放至C:\Windows\System32 4.OK

驱动链接:http://pan.baidu.com/s/1nv2ni5N 密码:5c1c

接下来就开始抓取开奖结果相关的等一些字段吧!

网址通过浏览器搜索找到(这种类型的网站,有很多很多的。不过开奖记录基本上都是js生成的。)

我们看到,这种开奖记录,比小时候大家只去关注最终数字,情况是好的多,连笔画,五行都特么有。拿着放大镜数了一下共27个有价值字段我们可以取出

1.建个表,把数据写入数据库这种办法还是不错的,到时不管什么时候需要做有趣的统计分析研究的时候,直接拿数据就行了。

不用建表语句写入程序中是因为有没有发现navicat for mysql确实很好用啊。

2.网页基本分析完成,表也随着建好了之后,就是取数据了。

3.成功绕开用正则和json去解析js生成代码的痛苦,直接上splinter。

# coding utf-
import requests
from bs4 import BeautifulSoup
from splinter.browser import Browser
import pymysql
from PIL import Image
import pandas as pd #用作之后做数据处理分析
b = Browser(driver_name="chrome") #启动浏览器驱动
con=pymysql.connect(host=,user=',db='quan',charset='utf8') #连接数据库
cur=con.cursor() #创建游标
def get_html(url):
    b.visit(url)
    html=b.html
    return html
pic_url='http://cimg2.163.com/catchpic/E/E7/E788DE8C249168F3C6B6CF878A633E04.jpg'
url1='http://www.*****.com/kj/'
year=[a ,)]
num=
for c in year:
    url=url1+str(c)
    s=BeautifulSoup(get_html(url),'lxml')
    length=len(s.find_all('tr',class_='nowTo001'))
    for i in range (length):
        value_list=[]
        for d in s.find_all('tr',class_='nowTo001')[i].stripped_strings:
            value_list.append(d)
        try:
            sql="replace into buddyquan \
            (year,qishu,ma1,shengxiao1,ma2,shengxiao2,ma3,shengxiao3,ma4,shengxiao4,ma5,shengxiao5,ma6,shengxiao6,tema,\
            texiao,tebo,tetou,danshuang,wuxing,jiaye,daxiao,weishu,duanwei,bihua,nannv,heshu,zonghe) \
            values ('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s',\
            '%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')" \
            %(value_list[][:],value_list[][:-],value_list[],value_list[],value_list[],value_list[],\
             value_list[],value_list[],value_list[],value_list[],value_list[],\
            value_list[],value_list[],value_list[],value_list[],value_list[],\
             value_list[],value_list[],value_list[],value_list[],value_list[],\
             value_list[],value_list[],value_list[],value_list[],value_list[],value_list[],value_list[])
            cur.execute(sql)
            con.commit() #提交事务
            print (][:],value_list[][:],num))
        except Exception as e:
            print ('插入错误\n%s ' % e)
            con.rollback() #回滚事务
        num=num+
    print (][:])
print ('特码来啦!\n已成功完成历年开奖结果采集,共 %s 期' % num)
with open ("d://missbai.jpg",'wb') as f:
    f.write(requests.get(pic_url).content)
missbai=Image.open("d://missbai.jpg")
missbai.show()
b.quit()

代码的方法很笨,还有很多地方可以优化,烦请各位大神多多指教

吃着火锅唱着歌,看着浏览器翻云覆雨狂奔之后,数据存入到了数据库中

这里用一个num打印了期数

可以看到,自开奖至今,已经进行了4865次,有多少人N年如一日啊。哎

数据已写入数据库,今天就先简单的用pandas库稍微热热身吧(虽然这点数据量用excel已经可以起飞了)

我们先将pd的行数设置为8行,显示宽度调为200,这样更便于查看数据

读取数据库数据所有数据(这里可以选择你想读取的任何数据,可以理解成用SQL提取数据然后用pandas来交互)

查看一下数据(效果还是差了点,列的宽度还存在问题,可以通过pd.set_option('display.max_colwidth',20)来设置列的最大宽度,将就着用吧)

我们先把显示台的最大宽度调为49

来来来,天线宝宝的粉丝们,猜猜哪一个数字开奖频数最大啊

叫你买4X,买买买。本命年多个数字没毛线大作用啊。

那你知道哪个生肖频数最大吗?

你还继续供着白XX和曾XX,把天线宝宝作为偶像的话,真的会变猪的啊。

预知后事如后,请听下回分解

注:本文的统计分析描述,毫无参考意义,开奖数据均已经过掺假处理,所展示数据均为虚拟数据,珍爱生命,远离白X姐和天线宝宝

概率事件的东西总是个磨人的小妖精,你心动了吗?因个人能力有限,如果你心动了,真诚的邀请您一起加入之后很多有趣的数据统计分析工作。

能力有限,做的不好的地方,大神们多多包含,尤其是逻辑与思维上的东西,需要大神们看到了多多指教和斧正。

Buddyquan博客:https://home.cnblogs.com/u/buddyquan/

QQ:1749061919 爬虫交流,数据交流

最新文章

  1. MyEclipse导入jquery-1.8.0.min.js等文件报错的解决方案
  2. js小程序写法优化
  3. 使用宏批量将多个csv文件转成excel文件
  4. Codeforces Round #196 (Div. 2) B. Routine Problem
  5. unity3d插件Daikon Forge GUI 中文教程6-高级控件richtextlabel的使用
  6. bigworld源码分析(1)—— 研究bigworld的意义和目标
  7. CSS3 旋转代码备忘
  8. 部署Zipkin分布式性能追踪日志系统的操作记录
  9. [原]DbHelper-SQL数据库访问助手
  10. SqlHelper帮助类
  11. Sprint第二个冲刺(第六天)
  12. Android 如何全局获取Context
  13. 使用c#检测文件正在被那个进程占用 判断文件是否被占用的两种方法
  14. React 万能的函数表达式
  15. JS App
  16. 解决CxGrid Filter 后,通过 Dataset 循环时得出的结果与 Grid显示不同步的问题.
  17. Xp输入法不见了
  18. Django Template(模板)
  19. sklearn-woe/iv-乳腺癌分类器实战
  20. [UWP 自定义控件]了解模板化控件(6):使用附加属性

热门文章

  1. LNMP架构部署
  2. 数据库中float类型字段,转化到前端显示,统一保留两位小数
  3. 开篇-我眼中的FPGA
  4. Zabbix服务网页报错汇总
  5. 裴波那契查找详解 - Python实现
  6. CSS样式命名整理(非原创)
  7. UWP更改标题栏颜色
  8. 基于SwiperJs的H5/移动端下拉刷新上拉加载更多的效果
  9. key-value存储数据库--Redis
  10. 基于docker+reveal.js搭建一个属于自己的在线ppt网站