java爬⾍⾃动登录_java爬⾍(三)利⽤HttpClient和Jsoup模
拟⽹页登陆(。。。
简介:
注意问题:本⽂是基于校园信息门户进⾏的实验,因为⽤户名密码需要的涉密,因此⽂中的代码不加修改肯定不能直接运⾏成功。如果读者⼆次开发过程运⾏代码出现问题欢迎与作者联系。可以直接留⾔,也可以邮箱留⾔1449268538@qq
模拟登录的原理:
总的来说,模拟发送请求,是浏览器发送什么,我们在代码⾥⾯就发送什么,包括请求的url,请求的参数,请求的⽅式,及请求头。既然是登录请求,则满⾜登录请求所需的条件即可。这⾥的重点是确定登录表单的参数,确定发送登录请求时所需的参数,以及这些参数被传到哪⾥去了。
实现过程:
1.使⽤浏览器的审查元素功能(F12)查看需要访问界⾯的⼀些参数.
开启审查元素后正常输⼊⽤户名和密码进⾏登录操作,登录成功的过程会发现审查元素内多了很多元素。
依次点击 network-->login(不到这个也可以点击类似的带login的其他name)-->Headers-->图中的Request URL就是下⽂需要添加的⽹址
上海第二工业大学专科2.实际操作⽅法
packagedebug;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importorg.jsoup.Connection;importorg.jsoup.Con classtest {public static String LOGIN_URL = "authserver.tjut.edu/authserver/login";//上⽂提到的Request URLpublic static String USER_AGENT = "User-Agent";public static String USER_AGENT_VALUE = "Mozilla/5.0 (Windows NT 6.1;
WOW64; rv:52.0) Gecko/20100101 Firefox/52.0";public static void main(String[] args) throwsException {
simulateLogin("203128***", "你⾃⼰的密码"); //第⼆处需要修改的位置:模拟登陆github的⽤户名和密码
}/***@paramuserName ⽤户名
*@parampwd 密码
*@throwsException*/
public static void simulateLogin(String userName, String pwd) throwsException {/** 第⼀次请求
* grab login form page first
* 获取登陆提交的表单信息,及修改其提交data数据(login,password)*/
//get the response, which we will post to the action kies())
Connection con = t(LOGIN_URL); //获取connection
con.header(USER_AGENT, USER_AGENT_VALUE); //配置模拟浏览器
Response rs = ute(); //获取响应
Document d1 = Jsoup.parse(rs.body()); //通过Jsoup将返回信息转换为Dom树
akb48橘梨纱List eleList = d1.select("#casLoginForm"); //第三处需要修改的地⽅:获取提交form表单,可以通过查看页⾯源码代码得知//获取cooking和表单属性//lets make data map containing all the parameters and its values found in the form
歌颂祖国的歌Map datas = new HashMap<>();for (Element e : (0).getAllElements()) {//第四处需要修改的
内容:注意问题2:设置⽤户
名 注意equals(这个username和password也是要去⾃⼰的登录界⾯input⾥name值)深圳东部华侨城好玩吗
if (e.attr("name").equals("username")) {
e.attr("value", userName);
}//设置⽤户密码
if (e.attr("name").equals("password")) {
e.attr("value", pwd);
}//排除空值表单属性
if (e.attr("name").length() > 0) {
datas.put(e.attr("name"), e.attr("value"));
}
}/** 第⼆次请求,以post⽅式提交表单数据以及cookie信息*/Connection con2=
con2.header(USER_AGENT, USER_AGENT_VALUE);//设置cookie和post上⾯的map数据
Response login = con2.ignoreContentType(true).followRedirects(true).method(Method.POST)
.data(datas).kies()).execute();//报错Exception in thread "main" org.jsoup.HttpStatusException: HTTP error fetching URL. Status=500,//报错原因:见上边注意问题2//打印,登陆成功后的信息
System.out.println(login.body());//登陆成功后的cookie信息,可以保存到本地,以后登陆时,只需⼀次登陆即可
Map map =kies();for(String s : map.keySet()) {
System.out.println(s+ " : " +(s));
}
}
关于老师的手抄报}
北京旅行社3.基于本代码⼆次开发时注意需要修改的内容(看代码中的注释)
后期开发
在模拟登陆后,使⽤保存的cookies去精准抓取需要登陆才能访问的页⾯中需要的信息。(参照下⼀篇⽂章) java爬⾍(四)利⽤Jsoup获取需要登陆的⽹站中的内容(⽆验证码的登录)
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论