首先声明,赌博一定不是什么好事,也完全没有意义,不要指望用彩票发财。之所以写这个,其实是用来练手的,可以参考这个来预测一些其他的东西,意在抛砖引玉。
啰嗦完了,马上开始,先上伪代码
打开网址
读取内容内容解析
根据源码得到需爬取内容
1、开奖日期:2018年8月26日
2、红球
3、篮球
打开数据库连接
爬取内容写入数据库
共3个字段
1、开奖日期
2、红球,红球使用分号“;”分隔,方便调用和导出
3、篮球
在写脚本前,建议先写伪代码,伪代码格式不是固定的,随自己喜好,主要就是在思维及算法落地前,把整个轮廓理清,可以有效降低都快写完了,发现前面有错误,结果导致整个脚本全部更新一遍这种事
的发生概率
伪代码解读:
共分为两个功能块
一就是抓取彩票数据,这个使用爬虫实现,分别抓取开奖日期、红球区、篮球区,因为考虑双色球的数据量比较庞大,所以这次使用数据库进行存储,选用的是免费又好用的mysql数据库,数据库接口文件使用MySQLdb,这个我以后会单独写一个说明,当然你也可以用文档存储,或者选择别的数据库比如oracle或者nosql的mangodb
二是用来分析彩票的,即使用彩票数据进行下一期的彩票预测,本次选用的是二项分布,这个在之前的算法里面有,就不重复说明了
下面先上脚本,再对脚本进行说明
<span style="color: #800000">'''<span style="color: #800000">
打开网址
读取内容
内容解析
根据源码得到需爬取内容
1、开奖日期:2018年8月26日
2、红球
<li class="ball_red">03
<li class="ball_red">07
<li class="ball_red">08
<li class="ball_red">14
<li class="ball_red">25
<li class="ball_red">32
3、篮球
<li class="ball_blue">06
打开数据库连接
爬取内容写入数据库
共3个字段
1、开奖日期
2、红球,红球使用分号“;”分隔,方便调用和导出
3、篮球
create table tow_color_ball(open_date varchar(10),red_n varchar(20),blue_n varchar(2))
<span style="color: #800000">'''
<span style="color: #0000ff">import<span style="color: #000000"> urllib
<span style="color: #0000ff">import<span style="color: #000000"> urllib2
<span style="color: #0000ff">import<span style="color: #000000"> re
<span style="color: #0000ff">import<span style="color: #000000"> numpy as np
<span style="color: #0000ff">import<span style="color: #000000"> operator
<span style="color: #0000ff">import<span style="color: #000000"> MySQLdb
<span style="color: #008000">#<span style="color: #008000"> 连接mysql
<span style="color: #0000ff">def<span style="color: #000000"> conn_db():
db = <span style="color: #800000">'<span style="color: #800000">pythondb<span style="color: #800000">'<span style="color: #000000">
host = <span style="color: #800000">'<span style="color: #800000">localhost<span style="color: #800000">'<span style="color: #000000">
iuser = <span style="color: #800000">'<span style="color: #800000">xxx<span style="color: #800000">'<span style="color: #000000">
passwd = <span style="color: #800000">'<span style="color: #800000">xxxxxx<span style="color: #800000">'<span style="color: #000000">
conn = MySQLdb.connect(db = db,host = host,user = iuser,passwd =<span style="color: #000000"> passwd)
cursor =<span style="color: #000000"> conn.cursor()
<span style="color: #0000ff">return<span style="color: #000000"> cursor
<span style="color: #008000">#<span style="color: #008000"> 处理网页获取页面源码
<span style="color: #0000ff">def<span style="color: #000000"> get_html_values(url):
url_open =<span style="color: #000000"> urllib.urlopen(url)
url_read =<span style="color: #000000"> url_open.read()
<span style="color: #0000ff">return<span style="color: #000000"> url_read
<span style="color: #008000">#<span style="color: #008000"> 处理源码,获取日期、红球、篮球
<span style="color: #0000ff">def<span style="color: #000000"> manage_html(html_values):
red_no_re = re.compile(<span style="color: #800000">'<span style="color: #800000">(?<=\<li class\=\"ball_red\">)[0-9]+(?=\<\/li>)<span style="color: #800000">'<span style="color: #000000">)
blue_no_re = re.compile(<span style="color: #800000">'<span style="color: #800000">(?<=\<li class\=\"ball_blue\">)[0-9]+(?=\<\/li>)<span style="color: #800000">'<span style="color: #000000">)
date_re = re.compile(<span style="color: #800000">'<span style="color: #800000">(?<=开奖日期:)[0-9]+年[0-9]+月[0-9]+日<span style="color: #800000">'<span style="color: #000000">)
red_no_list =<span style="color: #000000"> re.findall(red_no_re,html_values)
red_numbers = <span style="color: #800000">'<span style="color: #800000">;<span style="color: #800000">'<span style="color: #000000">.join(red_no_list)
blue_number =<span style="color: #000000"> re.search(blue_no_re,html_values)
blue_number =<span style="color: #000000"> blue_number.group()
date_value =<span style="color: #000000"> re.search(date_re,html_values)
date_value =<span style="color: #000000"> date_value.group()
<span style="color: #0000ff">return<span style="color: #000000"> date_value,red_numbers,blue_number
<span style="color: #008000">#<span style="color: #008000"> 可恶的日期,竟然是YYYY年MM月DD日,需要改成YYYY-MM-DD
<span style="color: #0000ff">def<span style="color: #000000"> manage_date(date_value):
date_value = date_value.replace(<span style="color: #800000">'<span style="color: #800000">年<span style="color: #800000">',<span style="color: #800000">'<span style="color: #800000">-<span style="color: #800000">').replace(<span style="color: #800000">'<span style="color: #800000">月<span style="color: #800000">',<span style="color: #800000">'<span style="color: #800000">-<span style="color: #800000">').replace(<span style="color: #800000">'<span style="color: #800000">日<span style="color: #800000">',<span style="color: #800000">''<span style="color: #000000">)
<span style="color: #0000ff">return<span style="color: #000000"> date_value
<span style="color: #008000">#<span style="color: #008000"> 处理页面编号,每次编号-1,也就是说end_page要小于url中的页码
<span style="color: #0000ff">def<span style="color: #000000"> get_page(url,end_page):
url_num = re.search(<span style="color: #800000">'<span style="color: #800000">(?<=\/)[0-9]+(?=.)<span style="color: #800000">'<span style="color: #000000">,url)
url_num =<span style="color: #000000"> url_num.group()
<span style="color: #0000ff">if int(end_page) ><span style="color: #000000"> int(url_num):
<span style="color: #0000ff">return <span style="color: #800000">'<span style="color: #800000">end<span style="color: #800000">'<span style="color: #000000">
url_num_1 = int(url_num) - 1<span style="color: #000000">
url =<span style="color: #000000"> url.replace(url_num,str(url_num_1))
<span style="color: #0000ff">return<span style="color: #000000"> url
<span style="color: #008000">#<span style="color: #008000"> 查看库中是否已存在开奖日期,防止重复写入
<span style="color: #0000ff">def<span style="color: #000000"> check_open_date(open_date):
conn =<span style="color: #000000"> conn_db()
check_sql = <span style="color: #800000">'<span style="color: #800000">select 1 from tow_color_ball where open_date = %r<span style="color: #800000">' %<span style="color: #000000">open_date
conn.execute(check_sql)
excur =<span style="color: #000000"> conn.fetchall()
conn.close()
<span style="color: #008000">#<span style="color: #008000">如过未查到excur == ()
<span style="color: #0000ff">return<span style="color: #000000"> excur