python爬⾍:⽹易新冠疫情数据爬取(⼀)
疫情数据爬取
对于⽹易疫情数据爬取代码的更新见
Gitee: .
增加了对国内各省市数据的爬取
1.选择数据源
以⽹易的疫情播报平台为例,因为它的数据内容⾮常丰富,不仅包括国内的数据还包括国外的数据,且作为⼤平台,公信度也⽐较⾼。因此我选择⽹易的疫情实时动态播报平台作为数据源,
其地址如下:
⾸页如下
在页⾯任意位置右键点击检查
进⼊Network标签下的XHR,按下“Ctrl+R”刷新即可
先到①的位置,点击进⼊,然后可以到② data的字段,这⾥⾯就存放着我们想要的国内的和国外
疫情的数据源。
接下来到其地址,点击headers后进⾏查看,在url中?后边为参数,可以不要,因此我们需要请求的地址为:c.m.163/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 pd
def get_html(Url, header):
try:
r = (url=Url, headers=header)
status = r.status_code
# 将原始数据类型转换为json类型,⽅便处理
data_json = json.)
print(status)
return data_json
用html设计一个疫情网页代码
except:
print("爬取失败")
# 将提取34个省数据的⽅法封装为函数
def get_data(data, info_list):
# 直接提取["id","name","lastUpdateTime"]的数据
info = pd.DataFrame(data)[info_list]
# 获取today的数据
today_data = pd.DataFrame([province["today"]for province in data])
# 修改列名
lumns =["today_"+ i for i in lumns]
# 获取total的数据
# 获取total的数据
total_data = pd.DataFrame([province["total"]for province in data])
# 修改列名
lumns =["total_"+ i for i in lumns]
at([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"    _csv(file_name, index=None, encoding="utf_8_sig")
# 检查是否保存成功,并打印提⽰⽂本
if ists(file_name):
print(file_name +" 保存成功")
else:
print('保存失败')
if __name__ =="__main__":
# 访问⽹易实时疫情播报平台⽹址
url ="c.m.163/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 =get_data(data_province,["id","name","lastUpdateTime"])
# 4.持久化保存数据
save_data(all_data,"today_province")

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。