一、利用fiddler进行数据的抓包
1.配置fiddler(下载地址:https://www.telerik.com/download/fiddler)
2.手机和电脑处于同一wifi网络,在浏览器中输入:电脑ip:8888(如:192.168.1.112:8888)点击底部链接进行证书安装,用于抓取https数据包
3.依次打开fiddler,手机端实习僧app,在实习僧中搜索软件,fiddler中显示相关信息如图:
二、对数据链接返回json进行解析
1.获取json
2.分析json
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.数据查看
3.数据的分析:
select avg((minsal+maxsal)/2) as 平均日薪,city from brief where name like '%java%' group by city order by 1 desc ;
下表相似:进行多次爬取查询后统计结果,
代码见:github主页,会进行后续更新
注:数据相关包括爬虫,数据标注、数据分析等职位。
代码、教程均为ty33123本人原创,且仅限于学习交流,请勿用于任何商业用途!