来一篇使用数据库存储的教学案例吧



1、通过数据库的方式存储疫情数据


同时推荐前面作者另外两个系列文章:

一、准备阶段

1、分析网页结构

2、发送请求并获取Json数据


通过分析url地址、请求方法、参数及响应格式,可以获取Json数据,注意url需要增加一个时间戳。


import time, json, requests
# 抓取腾讯疫情实时json数据
url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5&callback=jQuery3410030722131703015076_1585221499806&_=1585221499807'
response = requests.get(url=url)
# 获得了返回的json串,其中 得到的数据不是正式的json数据,需要用切片切出我们需要的部分
data = json.loads(response.text[43:-1])
# data 中的目标数据,并非是一个字典,而是一个长得像字典的字符串---JSON串 相当于JSON中嵌套了一个JSON
data = json.loads(data['data'])
print(data)
# 获得国内累计所有数据
  • 下图为所获得的所有数据
    1、爬取数据通过数据库存储_sql

3、创建并完善数据库


数据库我选用的是mysql+SQLyog
下图为所要创建的表以及基本参数:
我们总共需要创建四个表


1、爬取数据通过数据库存储_sql_02

1、爬取数据通过数据库存储_数据_03

1、爬取数据通过数据库存储_python_04

1、爬取数据通过数据库存储_数据_05

  • 好了,以上即为我们需要提前准备的部分。

二、完整代码实现

# encoding: utf-8
# getOnsInfo?name=dease_h5:
# 国内累计数据 国内当日新增数据 各个省的当日信息和累计信息 各个市的当日信息和累计信息
import requests,json,pymysql
def get_database():
conn = pymysql.connect(host='localhost',
user='root',
password='199712',
db='yiqing',
charset='utf8')
# 创建游标
cursor = conn.cursor()
return conn,cursor

def close(conn,cursor):
cursor.close()
conn.close()

# 国内累计数据
def china_total_data():
#发送请求:
url='https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5&callback=jQuery3410030722131703015076_1585221499806&_=1585221499807'
response=requests.get(url=url)
# 获得了返回的json串,其中 得到的数据不是正式的json数据,需要用切片切出我们需要的部分
data=json.loads(response.text[43:-1])
# data 中的目标数据,并非是一个字典,而是一个长得像字典的字符串---JSON串 相当于JSON中嵌套了一个JSON
data = json.loads(data['data'])
# print(data)
# 获得国内累计所有数据
total_data=data['chinaTotal']
# 获得确诊数量
confirm=total_data['confirm']
# 获得治愈数量
heal=total_data['heal']
# 获得死亡数量
dead=total_data['dead']
# 获得疑似数量
suspect=total_data['suspect']
# ============================================数据处理完毕
# 数据入库: ---在使用数据库之前,一定要先创建好库表
conn,cursor=get_database()
# 准备sql
sql='insert into china_total(confirm,heal,dead,suspect) values(%s,%s,%s,%s)'
# 执行sql
cursor.execute(sql,args=[confirm,heal,dead,suspect])
conn.commit()
close(conn,cursor)

# 各个省累计数据
def provinces_total_data():
# 发送请求:
url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5&callback=jQuery3410030722131703015076_1585221499806&_=1585221499807'
response = requests.get(url=url)
# 获得了返回的json串,其中 得到的数据不是正式的json数据,需要用切片切出我们需要的部分
data = json.loads(response.text[43:-1])
# data 中的目标数据,并非是一个字典,而是一个长得像字典的字符串---JSON串 相当于JSON中嵌套了一个JSON
data = json.loads(data['data'])
# print(data)
# 获得所有的省累计所有数据
privinces_data = data['areaTree'][0]['children']
for privince in privinces_data:
privince_name=privince['name']
total_data=privince['total']
# 获得确诊数量
confirm = total_data['confirm']
# 获得治愈数量
heal = total_data['heal']
# 获得死亡数量
dead = total_data['dead']
# 获得疑似数量
suspect = total_data['suspect']
# ============================================数据处理完毕
# 数据入库: ---在使用数据库之前,一定要先创建好库表
conn, cursor = get_database()
# 准备sql
sql = 'insert into provinces_total(province_name,confirm,heal,dead,suspect) values(%s,%s,%s,%s,%s)'
# 执行sql
cursor.execute(sql, args=[privince_name,confirm, heal, dead, suspect])
conn.commit()
close(conn, cursor)

# 各个市累计数据
def cities_total_data():
# 发送请求:
url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5&callback=jQuery3410030722131703015076_1585221499806&_=1585221499807'
response = requests.get(url=url)
# 获得了返回的json串,其中 得到的数据不是正式的json数据,需要用切片切出我们需要的部分
data = json.loads(response.text[43:-1])
# data 中的目标数据,并非是一个字典,而是一个长得像字典的字符串---JSON串 相当于JSON中嵌套了一个JSON
data = json.loads(data['data'])
# print(data)
# 获得所有的省累计所有数据
p_total_data = data['areaTree'][0]['children']
for province in p_total_data:
# 获得省的名字
province_name = province['name']
for city in province['children']:
#获得市的名字
city_name=city['name']
# 获得总数据
total_data = city['total']
# 获得确诊数量
confirm = total_data['confirm']
# 获得治愈数量
heal = total_data['heal']
# 获得死亡数量
dead = total_data['dead']
# 获得疑似数量
suspect = total_data['suspect']
# ============================================数据处理完毕
# 数据入库: ---在使用数据库之前,一定要先创建好库表
conn, cursor = get_database()
# 准备sql
sql = 'insert into cities_total(privince_name,city_name,confirm,heal,dead,suspect) values(%s,%s,%s,%s,%s,%s)'
# 执行sql
cursor.execute(sql, args=[province_name,city_name, confirm, heal, dead, suspect])
conn.commit()
close(conn, cursor)

# 国内历史日增数据
def china_history_daily_data():
# 发送请求:
url = 'https://view.inews.qq.com/g2/getOnsInfo?name=disease_other&callback=jQuery34106126228069621358_1585225505936&_=1585225505937'
response = requests.get(url=url)
# print(response.text)
# 获得了返回的json串,其中 得到的数据不是正式的json数据,需要用切片切出我们需要的部分
data = json.loads(response.text[41:-1])
# data 中的目标数据,并非是一个字典,而是一个长得像字典的字符串---JSON串 相当于JSON中嵌套了一个JSON
data=json.loads(data['data'])
# print(data)
for daily_data in data['chinaDayList']:
confirm=daily_data['confirm']
suspect=daily_data['suspect']
heal=daily_data['heal']
dead=daily_data['dead']
day_time=daily_data['date']
# print(confirm,suspect,heal,dead,day_time)
# 入库
conn,cursor=get_database()
sql='insert into china_history_add(confirm,suspect,heal,dead,day_time) values(%s,%s,%s,%s,%s)'
cursor.execute(sql,args=[confirm,suspect,heal,dead,day_time])
conn.commit()
close(conn,cursor)


# 一键更新
def update():
conn,cursor=get_database()
l=['china_total','china_history_add','cities_total','provinces_total']
for table in l:
# 清空数据库
sql='TRUNCATE table %s'%table
cursor.execute(sql)
conn.commit()
close(conn, cursor)
# 重新获取新数据
china_total_data()
china_history_daily_data()
provinces_total_data()
cities_total_data()

if __name__ == '__main__':
china_total_data()
provinces_total_data()
cities_total_data()
china_history_daily_data()
update()

三、保存成功

1、爬取数据通过数据库存储_sql_06

  本次的分享就到这里了,


1、爬取数据通过数据库存储_数据_07

   看 完 就 赞 , 养 成 习 惯 ! ! ! \color{#FF0000}{看完就赞,养成习惯!!!} 看完就赞,养成习惯!!!^ _ ^ ❤️ ❤️ ❤️

  码字不易,大家的支持就是我坚持下去的动力。点赞后不要忘了关注我哦!