新冠疫情爆发对全国造成重大影响,各行各业因为疫情皆受到不小的波及。如何编写一个python程序爬取疫情数据,实现新冠疫情数据可视化并以大屏形式展现到屏幕供人们观看与使用,
下面我将一步步介绍该程序实现流程.
下载程序所需要的库
pip install xxxx (xxxx为所需库的名称) requests lxml json openpyxl # 爬取部分 pandas pyecharts #可视化展示部分
爬虫部分代码
# @author:RHD import requests from lxml import etree import json import openpyxl # 爬虫抓取百度疫情数据 url = 'https://voice.baidu.com/act/newpneumonia/newpneumonia' headers = { "User-Agent": "rhd" } response = requests.get(url=url, headers=headers).text # 在使用xpath的时候要用树形态 html = etree.HTML(response) # 用xpath来获取我们之前找到的页面json数据 并打印看看 json_text = html.xpath('//script[@type="application/json"]/text()') json_text = json_text[0] # print(json_text) # 用python本地自带的库转换一下json数据 result = json.loads(json_text) # print(result) # 通过打印出转换的对象我们可以看到我们要的数据都要key为component对应的值之下 所以现在我们将值拿出来 result = result["component"] # 再次打印看看结果 # print(result) # 获取国内当前数据 result = result[0]['caseList']# print(result) # 创建工作簿 wb = openpyxl.Workbook() # 创建工作表ws = wb.active# 设置表的标题 ws = wb.active wb.title = "国内疫情" # 写入表头 ws.append(["省份","累计确诊","死亡","治愈"]) # 获取各省份的数据并写入 for line in result: line_name = [line["area"], line["confirmed"], line["died"], line["crued"]] for ele in line_name: if ele == '': ele = 0 ws.append(line_name) # 保存到excel中 wb.save('./china.xls')
爬取出excel表如下:
然后做数据可视化,显示我国地图上对应省份的数值
# @author:RHD import pandas as pd from pyecharts.charts import Map, Page from pyecharts import options as opts # 设置列对齐 pd.set_option('display.unicode.ambiguous_as_wide', True) pd.set_option('display.unicode.east_asian_width', True) # 打开文件 df = pd.read_excel('china.xls') # 对省份进行统计 data2 = df['省份'] data2_list = list(data2) data3 = df['累计确诊'] data3_list = list(data3) data4 = df['死亡'] data4_list = list(data4) data5 = df ['治愈'] data5_list = list(data5) a = ( Map() .add("累计确诊", [list(z) for z in zip(data2_list, data3_list)], "china") .set_global_opts( title_opts=opts.TitleOpts(), visualmap_opts=opts.VisualMapOpts(max_=200), ) ) b = ( Map() .add("死亡", [list(z) for z in zip(data2_list, data4_list)], "china") .set_global_opts( title_opts=opts.TitleOpts(), visualmap_opts=opts.VisualMapOpts(max_=200), ) ) c = ( Map() .add("治愈", [list(z) for z in zip(data2_list, data5_list)], "china") .set_global_opts( title_opts=opts.TitleOpts(), visualmap_opts=opts.VisualMapOpts(max_=200), ) ) page = Page(layout=Page.DraggablePageLayout) page.add( a, b, c, ) # 生成render.html文件 page.render()
看看展示出来效果
可以自己调整三个图的位置,按照自己的需求调整完毕后,点击左上角的Save Config选项保存json文件,
然后将其放在该目录文件夹下,最后执行以下代码
Page.save_resize_html("render.html", cfg_file="chart_config.json", dest="my_test.html")
接下来文件夹就会生成一个my_test.html文件,点进去就是你自己调整的图.