有時候我們需要的用戶信息是要通過用戶登錄後得到,這些信息其實也可以通過爬蟲獲得。
本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個半小時就得到了密碼。