java爬虫模拟登陆的实例详解
使用jsoup工具可以解析某个URL地址、HTML文本内容,是java爬虫很好的优势,也是我们在网络爬虫不可缺少的工具。本文小编带领大家使用jsoup实现java爬虫模拟登陆,通过省力的API,很好的实现java爬虫模拟登陆。
一、使用工具:Jsoup
jsoup是一款Java的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
二、实现java爬虫模拟登陆
1、确定想要爬取的url
importjava.io.BufferedWriter; importjava.io.FileOutputStream; importjava.io.IOException; importjava.io.OutputStreamWriter; importjava.util.Map.Entry; importjava.util.Set; importorg.jsoup.Connection; importorg.jsoup.Jsoup; importorg.jsoup.nodes.Document; importorg.jsoup.nodes.Element; publicclassSplitTable{ publicstaticvoidmain(String[]args)throwsIOException{ //想要爬取的url Stringurl="http://jwcnew.nefu.edu.cn/dblydx_jsxsd/xskb/xskb_list.do? Ves632DSdyV=NEW_XSD_PYGL"; Stringusername=""; Stringpassword=""; StringsessionId=getSessionInfo(username,password); spiderWebSite(sessionId,url); }
2、获取sessionId
privatestaticStringgetSessionInfo(Stringusername,Stringpassword) throwsIOException{
3、登录网站,返回sessionId信息
Connection.Responseres=Jsoup.connect(http://jwcnew.nefu.edu.cn/dblydx_jsxsd/xk/LoginToXk)
4、获得sessionId
StringsessionId=res.cookie("JSESSIONID"); System.out.println(sessionId); returnsessionId; }
5、爬取内容
privatestaticvoidspiderWebSite(StringsessionId,Stringurl)throwsIOException{ //爬取 Documentdoc=Jsoup.connect(url).cookie("JSESSIONID",sessionId).timeout(10000).get(); Elementtable=doc.getElementById("kbtable"); //System.out.println(table); BufferedWriterbw=newBufferedWriter (newOutputStreamWriter(newFileOutputStream("F:/table.html"))); bw.write(newString(table.toString().getBytes())); bw.flush(); bw.close(); } }
实例代码扩展:
importjava.io.IOException; importjava.util.HashMap; importjava.util.List; importjava.util.Map; importorg.jsoup.Connection; importorg.jsoup.Jsoup; importorg.jsoup.Connection.Method; importorg.jsoup.Connection.Response; importorg.jsoup.nodes.Document; importorg.jsoup.nodes.Element; publicclassLoginDemo{ publicstaticvoidmain(String[]args)throwsException{ LoginDemologinDemo=newLoginDemo(); loginDemo.login("16xxx20xxx","16xxx20xxx");//用户名,和密码 } /** *模拟登陆座位系统 *@paramuserName *用户名 *@parampwd *密码 * ***/ publicvoidlogin(StringuserName,Stringpwd)throwsException{ //第一次请求 Connectioncon=Jsoup .connect("http://lib???.?????????.aspx");//获取连接 con.header("User-Agent", "Mozilla/5.0(WindowsNT6.1;WOW64;rv:29.0)Gecko/20100101Firefox/29.0");//配置模拟浏览器 Responsers=con.execute();//获取响应 Documentd1=Jsoup.parse(rs.body());//转换为Dom树 Listet=d1.select("#form1");//获取form表单,可以通过查看页面源码代码得知 //获取,cooking和表单属性,下面map存放post时的数据 Map datas=newHashMap<>(); for(Elemente:et.get(0).getAllElements()){ //System.out.println(e.attr("name")+"----Little\n"); if(e.attr("name").equals("tbUserName")){ e.attr("value",userName);//设置用户名 } if(e.attr("name").equals("tbPassWord")){ e.attr("value",pwd);//设置用户密码 } if(e.attr("name").length()>0){//排除空值表单属性 datas.put(e.attr("name"),e.attr("value")); } } /** *第二次请求,post表单数据,以及cookie信息 * ***/ Connectioncon2=Jsoup .connect("http://lib???.?????????.aspx"); con2.header("User-Agent", "Mozilla/5.0(WindowsNT6.1;WOW64;rv:29.0)Gecko/20100101Firefox/29.0"); //设置cookie和post上面的map数据 Responselogin=con2.ignoreContentType(true).method(Method.POST) .data(datas).cookies(rs.cookies()).execute(); //登陆成功后的cookie信息,可以保存到本地,以后登陆时,只需一次登陆即可 Map map=login.cookies(); //下面输出的是cookie的内容 for(Strings:map.keySet()){ System.out.println(s+"=====-----"+map.get(s)); } System.out.println(login.body()); /** *登录之后模拟获取预约记录 * **/ Connectioncon_record=Jsoup .connect("http://lib???.?????????.aspx");//获取连接 con_record.header("User-Agent", "Mozilla/5.0(WindowsNT6.1;WOW64;rv:29.0)Gecko/20100101Firefox/29.0");//配置模拟浏览器 con_record.cookies(datas); Responserecord=con_record.ignoreContentType(true) .method(Method.GET) .cookies(rs.cookies()) .execute(); System.out.println(record.body()); } }
到此这篇关于java爬虫模拟登陆的实例详解的文章就介绍到这了,更多相关java爬虫实战之模拟登陆内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!