源码放在最下方链接
疫情数据获取相关文章:
python 爬虫爬取疫情数据,爬虫思路和技术你全都有哈(一)_源源佩奇的博客-优快云博客
python 爬虫爬取疫情数据,爬虫思路和技术你全都有哈(二)_源源佩奇的博客-优快云博客
目录
获取地图数据
因为制作疫情地图的数据不一样,所以结合上面的函数,我们还需要另写一个函数来获得我们所需要的数据。
def CityName(json_list):
print('FileName ------ 4')
domestic = json_list['component'][0]['caseList'] # 国内疫情情况
# sql = f"insert city(CityName,provinceCode,provinceCity) values('全国',0,null)"
# cursor.execute(sql)
# sql1 = f"insert city(CityName,provinceCode,provinceCity) values('全国',null,0)"
# cursor.execute(sql1)
# conn.commit()
name = {} # 名字存储用于城市级联
chian_province = [] # 存储地图所需的省名及数据
i = 0
for province in domestic:
i += 1
temp_name = [] # 临时存储名字
temp_name.append(province["area"]) # 添加省名
# print(province)
temp_province = [] # 临时存储地图名字和数据
temp_province.append(province["area"])
temp_province.append(province['curConfirm'])
chian_province.append(temp_province)
# # 定义sql语句,存储数据库中
# sql = f"insert city(CityName,provinceCode,provinceCity) values('{province['area']}',{i},null)"
# cursor.execute(sql)
#
# sql1 = f"insert city(CityName,provinceCode,provinceCity) values('{province['area']}',null,{i})"
# cursor.execute(sql1)
# conn.commit()
for city in province['subList']:
# print(city)
if city['city'] == '境外输入':
continue
elif city['city'] == '待确认':
continue
elif city['city'].find('外') != -1 and city['city'].find('来') != -1:
continue
elif city['city'] == '涉冬(残)奥闭环人员':
continue
# sql = f"insert city(CityName,provinceCode,provinceCity) values('{city['city']}',null,{i})"
# cursor.execute(sql)
# conn.commit()
# 添加市名
temp_name.append(city['city'])
# 添加名字到字典name中
name[province["area"]] = temp_name
return name, chian_province
这样我们就得到了chian_province 这个变量,这里面就存储着疫情地图所需要的数据:
数据如下:
[['西藏', '36'], ['澳门', '1'], ['青海', '54'], ['台湾', '8135316'], ['香港', '342798'], ['贵州', '99'], ['吉林', '11'], ['新疆', '567'], ['宁夏', '1'], ['内蒙古', '1157'], ['甘肃', '91'], ['天津', '76'], ['山西', '1200'], ['辽宁', '60'], ['黑龙江', '155'], ['海南', '26'], ['河北', '29'], ['陕西', '448'], ['云南', '521'], ['广西', '9'], ['福建', '304'], ['上海', '61'], ['北京', '1630'], ['江苏', '215'], ['四川', '917'], ['山东', '152'], ['江西', '6'], ['重庆', '2004'], ['安徽', '20'], ['湖南', '147'], ['河南', '2468'], ['广东', '9350'], ['浙江', '192'], ['湖北', '41']]
制作地图函数
然后就就需要写一个绘制地图的函数
def doEcahartChian(City):
print('doEcahartChian ------ 6')
print(City)
'''
作用:生成中国疫情地图
'''
pieces = [
{'min': 10000, 'color': '#540d0d'},
{'max': 9999, 'min': 1000, 'color': '#9c1414'},
{'max': 999, 'min': 500, 'color': '#d92727'},
{'max': 499, 'min': 100, 'color': '#ed3232'},
{'max': 99, 'min': 10, 'color': '#f27777'},
{'max': 9, 'min': 1, 'color': '#f7adad'},
{'max': 0, 'color': '#f7e4e4'},
]
(
Map()
.add(
series_name="现存确诊",
data_pair=City,
maptype="china",
# 是否默认选中,默认为True
is_selected=True,
# 是否启用鼠标滚轮缩放和拖动平移,默认为True
is_roam=False,
# 是否显示图形标记,默认为True
is_map_symbol_show=False
)
# 系列配置项
# 关闭标签名称显示
.set_series_opts(label_opts=opts.LabelOpts(is_show=True))
# 全局配置项
.set_global_opts(
# 设置标题
title_opts=opts.TitleOpts(title="中国疫情地图"),
# 设置视觉配置项分段显示
visualmap_opts=opts.VisualMapOpts(
pieces=pieces,
is_piecewise=True,
is_show=True
)
)
# 生成本地html文件
.render("ChianMap.html")
)
这一步完成之后,就需要进行调用这两个函数,根据第一篇讲到的数据清晰。
调用函数
调用函数如下:
json_list 接受数据清洗的结果
def ecahartChianMain(json_list):
print('ecahartChianMain ---- 7')
City = FileNameMap(json_list)[1]
doEcahartChian(City)
print("地图绘制成功")
绘制地图
最后一步,进行调用所有函数,绘制题图
url = 'https://voice.baidu.com/act/newpneumonia/newpneumonia/?from=osari_aladin_banner&city='
resp = HTTP_get(url) # http请求
json_list = xpath_json(resp) # 数据清晰
ecahartChianMain(json_list) # 绘制中国地图
结果如下: