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
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
|