ICode9

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

使用python爬虫爬取新冠疫情数据并进行可视化展示

2022-08-02 11:32:29  阅读:207  来源: 互联网

标签:python text list json 爬取 新冠 result line opts


 新冠疫情爆发对全国造成重大影响,各行各业因为疫情皆受到不小的波及。如何编写一个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文件,点进去就是你自己调整的图.

 

 

 

 

  

 

标签:python,text,list,json,爬取,新冠,result,line,opts
来源: https://www.cnblogs.com/RHD1024/p/16540859.html

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

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

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

ICode9版权所有