因为上一个全国疫情动态的URL出错了,所以我用了另一个接口,这篇与上一篇内容是一样的,只是URL不一样,所以话不多说,直接亮代码
import time
import requests
import json
from fake_useragent import UserAgent
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import Bar, Line, Pie, Grid, Map
class EpidemicSpider(object):
def __init__(self):
# self.sjc = int(time.time()*1000)
# self.url = f'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5&callback=_&_={self.sjc}'
self.url = 'https://api.inews.qq.com/newsqa/v1/query/inner/publish/modules/list?modules=statisGradeCityDetail,diseaseh5Shelf'
self.ua = UserAgent()
self.headers = {
'user_agent': self.ua.random,
}
def parse_response(self):
response = requests.post(self.url, headers=self.headers).text
data_th = json.loads(response)['data']['diseaseh5Shelf']['areaTree'][0]['children'] # 拿到json数据中 children 的值
# 设置一个数据集
data_set = []
for i in data_th:
# 创建空字典
data_dict = {}
# 地区名称
data_dict['province'] = i['name']
# 疫情数据
data_dict['nowConfirm'] = i['total']['nowConfirm'] # 现有确诊
data_dict['confirm'] = i['total']['confirm'] # 累计确诊
data_dict['addconfirm'] = i['today']['confirm'] # 新增确诊
data_dict['dead'] = i['total']['dead'] # 死亡人数
data_dict['heal'] = i['total']['heal'] # 治愈人数
data_dict['wzz'] = i['total']['wzz'] # 本土无症状确诊
data_dict['provinceLocalConfirm'] = i['total']['provinceLocalConfirm'] # 地区本地确诊
data_set.append(data_dict)
fd = pd.DataFrame(data_set) # 制成表格
# fd.to_excel('全国地区疫情数据.xls') # 保存Excel
fd2 = fd.sort_values(by=['nowConfirm'], ascending=False) # 根据 'nowConfirm' 以多到少向下排序
self.drawing(fd)
def drawing(self, fd):
china_map = (
Map()
# china--意为中国地图
.add('现有确诊', [list(i) for i in zip(fd['province'], fd['nowConfirm'])], 'china', is_map_symbol_show=False)
.add('治愈人数', [list(i) for i in zip(fd['province'], fd['heal'])], 'china', is_map_symbol_show=False)
.add('累计确诊', [list(i) for i in zip(fd['province'], fd['confirm'])], 'china', is_map_symbol_show=False)
.add('新增确诊', [list(i) for i in zip(fd['province'], fd['addconfirm'])], 'china', is_map_symbol_show=False)
.set_global_opts(
title_opts=opts.TitleOpts(title='各地区疫情情况'),
visualmap_opts=opts.VisualMapOpts(max_=500, is_piecewise=True),
legend_opts=opts.LegendOpts(pos_left='90%', pos_top='60%')
)
)
china_map.render('map.html')
if __name__ == '__main__':
e = EpidemicSpider()
e.parse_response()