全球疫情地图显示

一、项目要求:

web版进行地图查询:

二、项目思路

1.用python爬虫将数据存到指定的数据库中

2.再web端进行读取和查询,这个相对上次的中国地图多了主界面的相对布局,其余的一些思路和功能大体一样

3.这个在网上寻找世界地图和历史数据有点困难(班长帮助)

二、项目截图

 四、相关源码

python的相关代码:

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')
#print(content)
soup = BeautifulSoup(content, 'html.parser')#指定Beautiful的解析器为“html.parser”
'''*find()
返回的是第一个匹配的标签结果
*find_all()
返回的是所有匹配结果的列表'''
#世界确诊
listB = soup.find_all(name='script',attrs={"id":"getListByCountryTypeService2true"})
account = str(listB)#转化成字符串
#print(account)
messages = account[95:-21]#截取从52到后边倒数21个
print(messages)
messages_json = json.loads(messages)#json.loads 用于解码 JSON 数据。该函数返回 Python 字段的数据类型。
valuesList = []
cityList = []
con=len(messages_json)#Python len() 方法返回对象(字符、列表、元组等)长度或项目个数
k=0
for i in range(len(messages_json)):#从0到len
    k=k+1#time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))格式化当前时间
    value = (k,time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())),messages_json[i].get('provinceName'),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)#进行添加到list中
#数据库的写入
#打开数据库连接
db = pymysql.connect("localhost", "root", "20000604", "database", charset='utf8')
#使用此方法获取操作游标
cursor = db.cursor()

array = np.asarray(valuesList[0])
'''DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。
TRUNCATE TABLE 通过释放存储表数据所用的数据页来删除数据,并且只在事务日志中记录页的释放。 '''
sql_clean_province = "TRUNCATE TABLE info4"
sql = "INSERT INTO worlddata values (%s,%s,%s,%s,%s,%s,%s,%s,%s) "
'''>>>tuple([1,2,3,4])
(1, 2, 3, 4)
>>> tuple({1:2,3:4})    #针对字典 会返回字典的key组成的tuple
(1, 3)
>>> tuple((1,2,3,4))    #元组会返回元组自身
(1, 2, 3, 4)'''
value_tuple = tuple(valuesList)

try:
    cursor.execute(sql_clean_province)
    db.commit()
except:
    '''    connection.rollback()
该方法回滚自上一次调用 commit() 以来对数据库所做的更改'''
    print('执行失败,进入回调1')
    db.rollback()

try:
    '''cursor.executemany(sql, seq_of_parameters)
该例程对 seq_of_parameters 中的所有参数或映射执行一个 SQL 命令。'''
    cursor.executemany(sql, value_tuple)
    '''connection.commit()
该方法提交当前的事务。如果您未调用该方法,
那么自您上一次调用 commit() 以来所做的任何动作
对其他数据库连接来说是不可见的'''
    db.commit()
except:
    print('执行失败,进入回调3')
    db.rollback()
    '''    connection.close()
该方法关闭数据库连接。请注意,这不会自动调用 commit()。
如果您之前未调用 commit() 方法,就直接关闭数据库连接,
您所做的所有更改将全部丢失!'''
db.close()
worlddata

已经发表到GitHub上面,查看链接如下:

 https://github.com/hhjing1/worlddata-illness

 五、运行截图

 六、遇到的问题

       这次的问题感觉更多的来自心理化,开始的时候被老师的项目要求和样式吓到了,感觉很厉害很高大上,远远超出自己的能力范围,所以没有做太多的想法和准备,但是看到后期越来越多的人都完成了冲刺,我就观看了别人的思路和代码样式。自己按着最开始的思路尝试着写,感觉很不容易,自己在网上找世界地图,废了很大的劲还是没能找到,最后寻找了班长的帮助,才完成最终的结果,虽说页面有些丑,但是自己还是挺开心的。加油,勇于尝试,敢于编写,才有突破!

原文地址:https://www.cnblogs.com/hhjing/p/12654224.html