首页 > 技术文章 > Python:爬取中国各市的疫情数据并存储到数据库

linmob 2021-03-29 19:34 原文

 

 

 

import requests
import pymysql
import json

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 payiqing")

    # 使用预处理语句创建表
    sql = """CREATE TABLE payiqing (
            Id INT PRIMARY KEY AUTO_INCREMENT,
            UpDateTime varCHAR(255),
            Province varchar(255),
            City varchar(255),
            Confirm varchar(255),
            Confirm_add varchar(255),
            Heal varchar(255),
            Dead varchar(255))"""
    #upDateTime,provinse,city,confirm,confirm_add,heal,dead
    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 payiqing(UpDateTime,Province,City,Confirm,Confirm_add,Heal,Dead) VALUES ( %s,%s,%s,%s,%s,%s,%s)"
    #updateDateTime,provinse,city,confirm,confirm_add,heal,dead

    try:
        cursor.execute(sql, value)
        db.commit()
        print('插入数据成功')
    except:
        db.rollback()
        print("插入数据失败")
    db.close()

create()  # 创建表

#目标网站
url = 'http://view.inews.qq.com/g2/getOnsInfo?name=disease_h5'

#请求资源,获取相应内容
resp = requests.post(url)

#打印网页内容 print(resp.text)

# 将响应信息进行json格式化
#一个从文件加载,一个从内存加载#json.load(filename)#json.loads(string)
jsonData = json.loads(resp.text)
data_all = json.loads(jsonData["data"])

#保存全国历史数据
history = {}

#print(data_all.keys())
i = data_all["chinaTotal"]
history = {"lastUpdateTime":data_all["lastUpdateTime"],"confirm":i["confirm"] ,"heal":i["heal"],"dead":i["dead"],"suspect":i["suspect"]}
#print(history)

#用于存储当日详细数据的集合
details = []
upDateTime = data_all["lastUpdateTime"]#储存最近更新时间
data_province = data_all["areaTree"][0]["children"] #中国各省

#遍历存储
for pro in data_province:
  provinse = pro["name"]   #省名
  for cit in pro["children"]:
    city = cit["name"]
    confirm = cit["total"]["confirm"]
    confirm_add = cit["today"]["confirm"]
    heal = cit["total"]["heal"]
    dead = cit["total"]["dead"]
    insert((upDateTime,provinse,city,confirm,confirm_add,heal,dead))#存入数据库

 

推荐阅读