网页分析
数据源 腾讯疫情实时追踪
打开网址,F12 进入开发者工具(刷新一下页面),如下,所有数据都可以通过接口获取:
国内数据接口:
https://api.inews.qq.com/newsqa/v1/query/inner/publish/modules/list?modules=
各省历史数据接口:
https://api.inews.qq.com/newsqa/v1/query/pubished/daily/list?adCode=
国外数据接口:
https://api.inews.qq.com/newsqa/v1/automation/modules/list?modules=
数据获取
抓取数据
获取步骤:
- 先定义接口调用函数
- 通过接口名获取数据,然后直接获取response对象中的json文件
def get_json():
"""
获取json数据
:return: json数据
"""
url = 'https://api.inews.qq.com/newsqa/v1/query/inner/publish/modules/list?modules=statisGradeCityDetail,diseaseh5Shelf'
headers = {
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.93 Safari/537.36'
}
response = requests.get(url=url,headers=headers)
json_data = response.json()['data']['diseaseh5Shelf']['areaTree'][0]['children']
return json_data
解析json并写入excel
json文件实际上就是一个字典,我们通过相应的键来找到我们需要的值,也就是地区、新增确诊、治愈人数、死亡人数、现存人数和累计确诊人数,使用list来存储这些数据,随后将各省的数据写入excel库中。这里因为是作业,老师要求使用xlwt库来解决该问题,否则使用pandas库将会更好。
代码如下:
def parser_json(province_catch_data):
"""
解析json并将其写入excel
:param province_catch_data: 爬取下来的json数据
:return:
"""
workbook = xlwt.Workbook()
sheet1 = workbook.add_sheet('各省疫情基本情况')
form_head = ['地区', '新增确诊', '治愈人数', '死亡人数', '现存人数', '累计确诊']
for j in range(0, len(form_head)):
sheet1.write(0, j, form_head[j])
for i in range(len(province_catch_data)):
province_data_list = []
region = province_catch_data[i]['name']
province_data_list.append(region)
province_today = province_catch_data[i]['today'] # 省当日数据字典
province_total = province_catch_data[i]['total'] # 省总数据字典
new_confirm = province_today['confirm'] # 新增确诊
province_data_list.append(new_confirm)
heal = province_total['heal'] # 治愈人数
province_data_list.append(heal)
dead = province_total['dead'] # 死亡人数
province_data_list.append(dead)
now_confirm = province_total['nowConfirm'] # 现存确诊
province_data_list.append(now_confirm)
total_confirm = province_total['confirm'] # 累计确诊
province_data_list.append(total_confirm)
for k in range(len(province_data_list)):
sheet1.write(i + 1, k, province_data_list[k])
workbook.save('tjl.xls')
结果如下:
读取excel并绘制图像
使用xlrd库读入数据并使用matplotlib绘制疫情折线图
def plot_excel(excelpath):
"""
读取excel文件并使用matplotlib绘制
:param excelpath: excel文件地址
:return:
"""
book = xlrd.open_workbook(excelpath)
sheet0 = book.sheets()[0] # 表格索引,从0开始
regions = sheet0.col_values(0)
x = regions[1:]
new_confirms = sheet0.col_values(1)
y = new_confirms[1:]
plt.figure(dpi=300, figsize=(16, 8))
plt.plot(x, y, "g", marker='D', markersize=5, label="新增确诊人数")
# 绘制坐标轴标签
plt.xlabel(regions[0])
plt.ylabel(new_confirms[0])
plt.xticks(rotation=45, fontsize=16) # x轴刻度字体大小
plt.yticks(fontsize=16) # y轴刻度字体大小
for a, b in zip(x, y):
plt.text(a, b, int(b), ha='center', va='bottom', fontsize=16)
plt.legend(loc='upper right')
plt.title("各省新增确诊人数统计图")
# 显示中文字体
plt.rcParams["font.sans-serif"] = ["SimHei"]
plt.rcParams['axes.unicode_minus'] = False
plt.tight_layout()
plt.show()
结果如下:
因为是老师上课布置的作业,所以很多都懒得调整,需要的话可以自己钻研。
标签:province,plt,confirm,Python,list,matplotlib,爬取,json,data From: https://www.cnblogs.com/tangjielin/p/16825258.html