有时候我们需要的用户信息是要通过用户登录后得到,这些信息其实也可以通过爬虫获得。
本Demo中用到的2个外部库 org.jsoup,jxl(用于写EXCEL),
同样以中南财经政法大学教务处学生个人信息系统为例:
网址:http://202.114.224.81:7777/zhxt_bks/zhxt_bks.html
接下来就是查看网页源码,即找到传递账号密码的目的地址
http://202.114.224.81:7777/pls/wwwbks/bks_login2.login
登陆进去后查看所需调转的网页地址
http://202.114.224.81:7777/pls/wwwbks/xk.CourseView
(我这次是为了得到课表,所以进入的是课表的网页)
接下来就是定位所需的内容
接下来就是Po出源代码
首先是远程登陆的代码:
public static String login(String xh,String pwd) throws IOException
{
Map<String,String> datas=new HashMap<String, String>();
//对应学号和密码stuid pwd
datas.put("stuid", xh);
datas.put("pwd", pwd);
//将值传入服务器,这个网址我在前面的图中用箭头指出了
Connection connection=Jsoup.connect("http://202.114.224.81:7777/pls/wwwbks/bks_login2.login").data(datas);
//得到Cookie才能进行页面跳转
connection.get();
//每次cookie不同
String accountCookie=connection.response().cookie("ACCOUNT");
connection2=Jsoup.connect("http://202.114.224.81:7777/pls/wwwbks/bkscjcx.curscopre")
return accountCookie;
}
接下来是主函数:
public static void main(String args[]) throws IOException, BiffException, WriteException
{
int m=0;
//我在这里就不暴露自己的账号密码,总之xh写自己的账号
//pwd 写密码
String xh="";
String pwd="";
WritableWorkbook book = Workbook.createWorkbook(new File("E:/学生信息表.xls")); //打开文件
WritableSheet sheet = book.createSheet("第一页", 0); //生成名为“第一页”的工作表,参数0表示第一
//跳转的网页地址
String searchKBUrl="http://202.114.224.81:7777/pls/wwwbks/xk.CourseView";
//获得Cookie
String accountCookie=login(xh, pwd);
//传入Cookie值进行页面的跳转
Connection connection=Jsoup.connect(searchKBUrl).cookie("ACCOUNT", accountCookie);
//建立连接
Document logindoc=connection.get();
String[] str={"星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
String[] str1={"第一节","第二节","第三节","第四节","第五节"};
for(int i=0;i<5;i++)
sheet.addCell(new Label(0,i+1,str1[i]));
for(int j=0;j<7;j++)
sheet.addCell(new Label(j+1,0,str[j]));
for(int i=0;i<5;i++)
{
for (int j=0;j<7;j++)
{
String courseContent=logindoc.getElementsByClass("td_biaogexian").get(m).getElementsByTag("p").text();
StringBuffer sBuffer=new StringBuffer();
char[] name=courseContent.toCharArray();
for(int k=0;k<name.length;k++)
{
if(!(name[k]==160))
sBuffer.append(name[k]);
}
sheet.addCell(new Label(j+1,i+1,sBuffer.toString()));
m++;
}
}
book.write();
book.close();
}
Po出结果图:
有人可能会说为什么我自己进行登录的时候是需要验证码的。但是我在这里并没有进行验证码的输入,因为学校比较low.做的是前端验证码。如果远程登录直接挂服务器的话就可以绕过前端,楼主曾试过暴力破解别人的学生信息密码,就是不停地循环迭代,(密码只有6位),8G内存的笔记本,2个半小时就得到了密码。