2、红球,红球使用分号“;”分隔,方便调用和导出
在写脚本前,建议先写伪代码,伪代码格式不是固定的,随自己喜好,主要就是在思维及算法落地前,把整个轮廓理清,可以有效降低都快写完了,发现前面有错误,结果导致整个脚本全部更新一遍这种事
的发生概率
伪代码解读:
共分为两个功能块
一就是抓取彩票数据,这个使用爬虫实现,分别抓取开奖日期、红球区、篮球区,因为考虑双色球的数据量比较庞大,所以这次使用数据库进行存储,选用的是免费又好用的mysql数据库,数据库接口文件使用MySQLdb,这个我以后会单独写一个说明,当然你也可以用文档存储,或者选择别的数据库比如oracle或者nosql的mangodb
二是用来分析彩票的,即使用彩票数据进行下一期的彩票预测,本次选用的是二项分布,这个在之前的算法里面有,就不重复说明了
下面先上脚本,再对脚本进行说明
先说说爬虫,依然是先观察页面
看过之前初级爬虫的同学应该对这个很熟悉,要爬的是1的地方,观察位置2和位置3,不难看出,每期占用一个页面,那么只要利用翻页,每次页码-1即可,下面看看1位置的源代码
在源码中搜索开奖号码,找到红圈位置,这个和伪代码中写的一样,现在看爬取正则
red_no_re=re.compile('(<=\
blue_no_re=re.compile('(<=\
date_re=re.compile('(<=开奖日期:)[0-9]+年[0-9]+月[0-9]+日')分别爬取红球,篮球,日期下面的事就好办了,将爬好的数据存入数据库,连接mysql,包含4个参数
db='pythondb'host='localhost'iuser='xxx'passwd='xxxxxx'
分别是连接数据库、连接地址、用户名、密码
因为在每期开奖之后都需要爬一次新的号码,所以我没有把这个做成一次性的,用户需要输入开始爬取页面,以及结束页面编号,当爬取到结束编号页面后则停止
为防止重复爬入数据,导致数据库数据重复,因此在数据入库前需要对库数据进行验证需要入库数据是否已存在,详见check_open_date函数
最后需要注意的是,在写入完毕后应关闭数据库连接,因为mysql默认自动commit,因此我这个没有单独commit的sql,如果是oracle不要忘记加这个
接下来是分析模块,二项分布为方便管理,单独写了个类,以后也可以单独调用,这个用法我之前的文里面有说明,就不再说了。这里有几个功能说明下
1、与爬虫一样,分析也是需要写入开始日期和结束日期的,且从库中获取case必须大于7个,否则考虑样本不足,无法分析
4、因为每个号码只有两种可能,要么出现,要么不出现,因此事件的成功率是0.5
结果是这样,看到概率最高的是2.34863516114e-08,这是一个科学技术法,大约是0.00000002349,也就是1/5000万,因此这个概率没有任何意义,当然你也可以尝试买2块钱的,买不中别赖我啊,哈哈