ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

初识python 之 爬虫:爬取双色球中奖号码信息

2019-07-30 17:01:09  阅读:343  来源: 互联网

标签:双色球 ball python 中奖号码 excel list 爬取 蓝球


人生还是要有梦想的,毕竟还有python。比如,通过python来搞一搞彩票(双色球)。

注:此文仅用于python学习,结果仅作参考。

用到知识点:
1、爬取网页基础数据
2、将数据写入excel文件
3、将数据统计结果可视化输出

主要步骤:

  1、获取双色球网页中,中奖号码信息数据
  2、将数据放入excle(学习使用python将数据写入excel)
  3、分别将红球中奖号码、蓝球中奖号码放入两个列表中,用于后续分别统计红球、蓝球出现的中奖次数
  4、获取球出现的次数
  5、使用可视化工具以柱状图、折线图形式展示数据处理结果

详细代码如下:
#!/user/bin env python
# author:Simple-Sir
# time:2019/7/29 16:32
# 爬取双色球中奖号码数据

# 1、获取双色球网页中,中奖号码信息数据
# 2、将数据放入excle(学习使用python将数据写入excel)
# 3、分别将红球中奖号码、蓝球中奖号码放入两个列表中,用于后续分别统计红球、蓝球出现的中奖次数
# 4、获取球出现的次数
# 5、使用可视化工具以柱状图、折线图形式展示数据处理结果

import requests
from bs4 import BeautifulSoup
import openpyxl
from pyecharts.charts import Bar,Line  # 官方已取消 pyecharts.Bar 方式导入
from pyecharts import options
from pyecharts.globals import ThemeType
from datetime import datetime
from pyecharts.datasets import register_files

# 获取双色球中奖号码信息
def get_data(n):
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36 QIHU 360SE'
    }
    url = 'https://chart.cp.360.cn/kaijiang/ssq?lotId=220051&chartType=undefined&spanType=0&span={}'.format(n)  # 爬取期数
    respons = requests.get(url,headers=headers)
    text = respons.text
    soup = BeautifulSoup(text,'lxml')
    tbody = soup.find_all('thead',class_="kaijiang")[0]
    tbody_th = tbody.find_all('th')
    # 创建一个excel文件
    wb = openpyxl.Workbook()  # 新建excel文件
    ws = wb.active  # 激活sheet,用于后续将数据写入
    ws.title = '双色球中奖信息'  # 指定sheet的名称

    # 将“表头”写入excel中
    ws.cell(row=1,column=1,value=list(tbody_th[0].stripped_strings)[0])  # cell 方法给excel写入数据,row= 行,column=列,value=要写入的值
    ws.cell(row=1,column=2,value=list(tbody_th[1].stripped_strings)[0])
    ws.cell(row=1,column=3,value=list(tbody_th[-6].stripped_strings)[0])
    ws.cell(row=1,column=4,value=list(tbody_th[-5].stripped_strings)[0])

    tbody = soup.find_all('tbody',id="data-tab")[0]
    trs = tbody.find_all('tr')
    data_list=[] # 要写入excel的数据
    red_list = [] # 红球
    blue_list = [] # 蓝球
    for tr in trs:
        tds = tr.find_all('td')[:4]
        blue_list.append(list(tds[3].stripped_strings)[0])  # 获取蓝球号码
        tds_text = [] # 中奖号码信息
        redBall = ''
        for index,td in enumerate(tds):
            if index == 2:  # 红球
                for i in list(td.stripped_strings):
                    redBall = redBall+' '+ i
                    red_list.append(i)
                tds_text.append(redBall.lstrip())
            else:
                tds_text.append(list(td.stripped_strings)[0])
        data_list.append(tds_text)
    for i,dl in enumerate(data_list):
        for j,dt in enumerate(dl):
            ws.cell(row=i+2,column=j+1,value=dt) # 将中奖号码信息写入excel中
    wb.save('双色球中奖信息.xlsx')  # 将数据保存到本地excel中
    return red_list,blue_list

# 获取球出现的次数
def count_ball(ball_list,color_list):
    '''
    :param ball_list: 所有中奖号码,红球+蓝球 剔重数据
    :param color_list: 红球号码或蓝球号码
    :return: 中奖号码出现的次数
    '''
    ball_dict={}
    for d in ball_list:
        ball_dict[d]=0
    for ball in ball_list:
        ball_dict[ball]=color_list.count(ball)  # 获取球出现的次数
    count_y = list(ball_dict.values())
    return count_y

# 柱状图
def mkCharts(x,y1,y2,n):
    bar = Bar(init_opts = options.InitOpts(theme=ThemeType.DARK))  # 对表格添加主题
    bar.add_xaxis(x)  # x轴:所有中奖号码,红球+蓝球
    bar.add_yaxis('红球',y1) 
    bar.add_yaxis('蓝球', y2) 
    tim = datetime.now().strftime('%Y-%m-%d')
    bar.set_global_opts(title_opts=options.TitleOpts(title="最近{}期双色球红蓝球中奖次数".format(n), subtitle=tim))
    bar.render('双色球(柱状图).html')

# 折线图,使用官方主题 https://pyecharts.org/#/zh-cn/themes?id=%e4%b8%bb%e9%a2%98%e9%a3%8e%e6%a0%bc
def mkLine1(x,y1,y2,n):
    tim = datetime.now().strftime('%Y-%m-%d')
    line=(
        Line(init_opts=options.InitOpts(theme=ThemeType.CHALK))
        .add_xaxis(x)
        .add_yaxis('红球', y1)
        .add_yaxis('蓝球', y2)
        .set_global_opts(title_opts=options.TitleOpts(title="最近{}期双色球红蓝球中奖次数".format(n),subtitle=tim))
    )
    line.render('双色球(折线图官方).html')

# 使用主题工具创建主题 https://echarts.baidu.com/theme-builder/
def mkLine2(x,y1,y2,n):
    register_files({'myTheme':['/js/customed.project','json']})
    tim = datetime.now().strftime('%Y-%m-%d')
    line=(
        # Line(init_opts=options.InitOpts(theme=ThemeType.WESTEROS))
        Line(init_opts=options.InitOpts(theme="myTheme"))
        .add_xaxis(x)
        .add_yaxis('红球', y1)
        .add_yaxis('蓝球', y2)
        .set_global_opts(title_opts=options.TitleOpts(title="最近{}期双色球红蓝球中奖次数".format(n),subtitle=tim))
    )
    line.render('双色球(折线图自定义).html')

def main(n):
    red_list = get_data(n)[0]
    blue_list = get_data(n)[1]
    x = sorted(set(red_list + blue_list))
    y_red = count_ball(x, red_list)
    y_blue = count_ball(x, blue_list)
    mkCharts(x, y_red, y_blue,n)  # 柱状图
    mkLine1(x,y_red,y_blue,n)   # 系统主题
    mkLine2(x,y_red,y_blue,n)  # 自定义主题

if __name__ == '__main__':
    n = input('您想获取最近多少期的数据?\n')
    main(n)
    print('统计信息已爬取完成。')
爬取双色球中奖号码数据

 

执行过程:

 

执行结果:

 excel:

 

 

 

 柱状图:DARK

 

 

 

 折线图:官方主题样式 CHALK

 

 

 

 折线图:使用官方主题工具制作 myTheme

 

 







标签:双色球,ball,python,中奖号码,excel,list,爬取,蓝球
来源: https://www.cnblogs.com/simple-li/p/11271147.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有