Python爬虫实例(二)——爬取新冠疫情每日新增人数

Python是世界上最美的语言

大家好,我是Henry!

疫情以来,相信大家每天都关注着疫情的实时动态,许多网站上也post了疫情的相关资料。

丁香园
百度

各个网站都会统计每日新增,刚学了Matplotlib绘图的Henry想着,我也可以通过python爬虫得到数据,然后自己来绘制一张全国每日新增图啊!不多说,直接开干!

先上Henry的效果图!

粉色才是最适合猛男的颜色!!

一、实验内容

  • 通过python爬虫获取疫情每日新增数据(湖北地区和非湖北地区)。
  • 将获得的数据用库函数Matplotlib绘制成柱形图。

二、实验过程记录

(一)爬取数据

  1. 首先找到记录有疫情数据的网站疫情数据
  2. 安装json,requests函数包并导入。
import json
import requests

3. 通过request.get()函数获取链接中的HTML信息,并用json.loads将其转化为字典

url = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_other"
html = requests.get(url)
message = json.loads(html.text)

4. 通过观察,发现我们需要的每日新增人数保存在一个字典的key-value中,现在把它提取出来。

mes = json.loads(message['data'])
mes_dict = mes["dailyNewAddHistory"]

5. 创建四个个空列表,对提取出来的mes_dict循环操作,将日期和全国每日新增人数、湖北新增人数、非湖北地区新增人数放到四个个空列表里。

date=[]       ##保存日期
country=[]     ##分别保存全国、湖北、非湖北每日新增人数
hubei=[]
nothubei=[]
n = 0
for d in mes_dict:
        date.append(d['date'])
        country.append(d['country'])
        hubei.append(d['hubei'])
        nothubei.append(d['notHubei'])
        n=n+1
        if n>40:
            break

6.至此,我们需要的数据已经爬取到四个列表:date和country中了。

(二)通过Matplotlib进行绘图

  1. 安装matplotlib.pyplot、numpy并导入
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import ticker

2. 给轴初始化,并新建一个figure指定尺寸。

x = date                           ##初始化坐标
y1 = country
y2 = hubei
y3 = nothubei
plt.figure(figsize=(20, 10))         ##新建figure并指定尺寸

3.添加题目、轴和​轴的标签并绘图。

plt.title("Chart of the number of newly confirmed cases per day in February 2020")  ##添加题目
plt.xlabel('Date')        ##添加标签
plt.ylabel('Number of newly confirmed cases')
plt.bar(x, y2, facecolor = 'pink',edgecolor='white',label='Hubei')          ##绘制柱状图
plt.bar(x, y3, facecolor = '#ff9999',edgecolor='white',label ='notHubei')

4.为了美观,横坐标日期每三个显示一个。并将每个点的数据标在该点上方。同时添加图例。

plt.gca().xaxis.set_major_locator(ticker.MultipleLocator(3))    ##横坐标日期每三个显示一个
for x, y in zip(x, y):         ##将每个点的数据标在该点上方
    plt.text(x, y+1, y)
plt.legend()         ##添加图例

5.同时对特殊点坐标进行注释。

plt.annotate(r"$add\ clinically\ diagnosed\ cases$",xy=('02.12',15153),xycoords='data',xytext=(+30,-100),textcoords='offset points',arrowprops=dict(arrowstyle="->",connectionstyle="arc3,rad=.2"))

6.打印图像

plt.show()

7.得到图像。

粉色才是最适合猛男的颜色!!

三、实验总结

  • 通过python爬虫获取数据,matplotlib绘图得到了1.20-2.29湖北和非湖北地区每日新增人数柱形图。
  • 程序还有不足的地方,比如没有程序界面。

下面贴下全代码

import json
import requests
import matplotlib.pyplot as plt
import numpy as np
from matplotlib import ticker

url='https://view.inews.qq.com/g2/getOnsInfo?name=disease_other'
html = requests.get(url)
message = json.loads(html.text)
mes = json.loads(message['data'])
mes_dict = mes["dailyNewAddHistory"]
date=[]
country=[]
hubei=[]
nothubei=[]
n = 0
for d in mes_dict:
        date.append(d['date'])
        country.append(d['country'])
        hubei.append(d['hubei'])
        nothubei.append(d['notHubei'])
        n=n+1
        if n>40:
            break
x = date
y1 = country
y2 = hubei
y3 = nothubei
plt.figure(figsize=(20, 10))
plt.title("Chart of the number of newly confirmed cases per day in February 2020")
plt.xlabel('Date')
plt.ylabel('Number of newly confirmed cases')
plt.bar(x, y2, facecolor = 'pink',edgecolor='white',label='Hubei')
plt.bar(x, y3, facecolor = '#ff9999',edgecolor='white',label ='notHubei')
plt.gca().xaxis.set_major_locator(ticker.MultipleLocator(10))
plt.annotate(r"$add\ clinically\ diagnosed\ cases$",xy=('02.12',15153),xycoords='data',xytext=(+30,-100),
              textcoords='offset points',arrowprops=dict(arrowstyle="->",connectionstyle="arc3,rad=.2"))
for x, y in zip(x, y1):
    plt.text(x, y+1, y, ha='left')
plt.legend()
plt.show()

这就是本期的全部内容啦!希望大家点个喜欢收藏~

欢迎大家关注我的微信公众号:今天我秃了吗

 欢迎大家关注我的知乎账号:HenryLau

原创文章 3 获赞 10 访问量 471

猜你喜欢

转载自blog.csdn.net/m0_46432261/article/details/106137488