一、利用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本人原创,且仅限于学习交流,请勿用于任何商业用途!