bs4爬虫:获取双色球中奖信息

原创 2017年09月06日 11:32:18

一、开发环境

   (1)win10

   (2)python 2.7

   (3)pycharm


二、保存数据到excel的类

import xlwt


class SavaBallDate(object):
    def __init__(self, items):
        self.items = items
        self.run(self.items)
        
    def run(self,items):
        fileName = u'双色球.xls'.encode('GBK')
        book = xlwt.Workbook(encoding='utf8')
        sheet=book.add_sheet('ball', cell_overwrite_ok=True)
        sheet.write(0, 0, u'开奖日期'.encode('utf8'))
        sheet.write(0, 1, u'期号'.encode('utf8'))
        sheet.write(0, 2, u'红1'.encode('utf8'))
        sheet.write(0, 3, u'红2'.encode('utf8'))
        sheet.write(0, 4, u'红3'.encode('utf8'))
        sheet.write(0, 5, u'红4'.encode('utf8'))
        sheet.write(0, 6, u'红5'.encode('utf8'))
        sheet.write(0, 7, u'红6'.encode('utf8'))
        sheet.write(0, 8, u'蓝'.encode('utf8'))
        sheet.write(0, 9, u'销售金额'.encode('utf8'))
        sheet.write(0, 10, u'一等奖'.encode('utf8'))
        sheet.write(0, 11, u'二等奖'.encode('utf8'))
        i = 1
        while i <= len(items):
            item = items[i-1]
            sheet.write(i, 0, item.date)
            sheet.write(i, 1, item.order)
            sheet.write(i, 2, item.red1)
            sheet.write(i, 3, item.red2)
            sheet.write(i, 4, item.red3)
            sheet.write(i, 5, item.red4)
            sheet.write(i, 6, item.red5)
            sheet.write(i, 7, item.red6)
            sheet.write(i, 8, item.blue)
            sheet.write(i, 9, item.money)
            sheet.write(i, 10, item.firstPrize)
            sheet.write(i, 11, item.secondPrize)
            i += 1
        book.save(fileName)
        


if __name__ == '__main__':
    pass
三、爬取主类(日志类见上篇文章)

import re
from bs4 import BeautifulSoup
import urllib2
from mylog import MyLog as mylog
from save2excel import SavaBallDate


class DoubleColorBallItem(object):
    date = None
    order = None
    red1 = None
    red2 = None
    red3 = None
    red4 = None
    red5 = None
    red6 = None
    blue = None
    money = 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)
        self.log.info('beging save data to excel \r\n')
        SavaBallDate(self.items)  #写入数据到excel文件
        self.log.info('save data to excel end ...\r\n')
      
        
    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 xrange(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:
            response = urllib2.urlopen(url.encode('utf8'))
        except:
            self.log.error(u'Python 返回URL:%s  数据失败  \r\n' %url)
        else:
            self.log.info(u'Python 返回URUL:%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')  #写入到txt文件
        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()

三、结果显示

(1)网站源数据


(2)txt 文件


(3)excel 文件


    总结:对于抓取后的数据可以进行数据分析,进行概率计算,说不定就中了500万,哈哈!


版权声明:本文为博主原创文章,未经博主允许不得转载。

Java爬取往期所有双色球开奖结果

梦想还是要有的,万一实现了呢?我相信经常买双色球的朋友和我都会有一个疑问,就是往期双色球的开奖结果是什么?我钟意的这一注双色球在往期是否开过一等奖,如果开过的话,基本上可以放弃这一注了,因为历史上应该...
  • ithouse
  • ithouse
  • 2016年03月16日 20:47
  • 1836

双色球复式投注奖等计算算法

算法分析: 计算双色球复式(单式也按复式计算,胆拖可先拆成复式来计算)的算法就是一个简单的排列组合算法。 例如:      选了m个红球,中了n个红球,选了k个篮球,中了j个篮球(m、n、k、j...
  • usercore
  • usercore
  • 2013年01月29日 16:28
  • 5692

Python爬虫(urllib2+bs4)+分析找出谁是水贴王(1)--数据收集

要分析谁是水贴王,首先要收集发帖和发帖者的数据。 这里测试百度贴吧的李毅吧的前100页:#coding:utf-8 import urllib2 from bs4 import BeautifulS...
  • lw_zhaoritian
  • lw_zhaoritian
  • 2016年07月13日 20:17
  • 814

C语言模拟中国福利彩票【双色球】

首先,强烈推荐一个C,C++开发的IDE工具,比VC简介万倍。我在学习C语言(大学公共课程C语言【谭浩强版】)的时候,就用的这个开发工具,很好用。 百度搜索: C_C++程序设计学习与实验系...
  • Abubu123
  • Abubu123
  • 2016年06月17日 13:31
  • 602

requests和bs4的python爬虫入门

现在就简单的讲下这几个月的学习成果嘛~~~ 爬虫其实爬的都是源代码,然后再通过对源代码进行过滤,得出我们想要的东西~ 有时会需要一些正则的东西~ 比如一些文本啊,图片的src啊,链接的href啊~~ ...
  • qq_25936689
  • qq_25936689
  • 2016年10月18日 20:35
  • 6928

使用bs4和urllib2抓取网页,都是坑

bs4和urllib2抓取网页时很有可能会遇到的坑,都是泪。
  • geniusluzh
  • geniusluzh
  • 2015年01月15日 21:03
  • 2130

使用爬虫获取彩票开奖结果

把彩票看作一个概率游戏,需要收集足够多期的开奖信息来作为分析对象。为了避免每次都手工输入数据,所以想办法用爬虫到网络上获取最新一期开奖数据并保存起来。代码很简单,分成三个部分:1、定时任务 2、网页分...
  • qyshooter
  • qyshooter
  • 2015年07月04日 00:18
  • 4826

【python爬虫小实战】python3.x用requests和bs4实现有道翻译(中英文)

一直用的是python3.x版本的,刚开始学爬虫的时候学长给了我个爬有道翻译的小程序,实现中英文翻译,由于是用urllib库的,当时也是刚接触python,所以一脸懵逼,现在学了一个月了,回头再看了一...
  • karmacode
  • karmacode
  • 2017年08月07日 00:00
  • 479

Python网络爬虫requests、bs4爬取空姐网图片

如之前的几篇文章(Python爬虫框架之Scrapy详解、Python爬虫框架Scrapy之爬取糗事百科大量段子数据),使用了Scrapy框架并且爬取了糗事百科的段子存入MongoDB中。Scrapy...
  • c315838651
  • c315838651
  • 2017年05月26日 21:08
  • 1835

Python进阶(十九)-Python3安装第三方爬虫库BeautifulSoup4

Python进阶(十九)-Python3安装第三方爬虫库BeautifulSoup4  在做Python3爬虫练习时,从网上找到了一段代码如下:#使用第三方库BeautifulSoup,用于从html...
  • sunhuaqiang1
  • sunhuaqiang1
  • 2017年03月25日 14:36
  • 44862
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:bs4爬虫:获取双色球中奖信息
举报原因:
原因补充:

(最多只允许输入30个字)