一、项目要求:
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()
已经发表到GitHub上面,查看链接如下:
https://github.com/hhjing1/worlddata-illness
五、运行截图
六、遇到的问题
这次的问题感觉更多的来自心理化,开始的时候被老师的项目要求和样式吓到了,感觉很厉害很高大上,远远超出自己的能力范围,所以没有做太多的想法和准备,但是看到后期越来越多的人都完成了冲刺,我就观看了别人的思路和代码样式。自己按着最开始的思路尝试着写,感觉很不容易,自己在网上找世界地图,废了很大的劲还是没能找到,最后寻找了班长的帮助,才完成最终的结果,虽说页面有些丑,但是自己还是挺开心的。加油,勇于尝试,敢于编写,才有突破!