一、項目要求:
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
五、運行截圖
六、遇到的問題
這次的問題感覺更多的來自心理化,開始的時候被老師的項目要求和樣式嚇到了,感覺很厲害很高大上,遠遠超出自己的能力范圍,所以沒有做太多的想法和准備,但是看到后期越來越多的人都完成了沖刺,我就觀看了別人的思路和代碼樣式。自己按着最開始的思路嘗試着寫,感覺很不容易,自己在網上找世界地圖,廢了很大的勁還是沒能找到,最后尋找了班長的幫助,才完成最終的結果,雖說頁面有些丑,但是自己還是挺開心的。加油,勇於嘗試,敢於編寫,才有突破!