移動端+網頁端全球疫情數據展示系統


寫在前面:

本文所有代碼已發布到github: web端:(https://github.com/wushenjiang/getWorldDataJava) 安卓端:(https://github.com/wushenjiang/GetWorldData),需要代碼的可以自行去clone。
3.23更新:原爬蟲代碼由於騰訊更改接口已失效,更新新的爬蟲代碼
4.4更新:騰訊又更改了接口,更新了新的爬蟲代碼
4.5更新:發現爬蟲代碼爬到的是舊數據,更新新的爬蟲代碼
2021年更新:服務器過期,刪除服務器地址

需求:

設計思想:

  • 1.首先需要用Python寫的爬蟲(基本代碼來自於前幾天的博客https://www.cnblogs.com/wushenjiang/p/12466220.html,在其基礎上進行了修改以爬取全球數據) 爬取全球數據,並存到服務器數據庫。
  • 2.編寫web端代碼,通過連接服務器數據庫獲取數據,並實現基本的查詢顯示(分表和圖兩種形式)。
  • 3.編寫移動端代碼,連接同一個服務器數據庫以獲取數據,並實現基本的查詢顯示。

編程前准備:

  • 1.首先需要准備一個服務器,這里采用了阿里雲的雲服務器(請讀者自行購買)。之后在服務器端部署mysql數據庫和tomcat和JDK以部署web項目,部署教程見鏈接:https://www.cnblogs.com/yijialong/p/9606265.html
  • 2.web端為了美觀,使用了bootstrap框架。需要了解bootstrap的使用。

爬蟲代碼展示:

import pymysql
import requests
import json
# 放入要爬的url
url_foreign = "https://api.inews.qq.com/newsqa/v1/automation/foreign/country/ranklist"
url_inside = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5"
# 設置header做一個防爬機制
header = {"user-agent": "Mozilla/5.0 (Linux; Android 8.0.0; Pixel 2 XL Build/OPD1.170816.004) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Mobile Safari/537.36"}
# 獲取response的json
response_foreign = requests.get(url_foreign, headers=header)
response_inside = requests.get(url_inside,headers=header)
data_foreign = json.loads(response_foreign.content.decode())
data_str_foreign = data_foreign['data']
data_inside = json.loads(response_inside.content.decode())
data_str_inside = data_inside['data']
data_json_inside = json.loads(data_str_inside)
# 連接數據庫
db = pymysql.connect(host='39.97.109.245', port=3306, user='root', password='abc456', db='yiqing', charset='utf8')
#使用cursor方法生成一個游標
cursor = db.cursor()
confirmed_total = 0
suspected_total = 0
dead_total = 0
healed_total = 0
# 更新時間
lastUpdateTime = data_json_inside['lastUpdateTime']
# 取出外國的數據
for foreignData in data_str_foreign:
    countryName = foreignData['name']
    confirmed = foreignData['confirm']
    confirmed_total += confirmed
    suspected = foreignData['suspect']
    suspected_total += suspected
    dead = foreignData['dead']
    dead_total += dead
    healed = foreignData['heal']
    healed_total += healed
    # 將外國數據上傳到數據庫
    sql = "insert into worlddata(id,countryname,confirmed,suspected,dead,healed,lastupdateTime) values({},'{}','{}','{}','{}', '{}','{}')".format(0, countryName, confirmed, suspected, dead, healed, lastUpdateTime)
    cursor.execute(sql)
    db.commit()
# 取出中國的數據
ChinaName = data_json_inside['areaTree'][0]['name']
china_confirmed = data_json_inside['areaTree'][0]['total']['confirm']
confirmed_total += china_confirmed
china_suspected = data_json_inside['areaTree'][0]['total']['suspect']
suspected_total += china_suspected
china_healed = data_json_inside['areaTree'][0]['total']['heal']
healed_total += china_healed
china_dead = data_json_inside['areaTree'][0]['total']['dead']
dead_total += dead_total
# 將中國數據上傳到數據庫
sql_china = "insert into worlddata(id,countryname,confirmed,suspected,dead,healed,lastupdateTime) values({},'{}','{}','{}','{}', '{}','{}')".format(
    0, ChinaName, china_confirmed, china_suspected, china_dead, china_dead, lastUpdateTime)
cursor.execute(sql_china)
db.commit()
# 將匯總數據上傳到數據庫
sql_total = "insert into worlddata(id,countryname,confirmed,suspected,dead,healed,lastupdateTime) values({},'{}','{}','{}','{}', '{}','{}')".format(0, 0, confirmed_total, suspected_total, dead_total, healed_total, lastUpdateTime)
cursor.execute(sql_total)
db.commit()

效果截圖:

APP截圖:


預估時間記錄日志:

PSP2.1 階段 時間
Planning 計划 3h45m
- Estimate 估計這個任務需要多少時間 3h45m
Development 開發
- Analysis 需求分析 1h30m
- Coding Standard 代碼規范 15m
- Design 具體設計 30m
- Coding 具體編碼 30m
- Test 測試 1h
- Count 總計 3h45min

實際時間記錄日志:

PSP2.1 階段 時間
Development 開發
- Analysis 需求分析 2h
- Coding Standard 代碼規范 15m
- Design 具體設計 30m
- Coding 具體編碼 45m
- Test 測試 1h30min
- Count 總計 5h

測試用例分享:

WEB:

  • 1.國家 中國 表格
  • 2.國家 美國 圖表
  • 3.時間 2020-03-17 表格
  • 4.時間 2020-03-17 圖表
  • 5.時間 2020-03-18 圖表

APP:

  • 1.國家 中國
  • 2.時間 2020-03-17
  • 3.時間 2020-3-17
  • 4.國家 美
  • 5.國家 意

總結:

本次作業也算是真正的體驗了一把如何開發真正的項目,從WEB開發到APP開發再到部署到服務器,整個體驗了一波如何構造一個小型項目,收益很大。由於安卓開發不是很熟練,所以花費了大量時間在查找資料和各種示例代碼上,因為對安卓組件的不熟悉,每做一個都要百度一下這個組件怎么使用,也是極大的浪費了時間。以后會抓緊學習安卓開發,爭取做出更好的APP。WEB端方面,正在學習SSM框架,等學習完后可能會將本項目進行重構。來日方長,加油吧自己。


免責聲明!

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



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