学校公众号要用爬虫查询校园网流量,记录一下实现这个简易爬虫的过程。
开发工具:
Eclipse,Chrome/Firefox
第三方库”:
jsoup:用来解析网页数据,用法传送门:http://www.open-open.com/jsoup/,HttpClient用来连接web页面,模拟get和post请求
Step 1:明确目标
简单的理解爬虫的过程就是模拟网页操作的过程,GET网页数据,POST数据请求的模拟。
So,第一部先明确查询校园网流量的步骤:
1:确认目标网页:http://zyzfw.xidian.edu.cn/ 我们查询校园网流量用户登录界面
2:输入 学号,密码,验证码,作为post的数据,然后点击登录
3:登录后转向页面地址:http://zyzfw.xidian.edu.cn/home/base/index 流量信息查询页面
4:记录所查看到的流量信息
Step 2:java编程
java文件列表
HttpClientManager.java: 获取一个HttpClient的单例,通过这个单例来连接网站
HttpOperate.java: HttpClient相关网络请求的函数
1,获取网页cookies信息与验证码的GET方法;
2,账户登录POST请求方法;
3,获取登录后网页中流量信息的get方法。
DocHandle.java : 对通过jsoup库获得到的网页的html源码的document类进行分析处理获取网页内容并保存
1,获取网页错误信息方法,
2,获取流量信息方法,
3,获取令牌token方法,
4,验证码获取分析方法
ImageOP.java 根据url和cookies下载验证码图片
NetConstans.java 网址等常量
PictureOperate.java 对下载来的验证码图片进行操作
1,读取图片方法(返回int[][]二维数组);
2,裁剪图片方法(使得验证码图片的4个数字变成4张图片可以单独处理);
3,保存图片方法
4,简单的识别图片数字方法
UserInfo.java 用户信息的保存
1,用户基本信息
2,cookies信息
3,图片路径信息
4,令牌信息
5,流量信息
6,错误信息
MainRunning.java 主程序
MainRunning.java
public class MainRunning {
public static void main(String[] args) {
// TODO Auto-generated method stub
HttpClientManager.init();
UserInfo user = new UserInfo("0000000001","000000001");
if(user.getUserName().equals(""))
{
System.out.println("输入用户名");
}
//login
boolean loginOk=false;
int cc=0;
do{
cc++;
if(cc>5)
{
System.out.println("login error!tyr late.");
break;
}
if(HttpOperate.getLoginInfo(user)){
loginOk=HttpOperate.loginFlowQuery(user);
if(!loginOk&&!user.codeError.equals("")){
System.out.println(user.userError);
break;
}
}
else{
System.out.println("getLoginInfo error!!");
break;
}
}while(!loginOk);
if(loginOk&&HttpOperate.getFlowInfo(user)){
user.printFlowInfo();
}
else{
System.out.println("get FlowInfo error!");
}
}
}</span>
从Main方法中可以发现,逻辑十分的简单:
1,初始化: