#-*- coding = utf-8 -*-
#@Time : 2020/8/7 17:12
#@Author : 刘
#@File : spider.py
#@Software : PyCharm
import sys
import requests
import json
import time
import pymysql
import traceback
from selenium.webdriver import Chrome,ChromeOptions
def get_tenxun_Data():
url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_other'
hear = {
"user-agent": " Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"
}
res = requests.get(url, hear)
d = json.loads(res.text)
data_all_other = json.loads(d["data"])
history = {} # 存储历史记录
# {'confirm': 41, 'suspect': 0, 'dead': 1, 'heal': 0, 'nowConfirm': 0,
# 'nowSevere': 0, 'importedCase': 0, 'deadRate': '2.4', 'healRate': '0.0',
# 'date': '01.13', 'noInfect': 0}
for i in data_all_other["chinaDayList"]:
ds = "2021." + i["date"]
tup = time.strptime(ds, "%Y.%m.%d")
ds = time.strftime("%Y-%m-%d", tup)
confirm = i["confirm"] # 确认
suspect = i["suspect"] # 怀疑
heal = i["heal"] # 治愈
dead = i["dead"] # 死
history[ds] = {"confirm": confirm, "suspect": suspect, "heal": heal, "dead": dead}
for i in data_all_other["chinaDayAddList"]:
ds = "2021." + i["date"]
tup = time.strptime(ds, "%Y.%m.%d")
ds = time.strftime("%Y-%m-%d", tup)
confirm = i["confirm"] # 确认
suspect = i["suspect"] # 怀疑
heal = i["heal"] # 治愈
dead = i["dead"] # 死
history[ds].update({"confirm_add": confirm, "suspect_add": suspect, "heal_add": heal, "dead_add": dead})
# print(history)
url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5'
r = requests.get(url)
rd = json.loads(r.text)
data_all_h5 = json.loads(rd["data"])
# print(data_all.keys())
# dict_keys(['lastUpdateTime', 'chinaTotal', 'chinaAdd',
# 'isShowAdd', 'showAddSwitch', 'areaTree'])
details = [] # 单日详细数据
update_time = data_all_h5["lastUpdateTime"]
data_country = data_all_h5["areaTree"] # 国家
data_province = data_country[0]["children"] # 中国各省份
# {'name': '香港', 'today': {'confirm': 246, 'confirmCuts': 0,
# 'isUpdated': True}, 'total': {'nowConfirm': 1508, 'confirm': 3397,
# 'suspect': 0, 'dead': 31, 'deadRate': '0.91', 'showRate': False,
# 'heal': 1858, 'healRate': '54.70', 'showHeal': True}}
for pro in data_province:
province = pro["name"] # 各省份名字
for city_info in pro["children"]:
city = city_info["name"] # 城市名字
confirm = city_info["total"]["confirm"] # 确认人数
confirm_add = city_info["today"]["confirm"] # 确认新增加
heal = city_info["total"]["heal"] # 治愈
dead = city_info["total"]["dead"] # 死
details.append([update_time, province, city, confirm, confirm_add, heal, dead])
# print(details)
return history, details
def get_conn():
conn = pymysql.connect(host="120.78.0.225",user="root",password="123456",db="cov",charset="utf8")
cur = conn.cursor()
return conn,cur
def close_conn(conn,cur):
if conn:
conn.close()
if cur:
cur.close()
def update_details():
'''
更新details表
'''
cur = None
con = None
try:
li = get_tenxun_Data()[1] #0是历史数据字典,1是最新数据
con,cur = get_conn()
sql = '''
insert into details(update_time,province,city,confirm,confirm_add,heal,dead)
values(%s,%s,%s,%s,%s,%s,%s)
'''
sql_query = "select %s = (select update_time from details order by id desc limit 1 )" #对比当前最大时间
cur.execute(sql_query,li[0][0])
if not cur.fetchone()[0]:
print(f"{time.asctime()}开始更新数据")
for item in li:
cur.execute(sql,item)
con.commit()
print(f"{time.asctime()}更新数据完毕")
else:
print(f"{time.asctime()}已经是最新数据!")
except:
traceback.print_exc()
finally:
close_conn(con,cur)
def insert_history():
'''
insert_history 插入历史数据
'''
cur = None
con = None
try:
dic = get_tenxun_Data()[0] # 0是历史数据字典,1是最新数据
print(f"{time.asctime()}开始插入数据")
con, cur = get_conn()
sql = '''
insert into history values(%s,%s,%s,%s,%s,%s,%s,%s,%s)
'''
for k, v in dic.items():
# item格式 {"2020-08-01":{"confirm":41,"suspect"}:0}
cur.execute(sql, [k, v.get("confirm"), v.get("confirm_add"), v.get("suspect"),
v.get("suspect_add"), v.get("heal"), v.get("heal_add"),
v.get("dead"), v.get("dead_add")])
con.commit()
print(f"{time.asctime()}插入数据完毕")
except:
traceback.print_exc()
finally:
close_conn(con, cur)
def update_history():
'''
update_history 更新历史数据
'''
cur = None
con = None
try:
dic = get_tenxun_Data()[0] #0是历史数据字典,1是最新数据
print(f"{time.asctime()}开始更新数据")
con,cur = get_conn()
sql = '''
insert into history values(%s,%s,%s,%s,%s,%s,%s,%s,%s)
'''
sql_query = "select confirm from history where ds=%s"
for k,v in dic.items():
print(k)
print(v)
#item格式 {"2020-08-01":{"confirm":41,"suspect"}:0}
if not cur.execute(sql_query,k):
cur.execute(sql,[k,v.get("confirm"),v.get("confirm_add"),v.get("suspect"),
v.get("suspect_add"),v.get("heal"),v.get("heal_add"),
v.get("dead"),v.get("dead_add")])
con.commit()
print(f"{time.asctime()}历史数据更新完毕")
except:
traceback.print_exc()
finally:
close_conn(con,cur)
def get_baiduresou():
option = ChromeOptions()
option.add_argument("--headless") # 隐藏浏览器
option.add_argument("--no-sandbox")
data = []
url = 'http://top.baidu.com/buzz?b=1&fr=topindex'
browser = Chrome(options=option)
browser.get(url)
c = browser.find_elements_by_xpath('//*[@id="main"]/div[2]/div/table/tbody/tr/td[2]/a[1]')
context = [i.text for i in c]
b = browser.find_elements_by_xpath('//*[@id="main"]/div[2]/div/table/tbody/tr/td[4]/span')
num = [i.text for i in b]
# print(context)
return context, num
def update_baidu():
cursor = None
conn = None
try:
context, num = get_baiduresou()
print(f"{time.asctime()}开始更新热搜数据")
conn, cursor = get_conn()
sql = '''
insert into hotsearch(dt,content,num) values(%s,%s,%s)
'''
ts = time.strftime("%Y-%m-%d %X")
for i, n in zip(context, num):
cursor.execute(sql, (ts, i, n))
conn.commit()
print(f"{time.asctime()}数据更新完毕")
except:
traceback.print_exc()
finally:
close_conn(conn, cursor)
if __name__ == '__main__':
l = len(sys.argv)
if l == 1:
s = '''
请输入参数:
参数说明:
update_history(up_his) 更新历史记录表
update_details(up_det) 更新详细表
update_baidu(up_hot) 更新实时热搜
'''
print(s)
else:
order = sys.argv[1]
if order == "up_his":
update_history()
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
知识领域: 数据可视化、疫情数据分析、Web开发、Python编程 技术关键词: Python Flask、数据可视化、疫情数据、前端开发、后端开发 内容关键词: 疫情数据展示、图表可视化、地理信息、实时数据更新 用途: 提供一个基于Python Flask框架的疫情大数据可视化网站,用于展示和分析全球疫情数据,帮助用户更好地理解疫情趋势和数据。 资源描述: 这个资源是一个使用Python Flask框架开发的疫情大数据可视化网站,旨在以图表和地理信息的形式展示全球疫情数据,为用户提供实时更新的数据分析工具。 内容概要: 该网站通过数据可视化技术将全球疫情数据转化为各种图表、地图等形式,包括感染人数、死亡人数、康复人数、疫苗接种情况等信息,以便用户更直观地了解疫情趋势和分布。 适用人群: 适用于对疫情数据感兴趣的公众,数据分析师、学生、政府部门、媒体等人群。 使用场景及目标: 用户可以在该网站上查看全球、国家和地区的疫情数据,进行趋势分析、地理分布观察等。目标是通过直观的数据展示,帮助用户了解疫情的动态变化,从而做出科学决策。 其他说明: 网站可能需要实时获取数据源,用户需要确保数据
资源推荐
资源详情
资源评论
收起资源包目录
Python Flask 疫情大数据可视化网站 (106个子文件)
bootstrap.css 193KB
bootstrap.min.css 156KB
icofont.min.css 90KB
animate.css 76KB
bootstrap-grid.css 66KB
boxicons.css 65KB
animate.min.css 57KB
boxicons.min.css 52KB
bootstrap-grid.min.css 50KB
aos.css 25KB
style.css 24KB
venobox.css 19KB
animations.css 7KB
bootstrap-reboot.css 5KB
bootstrap-reboot.min.css 4KB
main.css 1KB
transformations.css 683B
boxicons.eot 224KB
.gitignore 184B
index.html 7KB
new_file.html 2KB
main.html 1KB
Cov.iml 678B
slide-1.jpg 218KB
slide-3.jpg 185KB
about.jpg 156KB
slide-2.jpg 144KB
portfolio-7.jpg 119KB
team-2.jpg 89KB
team-1.jpg 83KB
portfolio-5.jpg 79KB
portfolio-1.jpg 74KB
portfolio-9.jpg 57KB
team-3.jpg 55KB
portfolio-3.jpg 55KB
team-4.jpg 48KB
portfolio-2.jpg 45KB
portfolio-4.jpg 27KB
portfolio-6.jpg 25KB
portfolio-8.jpg 16KB
echarts.min.js 753KB
echarts.min.js 753KB
bootstrap.bundle.js 223KB
bootstrap.js 132KB
echarts-wordcloud.min.js 125KB
echarts-wordcloud.min.js 125KB
jquery.min.js 91KB
jquery.min.js 91KB
isotope.pkgd.js 89KB
jquery.min.js 86KB
bootstrap.bundle.min.js 79KB
china.js 60KB
china.js 60KB
bootstrap.min.js 59KB
isotope.pkgd.min.js 35KB
venobox.js 32KB
aos.js 14KB
venobox.min.js 11KB
jquery.sticky.js 9KB
jquery.waypoints.min.js 9KB
main.js 6KB
controller.js 3KB
jquery.easing.min.js 2KB
controller.js 2KB
counterup.min.js 2KB
ec_left1_js.js 2KB
ec_left1_js.js 2KB
ec_right2_js.js 1KB
ec_right2_js.js 1KB
ec_left2_js.js 1KB
ec_right1_js.js 1KB
ec_right1_js.js 1KB
ec_left2_js.js 1KB
ec_center.js 1KB
ec_center.js 1KB
bootstrap.min.css.map 627KB
bootstrap.css.map 493KB
bootstrap.bundle.js.map 400KB
bootstrap.bundle.min.js.map 311KB
bootstrap.js.map 250KB
bootstrap.min.js.map 190KB
bootstrap-grid.css.map 154KB
jquery.min.map 133KB
bootstrap-grid.min.css.map 112KB
bootstrap-reboot.css.map 76KB
bootstrap-reboot.min.css.map 32KB
apple-touch-icon.png 2KB
favicon.png 491B
spider.py 8KB
demo.py 3KB
utlis.py 2KB
app.py 2KB
utlis.cpython-38.pyc 3KB
app.cpython-38.pyc 3KB
boxicons.svg 797KB
boxicons.ttf 224KB
icofont.woff 630KB
boxicons.woff 224KB
icofont.woff2 525KB
boxicons.woff2 79KB
共 106 条
- 1
- 2
资源评论
大大怪打LZR
- 粉丝: 1052
- 资源: 46
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功