from os import path
import requests
from bs4 import BeautifulSoup
import json
import pymysql
import numpy as np
import time
url = 'https://ncov.dxy.cn/ncovh5/view/pneumonia?from=timeline&isappinstalled=0' #请求地址
headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36'}#创建头部信息
response = requests.get(url,headers = headers) #发送网络请求
#print(response.content.decode('utf-8'))#以字节流形式打印网页源码
content = response.content.decode('utf-8')
soup = BeautifulSoup(content, 'html.parser')
listA = soup.find_all(name='script',attrs={"id":"getAreaStat"})
account = str(listA)
messages = account[52:-21]
messages_json = json.loads(messages)
valuesList = []
cityList = []
#从数据库中查找目前有多少条信息
db = pymysql.connect("localhost", "root", "fengge666", "yiqing", charset='utf8')
cursor = db.cursor()
sql_findsum="select * from info3"
lenth=0
try:
cursor.execute(sql_findsum)
results = cursor.fetchall()
lenth=len(results)
db.commit()
except:
print('执行失败,进入回调1')
db.rollback()
#算出数据库已有的条数+今天省份的条数,才是城市的开始id
con=len(messages_json)+lenth
#一共有lenth条信息,现在要往上加今天的信息
k=lenth
for i in range(len(messages_json)):
k=k+1
value = (k,time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())),messages_json[i].get('provinceShortName'),None,messages_json[i].get('confirmedCount'),messages_json[i].get('suspectedCount'),messages_json[i].get('curedCount'),messages_json[i].get('deadCount'),messages_json[i].get('locationId'))
valuesList.append(value)
cityValue = messages_json[i].get('cities')
for j in range(len(cityValue)):
con=con+1
cityValueList = (con,time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())),messages_json[i].get('provinceShortName'),cityValue[j].get('cityName'),cityValue[j].get('confirmedCount'),cityValue[j].get('suspectedCount'),cityValue[j].get('curedCount'),cityValue[j].get('deadCount'),cityValue[j].get('locationId'))
cityList.append(cityValueList)
value_tuple = tuple(valuesList)
cityTuple = tuple(cityList)
sql = "INSERT INTO info3 values (%s,%s,%s,%s,%s,%s,%s,%s,%s) "
try:
cursor.executemany(sql, value_tuple)
db.commit()
except:
print('执行失败,进入回调3')
db.rollback()
try:
cursor.executemany(sql,cityTuple)
db.commit()
except:
print('执行失败,进入回调4')
db.rollback()
db.close()