基于python语言,使用爬虫和深度学习来预测双色球(一、数据的准备)

在2019年10月某个夜黑风高的夜晚,程序猿小甘在散步过程中,路过了一家“中国福利彩票站”时,看着陆续走出的彩民,突然也升起了一颗能中500W的心,然而作为一位只懂双色球中奖规则的垃圾彩民来说,买双色球也只能买机选,顿时觉得中奖希望渺茫(虽然渺茫但是还是去买了注机选双色球...),在排队购买过程中,听着那些经验丰富的彩民说着什么黄金分割选号、尾数分布选号、相减排除等等时,才发现原来买彩票还有这么多讲究。当时灵光一现,作为一名深度学习搬砖师,为什么不结合大数据和深度学习来预测双色球的结果呢?于是程序猿小甘准备结束CSDN的四年潜水,开始了他在CSDN的博主之旅....

项目工作环境:

  1. python3.5

  2. tensorflow-gpu1.9.0

  3. beautifulsoup

  4. windows10

  5. ....

环境配置都比较简单,网上也有非常多的教程,在这里我就不再进行赘述了

数据准备:

不论使用深度学习来解决预测、识别、分类等等问题,一份足够庞大的数据都是不可少的,而这次小甘准备通过爬虫的方式,从网上爬取往期双色球中奖号码来作为训练和测试数据。

通过某度搜索"双色球中奖结果",比较了500彩票网、彩经网、福彩网双色球官网、http://kaijiang.zhcw.com/zhcw/html/ssq/list_1.html等等,发现http://kaijiang.zhcw.com/zhcw/html/ssq/list_1.html更利于爬取数据,于是果断的开始了爬虫的编写。

该网站的中奖结果结构如下:

基于python语言,使用爬虫和深度学习来预测双色球(一、数据的准备)_第1张图片

我们只需要将每一期的开奖日期、期号、中奖号码,按照('2019-07-23','2019085', '01,04,14,18,24,29,04')这样的格式保存在txt文件中就行了。

  1. 对网页源代码进行分析,我们所需要的数据所在代码在如下图,主要需要和标签中的内容基于python语言,使用爬虫和深度学习来预测双色球(一、数据的准备)_第2张图片
  2. 因为我们需要爬取出该网站尽可能多的数据,所以还需要中奖结果的总页数,如下图基于python语言,使用爬虫和深度学习来预测双色球(一、数据的准备)_第3张图片
  3. 使用Python编写爬虫代码,我们主要使用了beautifulsoup来完成数据爬取,主要代码片段如下。
#获取该网页的源代码
def getPage(url):
    try:
        user_agent = 'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36'
        header = {'User-Agent': user_agent}
        request = urllib.request.Request(url,headers=header)
        response = urllib.request.urlopen(request)
        pageCode = response.read().decode('utf-8')
        return pageCode
    except Exception as e:
        print('Get Page Fail')
        print("An error has occurred:"+e)

#将双色球的信息写入txt文件
def writePage(date,dateNum,num):
    #日期的列表会比期号长1,因为最后加入了一组页数统计,所以不能以日期列表长度来写数据
    with open('./DCnumber.txt','a+') as f:
        for x in range(0,len(num)):
            f.write('('+date[x]+';'+dateNum[x]+';'+num[x]+')'+'\n')
            #保存格式为每行('2019-09-24';'2019112';'03,12,14,17,23,27,01')

#获取总页数
def getPageNum(url):
    try:
        pageCode = getPage(url)
        soup = BeautifulSoup(pageCode,'lxml')
        td_code = soup.find('td',colspan='7')       #获取表格中包含页数的列
        result = td_code.get_text().split(' ')      #将该列转换成列表,我们
        #result = ['\n', '共125', '页', '/2484', '条记录', '首页', '上一页', '下一页', '末页', '当前第', '2', '页']
        #用正则表达式从reslut[1]中提取出数字
        list_num = re.findall("[0-9]{1}",result[1])
        #将提取出来的数字转换成十进制的数值
        page_num = int(list_num[0]+list_num[1]+list_num[2])
        return page_num
    except Exception as e:
        print('Get Page Number Fail')
        print("An error has occurred:" + e)

#获取单页中的双色球中奖信息
def getDC(url):
    #循环读取每一页的信息
    for num in range(1,getPageNum(url)+1):
        print('begin get page:'+str(num))
        href = 'http://kaijiang.zhcw.com/zhcw/html/ssq/list_'+str(num)+'.html'
        page = BeautifulSoup(getPage(href),'lxml')
        em_list = page.find_all('em')   #获取该页面中的em内容,即中奖编号所在
        td_list = page.find_all('td',{'align':'center'})    #获取该页面中的开奖日期,期号等信息

        i = 1   #计数器,每七个号码为一组
        DCnum = ''      #存放一期中奖号码
        DCnum_list = []     #存放该页每期的中奖号码
        for em in em_list:
            emnum = em.get_text()
            if i == 7:
                DCnum = DCnum + emnum
                DCnum_list.append(DCnum)
                DCnum = ''          #重置一期的号码
                i = 1               #重置计数器
            else:
                DCnum = DCnum + emnum + ','
                i += 1

        DCdate = []         #存放开奖日期
        DCdateN = []        #存放期号
        t = 1              #计数器,每5个为一组,我们只需要每组的前两个td内容
        for td in td_list:
            td_text = td.get_text()
            if t == 1:
                DCdate.append(td_text)
                t += 1
            elif t == 2:
                DCdateN.append(td_text)
                t += 1
            elif t == 5:
                t = 1
            else:
                t += 1
        writePage(DCdate,DCdateN,DCnum_list)

到目前为止,训练数据和测试数据就准备完毕了,将在下一篇中介绍到重点内容,即基于Tensorflow的深度学习模型训练和数据预测。

终于完成了属于我的第一篇博文,所谓万事开头难,肯定会有很多不足的地方,希望大家能谅解...

你可能感兴趣的:(深度学习)