【java 爬虫】通过抓取app数据包来进行实习僧在招职位的爬取与分析

时间:2022-09-18 16:10:37

一、利用fiddler进行数据的抓包

        1.配置fiddler(下载地址:https://www.telerik.com/download/fiddler)

                                                【java 爬虫】通过抓取app数据包来进行实习僧在招职位的爬取与分析

                        【java 爬虫】通过抓取app数据包来进行实习僧在招职位的爬取与分析

        2.手机和电脑处于同一wifi网络,在浏览器中输入:电脑ip:8888(如:192.168.1.112:8888)点击底部链接进行证书安装,用于抓取https数据包

      【java 爬虫】通过抓取app数据包来进行实习僧在招职位的爬取与分析【java 爬虫】通过抓取app数据包来进行实习僧在招职位的爬取与分析【java 爬虫】通过抓取app数据包来进行实习僧在招职位的爬取与分析【java 爬虫】通过抓取app数据包来进行实习僧在招职位的爬取与分析

        3.依次打开fiddler,手机端实习僧app,在实习僧中搜索软件,fiddler中显示相关信息如图:

【java 爬虫】通过抓取app数据包来进行实习僧在招职位的爬取与分析  【java 爬虫】通过抓取app数据包来进行实习僧在招职位的爬取与分析

二、对数据链接返回json进行解析

             1.获取json

             【java 爬虫】通过抓取app数据包来进行实习僧在招职位的爬取与分析

            2.分析json


【java 爬虫】通过抓取app数据包来进行实习僧在招职位的爬取与分析

                3.利用gson2.3.1.jar进行json解析

public static  void analyse (String json1)
{
		try {
            JsonParser parser=new JsonParser();  //创建JSON解析器
            JsonObject object=(JsonObject) parser.parse(json1);  //创建JsonObject对象
            System.out.println("code="+object.get("code").getAsInt()); //将json数据转为为int型的数据
            JsonArray array=object.get("msg").getAsJsonArray();    //得到为json的数组
            for(int i=0;i<array.size();i++){
                System.out.println("---------------");
                JsonObject subObject=array.get(i).getAsJsonObject();
                
                String uuid=subObject.get("uuid").getAsString();
                String name=subObject.get("name").getAsString();//职位名称
                String cname=subObject.get("cname").getAsString();//公司名称
                String city=subObject.get("city").getAsString();
                int minsal=subObject.get("minsal").getAsInt();//岗位最低日薪
                int maxsal=subObject.get("maxsal").getAsInt();//岗位最高日薪
                String refresh=subObject.get("refresh").getAsString();
                
                city=city.replace(",", "");//去除逗号
                city=city.substring(0, 2);//只保留前2个字,方便后续分析
                System.out.println("uuid="+uuid);
                
                String sql="insert into brief values(?,?,?,?,?,?,?)";
                // 预编译
                try {
                	PreparedStatement ps =con.prepareStatement(sql);
					ps.setString(1, uuid);
					ps.setString(2, name);
					ps.setString(3, cname);
					ps.setString(4, city);
					ps.setInt(5, minsal);
					ps.setInt(6, maxsal);
					ps.setString(7, refresh);
					ps.execute();//执行sql语句
				} catch (SQLException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
          
            }
        } catch (JsonIOException e) {
            e.printStackTrace();
        } catch (JsonSyntaxException e) {
            e.printStackTrace();
        }
}

三、将解析结果存至MySql数据库

        1.连接数据库

public static Connection con=null;

con=DAO.getConnection();

        其中DAO类中代码如下:

        

// 链接需要的数据 (这些数据直接写到加密后的数据文件中)
	private static String url = "jdbc:mysql://127.0.0.1:3306/shixiseng?characterEncoding=utf-8";
	private static String user = "root";
	private static String password = "1234";
	private static String driverName = "com.mysql.jdbc.Driver";

	// 声明静态链接对象
	private static Connection connection = null;

	// 编写静态代码块(比构造函数先加载) 用来加载驱动类
	static {
		try {
			Class.forName(driverName);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}// end
		// 获得链接对象

	public static Connection getConnection() {
		// 创建链接对象
		try {
			connection = DriverManager.getConnection(url, user, password);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return connection;
	}

四、对爬取数据进行分析

            1.数据库表建立:

            

/*
Navicat MySQL Data Transfer

Source Server         : link
Source Server Version : 50027
Source Host           : localhost:3306
Source Database       : shixiseng

Target Server Type    : MYSQL
Target Server Version : 50027
File Encoding         : 65001

Date: 2018-06-07 14:47:27
*/

SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for `brief`
-- ----------------------------
DROP TABLE IF EXISTS `brief`;
CREATE TABLE `brief` (
  `uuid` varchar(20) default NULL,
  `name` varchar(100) default NULL,
  `cname` varchar(100) default NULL,
  `city` varchar(20) default NULL,
  `minsal` int(11) default NULL,
  `maxsal` int(11) default NULL,
  `refresh` varchar(20) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of brief
-- ----------------------------

        2.数据查看

        【java 爬虫】通过抓取app数据包来进行实习僧在招职位的爬取与分析

            3.数据的分析:

select avg((minsal+maxsal)/2) as 平均日薪,city from brief where name like '%java%' group by city order by 1 desc ;

【java 爬虫】通过抓取app数据包来进行实习僧在招职位的爬取与分析

下表相似:进行多次爬取查询后统计结果,

【java 爬虫】通过抓取app数据包来进行实习僧在招职位的爬取与分析


代码见:github主页,会进行后续更新


注:数据相关包括爬虫,数据标注、数据分析等职位。

        代码、教程均为ty33123本人原创,且仅限于学习交流,请勿用于任何商业用途!