疫情数据爬取
- 1.选择数据源
- 2.国内数据的爬取
- 3.国外数据的爬取
- 4.爬取数据的可视化分析(pyecharts)
对于网易疫情数据爬取代码的更新见
Gitee: https://gitee.com/li-yur/AllSpider/tree/master/COVID-19.
增加了对国内各省市数据的爬取
文章图片
1.选择数据源 以网易的疫情播报平台为例,因为它的数据内容非常丰富,不仅包括国内的数据还包括国外的数据,且作为大平台,公信度也比较高。因此我选择网易的疫情实时动态播报平台作为数据源,
其地址如下:网易疫情播报平台
首页如下
文章图片
在页面任意位置右键点击检查
进入Network标签下的XHR,按下“Ctrl+R”刷新即可
文章图片
先找到①的位置,点击进入,然后可以找到② data的字段,这里面就存放着我们想要的国内的和国外疫情的数据源。
文章图片
接下来找到其地址,点击headers后进行查看,在url中?后边为参数,可以不要,因此我们需要请求的地址为:https://c.m.163.com/ug/api/wuhan/app/data/list-total ,
并且可以看到请求方法为get,同时查看自己浏览器的user-agent,使用requests请求时,设置user-agent伪装浏览器。
文章图片
再开始写代码之前最好是多翻看这里的数据,搞明白这里的数据结构,以便于后面代码的实现。
2.国内数据的爬取 完整代码如下
import json
import time
import os
import requests
import pandas as pddef get_html(Url, header):
try:
r = requests.get(url=Url, headers=header)
r.encoding = r.apparent_encoding
status = r.status_code
# 将原始数据类型转换为json类型,方便处理
data_json = json.loads(r.text)
print(status)
return data_json
except:
print("爬取失败")# 将提取34个省数据的方法封装为函数
def get_data(data, info_list):
# 直接提取["id","name","lastUpdateTime"] 的数据
info = pd.DataFrame(data)[info_list]# 获取today的数据
today_data = https://www.it610.com/article/pd.DataFrame([province["today"] for province in data])
# 修改列名
today_data.columns = ["today_" + i for i in today_data.columns]# 获取total的数据
total_data = https://www.it610.com/article/pd.DataFrame([province["total"] for province in data])
# 修改列名
total_data.columns = ["total_" + i for i in total_data.columns]return pd.concat([info, today_data, total_data], axis=1)def save_data(data, name):
"""定义保存数据的函数"""
# 保存的文件名名称
file_name = name + "_" + time.strftime("%Y_%m_%d", time.localtime(time.time())) + ".csv"data.to_csv(file_name, index=None, encoding="utf_8_sig")# 检查是否保存成功,并打印提示文本
if os.path.exists(file_name):
print(file_name + " 保存成功")
else:
print('保存失败')if __name__ == "__main__":
# 访问网易实时疫情播报平台网址
url = "https://c.m.163.com/ug/api/wuhan/app/data/list-total"# 设置请求头,伪装为浏览器
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 6.1;
Win64;
x64) \
AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'
}"""爬取中国各省的疫情数据"""
# 1.获取数据(此时的数据未经处理)
datas = get_html(url, headers)# 2.找到储存中国34省的数据所在
data_province = datas["data"]["areaTree"][2]["children"]# 3.提取34个省数据
all_data = https://www.it610.com/article/get_data(data_province, ["id", "name", "lastUpdateTime"])# 4.持久化保存数据
save_data(all_data, "today_province")
这是在Jupyter中一步步探索实现的截图:
这有助于我们一步步的了解数据源的结构,以便代码的封装书写。
文章图片
3.国外数据的爬取 只需在上面的代码末尾直接加上这段代码就可以了。
"""爬取世界各国的疫情数据"""
world_data = https://www.it610.com/article/datas["data"]["areaTree"]
worlds_data = https://www.it610.com/article/get_data(world_data, ["id", "name", "lastUpdateTime"])
save_data(worlds_data, "today_worlds")
这时你可能就会蒙圈了,为什么呢?
文章图片
这是因为国外的数据是在
json数据
data
中的areaTree
是列表格式,每个元素都是一个国家的实时数据,每个元素的children
是各国家省份的数据,而在
areaTree
键值对下,areaTree —> 2 --> children 。就是我国各省的实时数据
如果你没有仔细查看网页里数据结构,name现在应该有所明白的吧!
现在你也还可以继续回到网页继续翻看存放数据源的结构。
这里便是我爬取储存的数据
文章图片
数据展示部分
文章图片
文章图片
4.爬取数据的可视化分析(pyecharts) pyecharts数据可视化:对爬取的新冠疫情数据进行可视化(二)
部分结果展示:
【Python爬虫|python爬虫(网易新冠疫情数据爬取(一))】
文章图片
推荐阅读
- Python爬虫|每日一练(Python爬虫爬取全国新冠肺炎疫情数据实例详解,使用beautifulsoup4库实现)
- Python日常小操作|Python爬取疫情数据
- Python地图绘制|每日一练(Python国内疫情数据爬取与地图绘制)
- 介绍Python字符串下标(索引)
- 认识Python中的字符串
- Python字符串切片操作和切片含义
- 【Python字符串方法 】大小写转换、删除空白字符、字符串对齐
- Python字符串6个判断操作方法
- 【Python】字符串常用3个查找操作方法