初识python之爬⾍:爬取双⾊球中奖号码信息
⼈⽣还是要有梦想的,毕竟还有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 = 'chart.cp.360/kaijiang/ssq?lotId=220051&chartType=undefined&spanType=0&span={}'.format(n)  # 爬取期数
respons = (url,headers=headers)
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中
tbody = soup.find_all('tbody',id="data-tab")[0]
trs = tbody.find_all('tr')
data_list=[] # 要写⼊excel的数据
red_list = [] # 红球
sortedlistblue_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):
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]=unt(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 = w().strftime('%Y-%m-%d')
bar.set_global_opts(title_opts=options.TitleOpts(title="最近{}期双⾊球红蓝球中奖次数".format(n), subtitle=tim))
# 折线图,使⽤官⽅主题 /#/zh-cn/themes?id=%e4%b8%bb%e9%a2%98%e9%a3%8e%e6%a0%bc def mkLine1(x,y1,y2,n):
tim = w().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))
)
# 使⽤主题⼯具创建主题 echarts.baidu/theme-builder/
def mkLine2(x,y1,y2,n):
register_files({'myTheme':['/js/customed.project','json']})
tim = w().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))
)
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