近日,各地疫情又出现严重反复的现象,目前新增新冠疫情仍处于多点散发、局部聚集的态势,面对这样的情况,疫情防控还要这样做!
我们再从数据方面分析一下来看看全国疫情情况。获取的数据如下:地区、死亡人数、确诊人数、新增人数、治愈人数、当前确诊人数等绘制疫情可视化地图
网站分析
我们今天要爬取的网站是百度,这个网站每日实时更新最新疫情数据。如下:
我们右键检查如下获取数据来源网址
在response中我们可以看到我们要获取的数据就在其中。
所有接下来我们就是如何提取出我们所需的数据
我们将这些数据复制到pycharm中打开如下,因为数据量太大这样看起来还是比较直观的。因为我们所需的数据都在caseList列表中,我们可以循环提取每个城市的数据。所以我们先要获取到它的外层数据component。这里我们选择使用正则来进行数据的提取
发送请求我们使用刚才找到的链接来模拟浏览器发送请求
headers = {
user-agent: xxxxx,
referer: xxxxx,
cookie: xxxxx,
}
html_data = requests.get(url).text
print(html_data)
获取到的是就是整个html网页数据
接下来使用正则来进行数据的提取并转为列表格式
并且将获取到的数据转为json格式用已提取我们所需的数据
返回列表
component = re.findall("component":\[(.*)\],, html_data)[0]
然后提取我们所需要的数据,并且我们使用prettytable来美化数据。
tb.field_names = [地区, 时间, 新增人数, 现有确诊人数, 累计确诊, 治愈人数, 死亡人数]
for case in caselist:
area = case[area] 地区
relativeTime = int(case[relativeTime]) 时间
content_time = time.strftime(%Y-%m-%d %H:%M, time.localtime(relativeTime))
nativeRelative = case[confirmedRelative] 新增人数
curConfirm = case[curConfirm] 现有确诊人数
confirmed = case[confirmed] 累计确诊
crued = case[crued] 治愈人数
died = case[died] 死亡人数
tb.add_row([area, content_time, nativeRelative, curConfirm, confirmed, crued, died])
print(tb)
+--------+------------------+----------+--------------+----------+----------+----------+
| 地区 | 时间 | 新增人数 | 现有确诊人数 | 累计确诊 | 治愈人数 | 死亡人数 |
+--------+------------------+----------+--------------+----------+----------+----------+
| 西藏 | 2022-03-14 00:00 | 0 | 0 | 1 | 1 | 0 |
| 澳门 | 2022-03-14 00:00 | 0 | 3 | 82 | 79 | 0 |
| 青海 | 2022-03-14 00:00 | 0 | 2 | 32 | 30 | 0 |
| 台湾 | 2022-03-14 00:00 | 114 | 6807 | 21402 | 13742 | 853 |
| 香港 | 2022-03-14 00:00 | 7500 | 234001 | 266887 | 28318 | 4568 |
| 贵州 | 2022-03-15 00:00 | 2 | 6 | 168 | 160 | 2 |
| 吉林 | 2022-03-15 00:00 | 938 | 7001 | 7593 | 589 | 3 |
| 新疆 | 2022-03-15 00:00 | 0 | 0 | 996 | 993 | 3 |
| 宁夏 | 2022-03-14 00:00 | 0 | 0 | 122 | 122 | 0 |
| 内蒙古 | 2022-03-14 00:00 | 0 | 45 | 1666 | 1620 | 1 |
| 甘肃 | 2022-03-14 00:00 | 7 | 190 | 560 | 368 | 2 |
| 天津 | 2022-03-15 00:00 | 53 | 269 | 1425 | 1153 | 3 |
| 山西 | 2022-03-15 00:00 | 0 | 23 | 295 | 272 | 0 |
| 辽宁 | 2022-03-15 00:00 | 34 | 172 | 1120 | 946 | 2 |
| 黑龙江 | 2022-03-15 00:00 | 15 | 61 | 2143 | 2069 | 13 |
| 海南 | 2022-03-14 00:00 | 0 | 3 | 193 | 184 | 6 |
| 河北 | 2022-03-15 00:00 | 38 | 233 | 1709 | 1469 | 7 |
| 陕西 | 2022-03-14 00:00 | 53 | 245 | 3071 | 2823 | 3 |
| 云南 | 2022-03-15 00:00 | 7 | 100 | 2020 | 1918 | 2 |
| 广西 | 2022-03-15 00:00 | 29 | 320 | 1321 | 999 | 2 |
| 福建 | 2022-03-14 00:00 | 88 | 174 | 1692 | 1517 | 1 |
| 上海 | 2022-03-15 00:00 | 15 | 653 | 4854 | 4194 | 7 |
| 北京 | 2022-03-15 00:00 | 12 | 191 | 1663 | 1463 | 9 |
| 江苏 | 2022-03-14 00:00 | 22 | 187 | 1949 | 1762 | 0 |
| 四川 | 2022-03-15 00:00 | 9 | 150 | 1581 | 1428 | 3 |
| 山东 | 2022-03-15 00:00 | 86 | 1110 | 2234 | 1117 | 7 |
| 江西 | 2022-03-14 00:00 | 0 | 0 | 959 | 958 | 1 |
| 重庆 | 2022-03-15 00:00 | 11 | 49 | 663 | 608 | 6 |
| 安徽 | 2022-03-15 00:00 | 2 | 11 | 1020 | 1003 | 6 |
| 湖南 | 2022-03-14 00:00 | 2 | 8 | 1239 | 1227 | 4 |
| 河南 | 2022-03-15 00:00 | 2 | 48 | 2713 | 2643 | 22 |
| 广东 | 2022-03-15 00:00 | 80 | 1760 | 6048 | 4280 | 8 |
| 浙江 | 2022-03-14 00:00 | 47 | 397 | 2457 | 2059 | 1 |
| 湖北 | 2022-03-14 00:00 | 1 | 38 | 68387 | 63837 | 4512 |
+--------+------------------+----------+--------------+----------+----------+----------+
数据保存
接下来我们将提取到的数据使用open方法保存到本地csv文件中,便于我们接下来的可视化展示
f = open(疫情.csv, mode=a, newline=)
csv_writer = csv.DictWriter(f, fieldnames=[
地区,
时间,
新增人数,
现有确诊人数,
累计确诊,
治愈人数,
死亡人数
])
写入表格
csv_writer.writeheader()
dit = {
地区: area,
时间: content_time,
新增人数: nativeRelative,
现有确诊人数: curConfirm,
累计确诊: confirmed,
治愈人数: crued,
死亡人数: died
}
csv_writer.writerow(dit)
成功保存数据如下:
数据可视化
最后我们使用pyecharts来绘制可视化饼图、地图、折线图和柱状图
然后使用组合图展示如下:
详情可以参考:
单日新增病例
现有确诊人数
累计确诊人数
治愈人数
死亡人数