• 移动端+网页端全球疫情数据展示系统


    写在前面:

    本文所有代码已发布到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框架,等学习完后可能会将本项目进行重构。来日方长,加油吧自己。

  • 相关阅读:
    shell80set变量
    shell79控制多进程的数量
    shell78管道
    sina sae开发中出现的问题
    html中代码高亮显示
    handlebars模板替换
    打印目录下所有的文件名(包含深层次目录)
    input为disabled提交后得不到该值的解决方法
    Global和Globals
    js算法运算
  • 原文地址:https://www.cnblogs.com/wushenjiang/p/12516037.html
Copyright © 2020-2023  润新知