2017年双色球中奖号码

       网络爬虫,又称网页蜘蛛、网络机器人。随着计算机技术的高速发展,互联网中的信息量越来越大,搜索引擎应运而生。传统的搜索引擎会有返回结果不精确等局限性。为了解决传统搜索引擎的局限性,专用型网络爬虫在互联网中越来越常见。同时,专用型网络爬虫具有专用性,可以根据制定的规则和特征,最后只体现和筛选出有用的信息。

在国内,唯一能合法暴富的方法似乎只有彩票中奖了。虽然人人都知道中奖的概率很低,但希望总是存在的。中奖的号码虽然不能直接推算出来,但根据概率计算将中奖的稍微调大点还是可能的,在进行概率计算前要做的就是收集数据,好在中国福利彩票并不禁止收集数据进行概率计算。

2.利用python在网页收集信息

       本次实验主要是爬取2017年双色球中奖号码以及统计中奖结果。

import re
from bs4 import BeautifulSoup
import ur11ib2
from mylog import MyLog as mylog


class DoubleColorBallItem(object):
    date=None #开奖日期
    order=None #当年的顺序
    red1=None #第一个红球的号码
    red2=None #第二个红球的号码
    red3=None #第三个红球的号码
    red4=None #第四个红球的号码
    red5=None #第五个红球的号码
    red6=None #第六个红球的号码
    blue=None #篮球号码
    mony=None #彩池金额
    firstPrize=None  #一等奖中奖人数
    secondPrize=None #二等奖中奖人数
class GetDoubleColorBallNumber(object):
    '''这个类用于获取双色球中奖号码,返回一个txt文件
    '''
    def _init_(self):
        self.urls=[]
        self.log=mylog()
        self.getUrls()
        self.items=self.spider(self.urls)
        self.pipelines(self.items)


    def getUrls(self):
        '''获取数据来源网页
        '''
        URL=r'http://kaijiang.zhcw.com/zhcw/html/ssq/list_1.html'
        htmlContent=self.getResponseContent(URL)
        soup=BeautifulSoup(htmlContent,'lxml')
        tag=soup.find_all(re.compile('P'))[-1]
        pages=tag.strong.get_text()
        for i in xrang(1,int(pages)+1):
            url=r'http://kaijiang.zhcw.com/zhcw/html/ssq/list_'+str(i) +'.html'
            self.urls.append(url)
            self.log.info('u添加URL:%S到URLS\r\n'%url)
    def getResponseContent(self,url):
        '''这里单独使用一个函数返回页面返回值,是为了后期方便地加入proxy和headers等
        '''
        try:
            respone=urllib2.urlopen(url.encode('utf8'))
        except:
            self.log.error(u'python返回URL:%s数据失败 \r\n'%url)
        else:
            self.log.info(u'python返回URL:%s数据成功 \r\n'%url)
            return response.read()


    def spider(self,urls):
        '''这个函数的作用是从获取的数据中过滤得到中奖信息
        '''
        items=[]
        for url in urls:
            htmlContent=self.getResponseContent(url)
            soup=BeautifulSoup(htmlContent,'lxml')
            tags=soup.find_all('tr',attrs={})
            for tag in tags:
                if tag.find('em'):
                    item=DoubleColorBallItem()
                    TagTd=tag.find_all('td')
                    item.date=TagTd[0].get_text()
                    item.order=TagTd[1].get_text()
                    TagEm=TagTd[2].find_all('em')
                    item.red1=tagEm[0].get_text()
                    item.red2=tagEm[1].get_text()
                    item.red3=tagEm[2].get_text()
                    item.red4=tagEm[3].get_text()
                    item.red5=tagEm[4].get_text()
                    item.red6=tagEm[5].get_text()
                    item.blue=tagEm[6].get_text()
                    item.money=tagTd[3].find('strong').get_text()
                    item.firstPrize=tagTd[4].find('strong').get_text()
                    item.secondPrize=tagTd[5].find('strong').get_text()
                    items.append(item)
                    self.log.info(u'获取日期为:%s的数据成功'%(item.date))
        return items
    def pipelines(self,items):
        fileName=u'双色球.txt'.encode(GBK)
        with open(fileName,'w') as fp:
            for item in items:
                fp.write('%s %s \t %s %s %s %s %s %s %s \t %s \t %s %s \n' %(item.date,item.order,item.red1,item.red2,item.red3,item.red4,item.red5,item.red6,item.blue,item.money,item.firstPrize,item.secondPrize))
                self.log.info(u'将日期为:%s的数据存入"%s"...' %(item.date,fileName.decode('GBK')))

if _name_=='_main_':
    GDCBN=GetDoubleColorBallNumber()





 

      爬取结果如图所示(截取部分截图):

 

         图2.1 2017年每期开奖信息

2017年中奖号码如图所示(截取部分图):

图2.2 2017年每期开奖号码

       将中奖号码保存至qiu.txt,分析统计结果如图所示:

 

import jieba   #处理中文需要的库
fo=open('qiu2.txt','r')#把qiu.txt的内容读出到of里
numbers=fo.read()#把of的内容给numbers
#print(numbers)
numberss=list(jieba.cut(numbers))#精准模式来分词
exp={' ','\n'} #把不要统计的词放在一个集合里  
dict={} #建立空字典来存需要统计的词频         
keys=set(numbers)-exp
#在文的集合里(词频不重复、无序),排除我们不要的词,即exp里面的词
for i in keys: #对一个字典的键值(唯一),进行统计
    dict[i]=numbers.count(i)#统计的内容词频来自numbers里(里面的词可能会重复)
    count=list(dict.items())
#因为字典式不能排序的,所以要变成可以排序的列表。具体是对字典里的什么内容排序呢?就是对字典里的每一对值排序,怎么才能对一对排序呢?字典的items()就是输出一对值得函数。
count.sort(key=lambda x:x[1],reverse=True) #lambda()是个定义函数匿名的
for i in range(33): #打印统计数字的出现次数
    print(count[i])
fo.close()

 图2.3 统计2017年中奖号码

       用工具做成词云的结果为:

import jieba
from wordcloud import WordCloud
import matplotlib.pyplot as plt



txt=open('qiu2.txt','r',encoding='gb2312').read()


cy = WordCloud(font_path='msyh.ttc').generate(txt)
                  #wordcloud默认不支持中文,这里的font_path需要指向中文字体
plt.imshow(cy, interpolation='bilinear')
plt.axis("off")
plt.show()

 

图2.4 2017年中奖号码词云

3.结论

       由图可以看出,2017呢喃双色球中奖的号码中,号码21、15和14和23出现的比较多一些,可以适当考虑这几个号码。

 

posted @ 2017-10-28 21:20  03郭丽红  阅读(7295)  评论(1编辑  收藏  举报