初识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 = '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
初识python 之 爬虫:爬取双色球中奖号码信息的更多相关文章
- 如何利用Python网络爬虫爬取微信朋友圈动态--附代码(下)
前天给大家分享了如何利用Python网络爬虫爬取微信朋友圈数据的上篇(理论篇),今天给大家分享一下代码实现(实战篇),接着上篇往下继续深入. 一.代码实现 1.修改Scrapy项目中的items.py ...
- 利用Python网络爬虫爬取学校官网十条标题
利用Python网络爬虫爬取学校官网十条标题 案例代码: # __author : "J" # date : 2018-03-06 # 导入需要用到的库文件 import urll ...
- python制作爬虫爬取京东商品评论教程
作者:蓝鲸 类型:转载 本文是继前2篇Python爬虫系列文章的后续篇,给大家介绍的是如何使用Python爬取京东商品评论信息的方法,并根据数据绘制成各种统计图表,非常的细致,有需要的小伙伴可以参考下 ...
- Node.js爬虫-爬取慕课网课程信息
第一次学习Node.js爬虫,所以这时一个简单的爬虫,Node.js的好处就是可以并发的执行 这个爬虫主要就是获取慕课网的课程信息,并把获得的信息存储到一个文件中,其中要用到cheerio库,它可以让 ...
- 用Python爬取双色球开奖信息,了解一下
1工具 2具体方法 1.使用python2.7编写爬取脚本 这里除了正常的爬取操作,还增加了独立的参数设定.如果没有参数,爬取的数据就在当前目录下:如果有参数,可以设定保存目录.保存文件名后缀 ...
- Python多线程爬虫爬取电影天堂资源
最近花些时间学习了一下Python,并写了一个多线程的爬虫程序来获取电影天堂上资源的迅雷下载地址,代码已经上传到GitHub上了,需要的同学可以自行下载.刚开始学习python希望可以获得宝贵的意见. ...
- Python简易爬虫爬取百度贴吧图片
通过python 来实现这样一个简单的爬虫功能,把我们想要的图片爬取到本地.(Python版本为3.6.0) 一.获取整个页面数据 def getHtml(url): page=urllib.requ ...
- 如何用Python网络爬虫爬取网易云音乐歌曲
今天小编带大家一起来利用Python爬取网易云音乐,分分钟将网站上的音乐down到本地. 跟着小编运行过代码的筒子们将网易云歌词抓取下来已经不再话下了,在抓取歌词的时候在函数中传入了歌手ID和歌曲名两 ...
- python 小爬虫爬取博客文章初体验
最近学习 python 走火入魔,趁着热情继续初级体验一下下爬虫,以前用 java也写过,这里还是最初级的爬取html,都没有用html解析器,正则等...而且一直在循环效率肯定### 很低下 imp ...
随机推荐
- Spring Batch(8) -- Listeners
September 29, 2020 by Ayoosh Sharma In this article, we will take a deep dive into different types o ...
- Restful、SOAP、RPC、SOA、微服务之间的区别
什么是Restful Restful是一种架构设计风格,提供了设计原则和约束条件,而不是架构,而满足这些约束条件和原则的应用程序或设计就是 Restful架构或服务. 主要的设计原则: 资源与URI ...
- Linux(CentOS 7)使用gcc编译c,c++代码
安装gcc: 1.使用 yum -list gcc* 查询 centos 官方gcc的所有包: 可安装的软件包 gcc.x86_64 gcc-c++.x86_64 gcc-gfortran.x86_6 ...
- 代码仓库gogs的基本配置使用
目录 一.基本功能介绍 主板说明 页面说明 用户设置 二.仓库 新建仓库 迁移仓库 仓库介绍 三.组织和团队 创建新组织 创建团队 一.基本功能介绍 主板说明 图中1表示自己个人账户下的仓库(所有权属 ...
- 关于@Autowired和@Resource注解区别
区分一下@Autowired和@Resource两个注解的区别: 1.@Autowired默认按照byType方式进行bean匹配,@Resource默认按照byName方式进行bean匹配 2.@A ...
- CF151B Phone Numbers 题解
Content 在一座城市中,每个人的电话号码都是由六位整数组成的,例如 11-45-14. 现在有 \(n\) 个人,第 \(i\) 个人有 \(s_i\) 个人的电话号码.已知: 出租车司机的电话 ...
- ORACLE数据库登录显示ORA-28001: the password has expired
Oracle数据库登录显示 "这个密码已过期,请输入新密码" 点击win键 找到Oracle的SQL Plus 点击打开之后输入登录的用户名密码,然后会显示该密码已过期,输入新口令 ...
- Linux(Centos)安装maven
下载maven安装包 官网地址:http://maven.apache.org/download.cgi 也可以使用 https://yvioo.lanzous.com/ivNVrfcs6ja 把文件 ...
- Github访问加速(解决md图片显示问题)
参考自知乎:https://zhuanlan.zhihu.com/p/107691233 基本步骤 查找域名对应IP https://www.ipaddress.com http://tool.chi ...
- Windows库函数获取 可执行程序所在路径
头文件 #include <Windows.h> 函数 函数已经写好了 std::string get_executable_dir_() { char path[255] = { 0 } ...