代码:
import requests
import pymysql
import json
from pyecharts import options as opts
from pyecharts.charts import Map
def create():
# 连接数据库
db = pymysql.connect(host = 'localhost', user = 'root', password ='258000', database = 'yiqing',charset='utf8')
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 使用 execute() 方法执行 SQL,如果表存在则删除
cursor.execute("DROP TABLE IF EXISTS proyiqing")
# 使用预处理语句创建表
sql = """CREATE TABLE proyiqing (
Id INT PRIMARY KEY AUTO\_INCREMENT,
update\_time varCHAR(255),
provinse varchar(255),
today\_confirm varchar(255),
total\_confirm varchar(255),
now\_confirm varchar(255),
total\_dead varchar(255),
total\_heal varchar(255))"""
#update\_time,provinse,today\_confirm,total\_confirm,now\_confirm,total\_dead,total\_heal
cursor.execute(sql)
#关闭数据库连接
db.close()
def insert(value):
# 连接数据库
db = pymysql.connect(host = 'localhost', user = 'root', password ='258000', database = 'yiqing',charset='utf8')
# 使用 execute() 方法执行 SQL,如果表存在则删除
cursor = db.cursor()
# 使用预处理语句插入数据
sql = "INSERT INTO proyiqing(update\_time,provinse,today\_confirm,total\_confirm,now\_confirm,total\_dead,total\_heal) VALUES ( %s,%s,%s,%s,%s,%s,%s)"
#update\_time,provinse,today\_confirm,total\_confirm,now\_confirm,total\_dead,total\_heal
try:
cursor.execute(sql, value)
db.commit()
print('插入数据成功')
except:
db.rollback()
print("插入数据失败")
db.close()
create() # 创建表
#目标网站
url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5'
headers = {
'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Mobile Safari/537.36'
}
#请求资源,获取相应内容
r = requests.get(url, headers)
res = json.loads(r.text)
data = json.loads(res['data'])
#世界疫情
lists = ['截至时间:' + str(data['lastUpdateTime']) + '\n'
'全国确诊人数:' + str(data['chinaTotal']['confirm']) + '\n'
'今日新增确诊:' + str(data['chinaAdd']['confirm']) + '\n'
'全国疑似:' + str(data['chinaTotal']['suspect']) + '\n'
'今日新增疑似:' + str(data['chinaAdd']['suspect']) + '\n'
'全国治愈:' + str(data['chinaTotal']['heal']) + '\n'
'今日新增治愈:' + str(data['chinaAdd']['heal']) + '\n'
'全国死亡:' + str(data['chinaTotal']['dead']) + '\n'
'今日新增死亡:' + str( data['chinaAdd']['dead']) + '\n']
result = ''.join(lists)
with open('疫情查询.txt', 'w+', encoding="utf-8") as f:
f.write(result + '\n')
#更新时间
update_time = data['lastUpdateTime']
#保存全国各省现有确诊数据
province_detals = []
confirm_detals = []
#省份疫情
for pro in data['areaTree'][0]['children']:
provinse = pro["name"] #省名
today_confirm = pro["today"]["confirm"]
total_confirm = pro["total"]["confirm"]
now_confirm = pro["total"]["nowConfirm"]
total_dead = pro["total"]["dead"]
total_heal = pro["total"]["heal"]
province_detals.append(provinse)
confirm_detals.append(now_confirm)
#insert((update_time,provinse,today_confirm,total_confirm,now_confirm,total_dead,total_heal))#存入数据库
#建立一一对应关系
data_zip = zip(province_detals,confirm_detals)
data_list = list(data_zip)
#可视化 matplot 和 pyechart
map = Map(opts.InitOpts(width='1900px',height='800px')).add(series_name="中国疫情分布",
data_pair=data_list,#输入数据
maptype="china",#地图类型
is_map_symbol_show=False#显示标记
)
#不显示国家名称
map.set_series_opts(label_opts=opts.LabelOpts(is_show=False))
#设置全局配置项
map.set_global_opts(title_opts=opts.TitleOpts(title="中国疫情情况"),#设置图标题
visualmap_opts=opts.VisualMapOpts(
is_piecewise=True,
pieces=[
{"min":1,"max": 10},
{"min": 10, "max": 20},
{"min": 20, "max": 30},
{"min": 30, "max": 40},
{"min": 40, "max": 50},
{"min": 50, "max": 60},
{"min": 60, "max": 70},
{"min": 70, "max": 80},
{"min": 80, "max": 90},
{"min": 90, "max": 100},
{"min": 100}]
)) #显示图例
map.render("中国疫情分布情况.html")
效果:
手机扫一扫
移动阅读更方便
你可能感兴趣的文章