You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

266 lines
9.6 KiB

import requests,json
from pymysql import *
from bs4 import BeautifulSoup
import datetime,xingZheng
def hello():
return '我是hello'
def connectDB():
try:
db = connect(host='localhost', port=3306, user='root', password='759521', db='FeiYan')
print("数据库连接成功")
return db
except Exception as e:
print(e)
return
db = connectDB()
def insert_city(db,updata_time,province_name,name,now_confirm,confirm,dead):
cursor=db.cursor()
try:
cursor.execute("insert into city(update_time,province_name,name,now_confirm,confirm,dead) values ('%s','%s','%s','%s','%s','%s')"%(updata_time,province_name,name,now_confirm,confirm,dead))
print('成功插入')
db.commit()
cursor.close()
return True
except Exception as e:
print(e)
db.rollback()
return False
def insert_country(dazhou_name,name,confirm,dead,now_confirm):
cursor=db.cursor()
try:
cursor.execute("insert into country(dazhou_name,name,confirm,dead,now_confirm)values ('%s','%s','%s','%s','%s')"%(dazhou_name,name,confirm,dead,now_confirm))
print('插入成功')
db.commit()
cursor.close()
return True
except Exception as e:
print(e)
db.rollback()
return False
#城市疫情表插入数据
def insert_rumor(neirong,lunduan,zhengwen,bool):
cursor = db.cursor()
try:
cursor.execute(
"insert into rumor(neirong,lunduan,zhengwen,bool)values ('%s','%s','%s','%s')" % (neirong,lunduan,zhengwen,bool))
print('插入成功')
db.commit()
cursor.close()
return True
except Exception as e:
db.rollback()
return False
def insert_hospital(name,dizhi,cityname,shuxing):
cursor = db.cursor()
try:
cursor.execute(
"insert into hospital(hos_name,location,city_name,shuxing)values ('%s','%s','%s','%s')" % (name,dizhi,cityname,shuxing))
print('插入成功')
db.commit()
cursor.close()
return True
except Exception as e:
print(e)
db.rollback()
def insert_prov(province_name,city_name):
cursor = db.cursor()
try:
cursor.execute(
"insert into province(province_name,city_name)values ('%s','%s')" % (province_name,city_name))
print('插入成功')
db.commit()
cursor.close()
return True
except Exception as e:
print(e)
db.rollback()
def insert_dazhou(dazhou_name,country_name):
cursor = db.cursor()
try:
cursor.execute(
"insert into dazhou(dazhou_name,country_name)values ('%s','%s')" % (dazhou_name,country_name))
print('插入成功')
db.commit()
cursor.close()
return True
except Exception as e:
print(e)
db.rollback()
def spider_city():
one=requests.get(url='https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5').json()
print(one)
data=json.loads(one['data'])
update_time=data['lastUpdateTime']
all_counties=data['areaTree']
print(data)
print(update_time)
print(all_counties)
all_list=[]
for country_data in all_counties:
if country_data['name']=='中国':
all_provinces=country_data['children']
for province_data in all_provinces:
province_name= province_data['name']
all_cities = province_data['children']
for city_data in all_cities:
city_name = city_data['name']
city_total = city_data['total']
province_result = {'province': province_name, 'city': city_name, 'update_time': update_time}
province_result.update(city_total)
all_list.append(province_result)
for i in all_list:
print(i)
insert_city(db,updata_time=i.get('update_time'),province_name=i.get('province'),name=i.get('city'),now_confirm=i.get('nowConfirm'),confirm=i.get('confirm'),dead=i.get('dead'))
print(all_list)
print('国内完毕')
return
def spider_foreign():
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) # 发送网络请求
content = response.content.decode('utf-8')
soup = BeautifulSoup(content, 'html.parser')
# 世界确诊getAreaStat
listB = soup.find_all(name='script', attrs={"id": "getListByCountryTypeService2true"})
world_messages = str(listB)[95:-21]
print(world_messages)
world_messages_json = json.loads(world_messages)
worldList = []
now_time = datetime.datetime.now().strftime('%Y-%m-%d')
for k in world_messages_json:
name=k.get('provinceName')
dazhou=k.get('continents')
now_confirm=k.get('currentConfirmedCount')
confirm=k.get('confirmedCount')
dead=k.get('deadCount')
insert_country(dazhou_name=dazhou,name=name,confirm=confirm,dead=dead,now_confirm=now_confirm)
print(k)
print('国外完毕')
return
def spider_rumor():
url = 'https://ncov.dxy.cn/ncovh5/view/pneumonia_rumors?target=5&from=dxy' # 请求地址
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) # 发送网络请求
content = response.content.decode('utf-8')
soup = BeautifulSoup(content, 'html.parser')
listB = soup.find_all(name='script', attrs={"id": "getIndexRumorList"})
print(listB)
cc=str(listB)[65:-21]
js=json.loads(cc)
print(js)
for c in js:
neirong=c.get('title')
lunduan=c.get('mainSummary')
zhengwen=c.get('body')
zhenjia=c.get('rumorType')
insert_rumor(neirong=neirong,lunduan=lunduan,zhengwen=zhengwen,bool=zhenjia)
print(c)
print('谣言完毕')
return
def spider_hospital():
a=1
for i in range(11,66):
for j in range(0,25):
print('id=%d'%(a))
a+=1
url = 'https://card.wecity.qq.com/feverHosp/feverHospList?cityCode=%d%02d00&pageIndex=1&pageSize=999&partnerType=4&lat=0&lng=0&searchKey=&sort=distance' %(i,j)# 请求地址
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) # 发送网络请求
content = response.content.decode('utf-8')
if len(content)<=60:
continue
cc=json.loads(content)
dd=cc['data']
ee=dd['data']
print(ee)
for k in ee:
name=k.get('orgName')
dizhi=k.get('orgAddr')
shiming=xingZheng.use(int(k.get('cityCode')))
shuxing='发热门诊'
insert_hospital(name=name,dizhi=dizhi,cityname=shiming,shuxing=shuxing)
if i in (11, 12, 31, 50):#4个直辖市
break
print('结束了')
return
def chushihua_prov():
one = requests.get(url='https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5').json()
print(one)
data = json.loads(one['data'])
update_time = data['lastUpdateTime']
all_counties = data['areaTree']
print(data)
print(update_time)
print(all_counties)
all_list = []
for country_data in all_counties:
if country_data['name'] == '中国':
all_provinces = country_data['children']
for province_data in all_provinces:
province_name = province_data['name']
all_cities = province_data['children']
for city_data in all_cities:
city_name = city_data['name']
city_total = city_data['total']
province_result = {'province': province_name, 'city': city_name, 'update_time': update_time}
province_result.update(city_total)
all_list.append(province_result)
for i in all_list:
print(i)
insert_prov(province_name=i.get('province'),city_name=i.get('city'))
print(all_list)
print('省市完毕')
return
def chushihua_dazhou():
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) # 发送网络请求
content = response.content.decode('utf-8')
soup = BeautifulSoup(content, 'html.parser')
# 世界确诊getAreaStat
listB = soup.find_all(name='script', attrs={"id": "getListByCountryTypeService2true"})
world_messages = str(listB)[95:-21]
print(world_messages)
world_messages_json = json.loads(world_messages)
worldList = []
now_time = datetime.datetime.now().strftime('%Y-%m-%d')
for k in world_messages_json:
name = k.get('provinceName')
dazhou = k.get('continents')
now_confirm = k.get('currentConfirmedCount')
confirm = k.get('confirmedCount')
dead = k.get('deadCount')
insert_dazhou(dazhou_name=dazhou,country_name=name)
print(k)
print('大洲初始完毕')
return