全球疫情地圖顯示


一、項目要求:

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

 五、運行截圖

 

 六、遇到的問題

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM