zoukankan      html  css  js  c++  java
  • 3月17日移动端疫情展示

     数据库的表跟APP的运行截图;

     

    首先需要将爬取的数据存进MySQL数据库;需要用到python的爬取;下面是代码,跟上一次的大作业一样,爬取技术;

     1 import pymysql
     2 import requests
     3 import json
     4 # 放入要爬的url
     5 url = "https://view.inews.qq.com/g2/getOnsInfo?name=disease_h5"
     6 # 设置header做一个防爬机制
     7 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"}
     8 # 获取response的json
     9 response = requests.get(url, headers=header)
    10 # 取得数据词典
    11 data = json.loads(response.content.decode())
    12 data_str = data['data']
    13 data_json = json.loads(data_str)
    14 # 连接数据库
    15 db = pymysql.connect(host = 'localhost', port=3306, user='root', password='123456', db='python', charset='utf8')
    16 #使用cursor方法生成一个游标
    17 cursor = db.cursor()
    18 confirmed_total = 0
    19 suspected_total = 0
    20 dead_total = 0
    21 healed_total = 0
    22 # 更新时间
    23 lastUpdateTime = data_json['lastUpdateTime']
    24 # 取出各个国家的数据
    25 for worldData in data_json['areaTree']:
    26     countryName = worldData['name']
    27     confirmed = worldData['total']['confirm']
    28     confirmed_total += confirmed
    29     suspected = worldData['total']['suspect']
    30     suspected_total += suspected
    31     dead = worldData['total']['dead']
    32     dead_total += dead
    33     healed = worldData['total']['heal']
    34     healed_total += healed
    35     sql = "insert into worlddata(id,countryname,confirmed,suspected,dead,healed,lastupdateTime) values({},'{}','{}','{}','{}', '{}','{}')".format(0, countryName, confirmed, suspected, dead, healed, lastUpdateTime)
    36     cursor.execute(sql)
    37 
    38     db.commit()
    39 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)
    40 cursor.execute(sql_total)
    41 db.commit()
    爬取

    然后你需要用到Androidstudio连接mysql数据库

     连接前需要将你eclipse里面的mysql-connector-java这个复制粘贴到lib文件夹下

    然后再file->添加进去;

    然后就是先测试你是否可以连接上数据库;这个你在网上搜一下,就可以找到代码;

    package com.example.anew;
    
    
    import android.annotation.SuppressLint;
    import android.app.Activity;
    import android.os.Bundle;
    import android.os.Handler;
    import android.os.Message;
    import android.view.View;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.RadioButton;
    import android.widget.RadioGroup;
    import android.widget.TextView;
    
    import java.util.List;
    
    public class MainActivity extends Activity {
    
        private EditText et_name;
        private Button btn_get_data;
        private TextView tv_data;
        private RadioGroup rg_check;
        private RadioButton rb_date;
        private RadioButton rb_country;
        private String condition;
    
        @SuppressLint("HandlerLeak")
        private Handler handler = new Handler(){
            @Override
            public void handleMessage(Message msg) {
    
                switch (msg.what){
                    case 0x11:
                        String s = (String) msg.obj;
                        tv_data.setText(s);
                        break;
                    case 0x12:
                        String ss = (String) msg.obj;
                        tv_data.setText(ss);
                        break;
                }
    
            }
        };
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            // 控件的初始化
            btn_get_data = findViewById(R.id.btn_get_data);
            tv_data = findViewById(R.id.tv_data);
            et_name = findViewById(R.id.et_name);
            rb_date = findViewById(R.id.rb_date);
            rb_country = findViewById(R.id.rb_country);
            rg_check = findViewById(R.id.rg_select);
    
    
            rg_check.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
    
                public void onCheckedChanged(RadioGroup group, int checkedId) {
                    //如果‘时间’这个单选按钮被选中了
                    if(rb_date.getId()==checkedId){
                        //弹出吐司通知
                        //Toast.makeText(MainActivity.this, rb_date.getText().toString(), Toast.LENGTH_LONG).show();
                        //获取选中按钮对应的文本信息
                        condition = rb_date.getText().toString().trim();
                    }else if(rb_country.getId()==checkedId){
                        //Toast.makeText(MainActivity.this, rb_country.getText().toString(), Toast.LENGTH_LONG).show();
                        condition = rb_country.getText().toString().trim();
                    }
                }
            });
            //如果没有选择默认按时间查询
            if (condition == null){
                condition = rb_date.getText().toString().trim();
            }
            setListener();
        }
    
        /**
         * 设置监听
         */
        private void setListener() {
    
            // 按钮点击事件
            btn_get_data.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
    
                    // 创建一个线程来连接数据库并获取数据库中对应表的数据
                    new Thread(new Runnable() {
                        @Override
                        public void run() {
                            String name = et_name.getText().toString().trim();
                            //调用数据库帮助类中的方法取数据
                            List<information> list = DBUtils.search(condition,name);
                            Message message = handler.obtainMessage();
                            if (list != null) {
                                String s = "";
                                for (int i = 0; i < list.size(); i++) {
                                    s += "国家:" + list.get(i).getCountryname() + "
    ";
                                    s += "最新更新时间:" + list.get(i).getLastUpdateTime() + "
    ";
                                    s += "确诊人数为:  " + list.get(i).getConfirmed() + "
    ";
                                    s += "治愈人数为:  " + list.get(i).getHealed() + "
    ";
                                    s += "死亡人数为:  " + list.get(i).getDead() + "
    " + "
    ";
                                }
                                //0x11、0x12消息的定位标志
                                message.what = 0x12;
                                message.obj = s;
                            } else {
                                message.what = 0x11;
                                message.obj = "查询结果为空";
                            }
                            handler.sendMessage(message);
    
                            // 发消息通知主线程更新UI
                        }
                    }).start();
                }
            });
    
        }
    
    }
     1 package com.example.anew;
     2 
     3 
     4 import java.sql.Connection;
     5 import java.sql.DriverManager;
     6 import java.sql.PreparedStatement;
     7 import java.sql.ResultSet;
     8 import java.sql.SQLException;
     9 import java.util.ArrayList;
    10 import java.util.List;
    11 
    12 /**
    13  * 数据库工具类:连接数据库用、获取数据库数据用
    14  * 相关操作数据库的方法均可写在该类
    15  */
    16 public class DBUtils {
    17 
    18     private static String driver = "com.mysql.jdbc.Driver";// MySql驱动
    19 
    20     private static String user = "root";// 用户名
    21 
    22     private static String password = "123456";// 密码
    23 
    24     private static Connection getConn(String dbName) {
    25 
    26         Connection connection = null;
    27         try {
    28             Class.forName(driver);// 动态加载类
    29             String ip = "192.168.43.209";// 写成本机地址,不能写成localhost,同时手机和电脑连接的网络必须是同一个
    30 
    31             // 尝试建立到给定数据库URL的连接
    32             connection = DriverManager.getConnection("jdbc:mysql://" + ip + ":3306/" + dbName + "?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC" ,
    33                     user, password);
    34 
    35         } catch (Exception e) {
    36             e.printStackTrace();
    37         }
    38 
    39         return connection;
    40     }
    41 
    42     public static List<information>  search(String condition, String country_name){
    43         List<information> list = new ArrayList<>();
    44         Connection connection = getConn("python");
    45         String sql = "";
    46         //System.out.println(condition);
    47         //选择条件
    48         if(condition.equals("国家")){
    49             //模糊查询
    50             sql = "select * from worlddata where countryname like ?";
    51         }
    52         if(condition.equals("时间")){
    53             sql = "select * from worlddata where lastUpdateTime like ?";
    54         }
    55 
    56         System.out.println(country_name);
    57         if(connection !=null){
    58             try {
    59                 PreparedStatement ps = connection.prepareStatement(sql);
    60                 if(ps!=null){
    61                     ps.setString(1,"%"+country_name+"%");
    62                     ResultSet rs = ps.executeQuery();
    63                     if(rs!=null){
    64                         while(rs.next()){
    65                             information worldData = new information();
    66                             worldData.setId(rs.getInt("id"));
    67                             worldData.setCountryname(rs.getString("countryname"));
    68                             worldData.setConfirmed(rs.getString("confirmed"));
    69                             worldData.setSuspected(rs.getString("suspected"));
    70                             worldData.setDead(rs.getString("dead"));
    71                             worldData.setHealed(rs.getString("healed"));
    72                             worldData.setLastUpdateTime(rs.getString("lastUpdateTime"));
    73                             list.add(worldData);
    74                         }
    75                         connection.close();
    76                         ps.close();
    77                         return list;
    78                     }else{
    79                         return null;
    80                     }
    81                 }else{
    82                     return null;
    83                 }
    84             } catch (SQLException e) {
    85                 e.printStackTrace();
    86                 return null;
    87             }
    88         }else{
    89             return null;
    90         }
    91 
    92 
    93     }
    94 
    95 }
    DBUtils
    package com.example.anew;
    
    
    public class information {
        private int id;
        private String countryname;
        private String confirmed;
        private String suspected;
        private String dead;
        private String healed;
        private String lastUpdateTime;
    
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getCountryname() {
            return countryname;
        }
    
        public void setCountryname(String countryname) {
            this.countryname = countryname;
        }
    
        public String getConfirmed() {
            return confirmed;
        }
    
        public void setConfirmed(String confirmed) {
            this.confirmed = confirmed;
        }
    
        public String getSuspected() {
            return suspected;
        }
    
        public void setSuspected(String suspected) {
            this.suspected = suspected;
        }
    
        public String getDead() {
            return dead;
        }
    
        public void setDead(String dead) {
            this.dead = dead;
        }
    
        public String getHealed() {
            return healed;
        }
    
        public void setHealed(String healed) {
            this.healed = healed;
        }
    
        public String getLastUpdateTime() {
            return lastUpdateTime;
        }
    
        public void setLastUpdateTime(String lastUpdateTime) {
            this.lastUpdateTime = lastUpdateTime;
        }
    }
    information
    <?xml version="1.0" encoding="utf-8"?>
    <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".MainActivity"
        android:padding="15dp">
    
        <RelativeLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
            <RadioGroup
                android:id="@+id/rg_select"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                android:paddingLeft="20dp"
                android:layout_marginTop="20dp">
    
                <RadioButton
                    android:id="@+id/rb_date"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="时间"
                    android:textSize="20sp"
                    android:checked="true"/>
    
                <RadioButton
                    android:id="@+id/rb_country"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="国家"
                    android:textSize="20sp"/>
    
            </RadioGroup>
            <EditText
                android:id="@+id/et_name"
                android:padding="10dp"
                android:textSize="16sp"
                android:gravity="center"
                android:hint="输入要查询的内容"
                android:layout_below="@id/rg_select"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
    
            <Button
                android:id="@+id/btn_get_data"
                android:layout_margin="15dp"
                android:textSize="16sp"
                android:text="查询"
                android:layout_below="@id/et_name"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
    
            <TextView
                android:id="@+id/tv_data"
                android:padding="10dp"
                android:textSize="16sp"
                android:gravity="center"
                android:text="内容"
                android:layout_below="@+id/btn_get_data"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
        </RelativeLayout>
    
    </ScrollView>
    mainactivity.xml
  • 相关阅读:
    sqlite学习笔记9:C语言中使用sqlite之插入数据
    基于对话框的应用程序,点击button打开一个网页
    数组溢界地址的正确使用: 即 int a[6] 中的 a[-1] 和 a[6] 正确使用
    BeagleBone硬件概览Ethernet端口板载LEDc重置按钮等介绍
    ARP缓存记录种类动态条目和静态条目
    ArduinoYun的电源插座
    Xamarin开发Anroid应用介绍
    学习NGUI前的准备NGUI的相关信息
    Xamarin Android开发实战(上册)大学霸内部资料
    NGUI全面实践教程(大学霸内部资料)
  • 原文地址:https://www.cnblogs.com/1234yyf/p/12547094.html
Copyright © 2011-2022 走看看