疫情统计可视化(二)

 

 

代码:

 yiqing.py

import requests
import json
from pymysql import *
import requests
from retry import retry

headers = {
    "User-Agent": "Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Mobile Safari/537.36"
    , "Referer": "https://wp.m.163.com/163/page/news/virus_report/index.html?_nw_=1&_anw_=1"}


def _parse_url(url):
    response = requests.get(url, headers=headers, timeout=3)  # 3秒之后返回
    return response.content.decode()


def parse_url(url):
    try:
        html_str = _parse_url(url)
    except:
        html_str = None
    return html_str


class yiqing:
    url = "https://c.m.163.com/ug/api/wuhan/app/data/list-total?t=316765429316"

    def getContent_list(self, html_str):
        dict_data = json.loads(html_str)
        # 各省的数据
        content_list = dict_data["data"]

        return content_list

    def saveContent_list(self, i):
        # 打开数据库连接(ip/数据库用户名/登录密码/数据库名)
        con = connect("localhost", "root", "0608", "payiqing")
        # 使用 cursor() 方法创建一个游标对象 cursor
        cursors = con.cursor()
        # 使用 execute()  方法执行 SQL 查询 返回的是你影响的行数

        row = cursors.execute("insert into provinces values(%s,%s,%s,%s,%s,%s,%s,%s)",
                              (i.get('id'), i.get('name'), i.get('total').get('confirm'),
                               i.get('total').get('suspect'), i.get('total').get('heal'),
                               i.get('total').get('dead'), i.get('total').get('severe'),
                               i.get('lastUpdateTime')))
        for j in i.get('children'):
            row = cursors.execute("insert into citys values(%s,%s,%s,%s,%s,%s,%s,%s)",
                                  (j.get('id'), j.get('name'), j.get('total').get('confirm'),
                                   j.get('total').get('suspect'), j.get('total').get('heal'),
                                   j.get('total').get('dead'), j.get('total').get('severe'),
                                   j.get('lastUpdateTime')))
        con.commit()  # 提交事务
        con.close()  # 关闭数据库连接

    def run(self):  # 实现主要逻辑
        # 请求数据
        html_str = parse_url(self.url)
        # 获取数据
        content_list = self.getContent_list(html_str)
        values = content_list["areaTree"][0]["children"]
        for i in values:
            self.saveContent_list(i)


if __name__ == '__main__':
    yq = yiqing()
    yq.run()
    print('爬取,存储成功!!')

yiqing.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<!-- 引入 ECharts 文件 -->
<link rel="stylesheet" href="css/bootstrap.min.css" type="text/css" />
<script src="js/jquery-1.11.3.min.js" type="text/javascript"></script>
<script src="js/bootstrap.min.js" type="text/javascript"></script>
<script src="js/echarts.js"></script>
<script src="js/jquery-1.11.3.min.js" type="text/javascript"></script>
</head>
<body>
    <!-- 为 ECharts 准备一个具备大小(宽高)的Dom -->
    <div id="main" style="width: 100%; height: 450px;"></div>
    <table class="table table-striped">
        <thead>
            <tr>
                <th >时间</th>
                <th >省份</th>
                <th >确诊人数</th>
                <th >疑似人数</th>
                <th >治愈人数</th>
                <th>死亡人数</th>
            </tr>
        </thead>
        <tbody>
            <c:forEach items="${list}" var="item">
                <tr>
                    <td >${item.lastUpdateTime}</td>
                    <td >${item.name}</td>
                    <td >${item.confirm}</td>
                    <td >${item.suspect}</td>
                    <td >${item.heal}</td>
                    <td >${item.dead}</td>
                </tr>
            </c:forEach>
        </tbody>
    </table>
</body>
<script type="text/javascript">
    var dt;
    $(function(){
        $.ajax({
            url : "info?method=yiqing",
            async : false,
            type : "POST",
            success : function(data) {
                dt = data;
                //alert(dt[0].name);
            },
            error : function() {
                alert("请求失败");
            },
            dataType : "json"
        });
    
        var myChart = echarts.init(document.getElementById('main'));
        alert(dt);
        var xd = new Array(0)//长度为33
        var yd = new Array(0)//长度为33
        for (var i = 0; i < 34; i++) {
            xd.push(dt[i].name);
            yd.push(dt[i].confirm);
        }
        alert(xd);
        alert(yd);
        // 指定图表的配置项和数据
        var option = {
            title : {
                text : '全国各省的确诊人数'
            },
            tooltip : {
                trigger : 'axis'
            },
            legend : {
                data : [ '确诊人数' ]
            },
            grid : {
                left : '3%',
                right : '4%',
                bottom : '3%',
                containLabel : true
            },
            toolbox : {
                feature : {
                    saveAsImage : {}
                }
            },
            xAxis : {
                type : 'category',
                boundaryGap : false,
                axisLabel : {
                    //横坐标上的文字斜着显示 文字颜色 begin 
                    interval : 0,
                    rotate : 45,
                    margin : 10,
                    textStyle : {
                        color : "#ec6869"
                    }
                //横坐标上的文字换行显示 文字颜色end
                },
                data : xd
            },
            yAxis : {
                type : 'value'
            },
            series : [ {
                name : '确诊人数',
                type : 'line',
                stack : '总量',
                data : yd
            } ]
        };

        // 使用刚指定的配置项和数据显示图表。
        myChart.setOption(option);
    });
</script>
</html>

  

 

截图:

 

 

 

posted @ 2020-03-20 14:06  _Aming  阅读(155)  评论(0编辑  收藏  举报