-
2021-02-27 08:27:09
使用jsoup工具可以解析某个URL地址、HTML文本内容,是java爬虫很好的优势,也是我们在网络爬虫不可缺少的工具。本文小编带领大家使用jsoup 实现java爬虫模拟登陆,通过省力的API,很好的实现java爬虫模拟登陆。
一、使用工具:Jsoup
jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
二、实现java爬虫模拟登陆
1、确定想要爬取的url
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Map.Entry;
import java.util.Set;
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
public class SplitTable {
public static void main(String[] args) throws IOException {
//想要爬取的url
String url = "http://jwcnew.nefu.edu.cn/dblydx_jsxsd/xskb/xskb_list.do?
Ves632DSdyV=NEW_XSD_PYGL";
String username = "";
String password = "";
String sessionId = getSessionInfo(username,password);
spiderWebSite(sessionId,url);
}
2、获取sessionId
private static String getSessionInfo(String username,String password)
throws IOException{
3、登录网站,返回sessionId信息
4、获得sessionId
String sessionId = res.cookie("JSESSIONID");
System.out.println(sessionId);
return sessionId;
}
5、爬取内容
private static void spiderWebSite(String sessionId,String url) throws IOException{
//爬取
Document doc = Jsoup.connect(url).cookie("JSESSIONID", sessionId).timeout(10000).get();
Element table = doc.getElementById("kbtable");
//System.out.println(table);
BufferedWriter bw = new BufferedWriter
(new OutputStreamWriter(new FileOutputStream("F:/table.html")));
bw.write(new String(table.toString().getBytes()));
bw.flush();
bw.close();
}
}
实例代码扩展:
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.Connection.Method;
import org.jsoup.Connection.Response;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
public class LoginDemo {
public static void main(String[] args) throws Exception {
LoginDemo loginDemo = new LoginDemo();
loginDemo.login("16xxx20xxx", "16xxx20xxx");// 用户名,和密码
}
/**
* 模拟登陆座位系统
* @param userName
* 用户名
* @param pwd
* 密码
*
* **/
public void login(String userName, String pwd) throws Exception {
// 第一次请求
Connection con = Jsoup
.connect("http://lib???.?????????.aspx");// 获取连接
con.header("User-Agent",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0");// 配置模拟浏览器
Response rs = con.execute();// 获取响应
Document d1 = Jsoup.parse(rs.body());// 转换为Dom树
List et = d1.select("#form1");// 获取form表单,可以通过查看页面源码代码得知
// 获取,cooking和表单属性,下面map存放post时的数据
Map datas = new HashMap<>();
for (Element e : 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信息
*
* **/
Connection con2 = Jsoup
.connect("http://lib???.?????????.aspx");
con2.header("User-Agent",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0");
// 设置cookie和post上面的map数据
Response login = con2.ignoreContentType(true).method(Method.POST)
.data(datas).cookies(rs.cookies()).execute();
// 登陆成功后的cookie信息,可以保存到本地,以后登陆时,只需一次登陆即可
Map map = login.cookies();
//下面输出的是cookie 的内容
for (String s : map.keySet()) {
System.out.println(s + "=====-----" + map.get(s));
}
System.out.println(login.body());
/**
* 登录之后模拟获取预约记录
*
* */
Connection con_record = Jsoup
.connect("http://lib???.?????????.aspx");// 获取连接
con_record.header("User-Agent",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0");// 配置模拟浏览器
con_record.cookies(datas);
Response record = con_record.ignoreContentType(true)
.method(Method.GET)
.cookies(rs.cookies())
.execute();
System.out.println(record.body());
}
}
到此这篇关于java爬虫模拟登陆的实例详解的文章就介绍到这了,更多相关java爬虫实战之模拟登陆内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
更多相关内容 -
java爬虫模拟登陆源码
2018-02-01 11:40:23java爬虫模拟登陆源码:直接导入eclipse,用于爬虫初期网站抓取数据的模拟登陆,即下即用。 -
java爬虫实战之模拟登陆
2021-02-27 08:27:46本文小编带领大家使用jsoup 实现java爬虫模拟登陆,通过省力的API,很好的实现java爬虫模拟登陆。一、使用工具:Jsoupjsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的...原标题:java爬虫实战之模拟登陆
使用jsoup工具可以解析某个URL地址、HTML文本内容,是java爬虫很好的优势,也是我们在网络爬虫不可缺少的工具。本文小编带领大家使用jsoup 实现java爬虫模拟登陆,通过省力的API,很好的实现java爬虫模拟登陆。
一、使用工具:Jsoup
jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。
二、实现java爬虫模拟登陆
1、确定想要爬取的url
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.util.Map.Entry;
import java.util.Set;
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
public
class SplitTable {
public
static void main(String[] args) throws IOException {
//想要爬取的url
String url = "http://jwcnew.nefu.edu.cn/dblydx_jsxsd/xskb/xskb_list.do?
Ves632DSdyV=NEW_XSD_PYGL";
String username = "";
String password = "";
String sessionId = getSessionInfo(username,password);
spiderWebSite(sessionId,url);
}
2、获取sessionId
private
static String getSessionInfo(String username,String password)
throws IOException{
3、登录网站,返回sessionId信息
Connection.Response res = Jsoup.connect("http://jwcnew.nefu.edu.cn/dblydx_jsxsd/xk/LoginToXk")
4、获得sessionId
String sessionId = res.cookie("JSESSIONID");
System.out.println(sessionId);
return sessionId;
}
5、爬取内容
private
static void spiderWebSite(String sessionId,String url) throws IOException{
//爬取
Document doc = Jsoup.connect(url).cookie("JSESSIONID", sessionId).timeout(10000).get();
Element table = doc.getElementById("kbtable");
//System.out.println(table);
BufferedWriter bw =
new BufferedWriter
(
new OutputStreamWriter(
new FileOutputStream("F:/table.html")));
bw.write(
new String(table.toString().getBytes()));
bw.flush();
bw.close();
}
}
以上就是实现java爬虫模拟登陆的工具及具体实现代码,希望能对你有所帮助哦~
原文至:https://www.py.cn/java/jichu/23016.html返回搜狐,查看更多
责任编辑:
-
java爬虫 模拟登陆 验证码
2017-10-13 08:36:34我需要破解一个验证码, 点击后事件验证后由两张乱码的图片合成。请问该如何破解。 -
java网络爬虫模拟登入抓取数据
2017-12-30 14:09:19很多网站,我们是无法直接获得服务器返回的数据,需要输入用户名及密码才能看到数据。如我们登陆人人网时,网站网址http://www.renren.com/。所以我们需要模拟登入后获取数据 -
Java爬虫模拟登录——不给我毛概二的H某大学
2021-03-06 19:20:42使用Java进行模拟登录 可能在这之前,你会很好奇验证码怎么拿到 的确,验证码与时间有关 至于怎么拿 你可以在模拟登录之前先用最简单的爬虫知识去request登录页 下面详细来讲模拟登录的流程。 1.如何拿到jsessionid ...你的账号访问太频繁,请一分钟之后再试!
从大一开始
就用脚本在刷课
在专业课踢的只剩下一门C#的情况下
活活刷到一周的课
大二开始教务系统多了一个非常**的操作
退课池 and 访问频繁缓冲
难道,我大三下还要去学政治课咩?
虽然学政治不如敲代码
但我想毕业啊
emmmmmm
在量子力学的角度,没有抢上毛概的我只是我本体的一个属性,和我本身没有多大关系,我还是快乐敲代码吧。
0.教务系统后台登录流程
先来看一下后台账号密码在发送给服务器之前做了什么处理
这是文中的JS代码
1 j$(document).ready(function(evt){2 //初始化验证码
3 refreshImg();4 //判断操作系统是32位或64位,设置兼容性文件的下载
5 var cpu =getCPU();6 if (cpu != "x64"){7 j$("#setjw").attr("href","../custom/lodop/setjw32.zip");8 } else{9 j$("#setjw").attr("href","../custom/lodop/setjw.zip");10 }11 //Enter键转TAB
12 kutil.enter2tab("LoginForm");13 //定位焦点
14 j$("#yhmc").focus();15 })16
17 functiondoLogon() {18
19 //输入信息验证
20 if (!validate()) {21 return false;22 }23
24 //验证码正确性验证
25 var username = j$("#yhmc").val();26 var password = j$("#yhmm").val();27 var randnumber = j$("#randnumber").val();28 var passwordPolicy =kutil.isPasswordPolicy(username, password);29 var url = _webRootPath + "cas/logon.action";30 password = hex_md5(hex_md5(password)+hex_md5(randnumber.toLowerCase()));31 /**32 var params = {33 "yhmc" : username,34 "yhmm" : password,35 "randnumber": randnumber,36 "isPasswordPolicy" : passwordPolicy37 };38 */
39 var p_username = "_u"+randnumber;40 var p_password = "_p"+randnumber;41 username = base64encode(username+";;"+_sessionid);42 var params = p_username+"="+username+"&"+p_password+"="+password+"&randnumber="+randnumber+"&isPasswordPolicy="+passwordPolicy ;43 //alert("params="+params);
44 //params = getEncParams(params);
45 //alert("encparams="+params);
46 doPreLogon();47 kutil.doAjax(url, params, doPostLogon);48
49 functiondoPreLogon(){50 j$("#msg").html("正在登录......");51 j$("#login").attr("disabled", true);52 j$("#reset").attr("disabled", true);53 }54
55 functiondoPostLogon(response) {56 var data =JSON.parse(response);57 var status =data.status ;58 var message =data.message ;59 if ("200" ==status) {60 var result =data.result ;61 window.document.location.href =result ;62 } else{63 reloadScript("kingo_encypt",_webRootPath+"custom/js/SetKingoEncypt.jsp");64 if("407" ==status){65 alert(message);66 showMessage("");67 }else{68 showMessage(message);69 }70 j$("#login").attr("disabled", false);71 j$("#reset").attr("disabled", false);72 refreshImg();73 if ("401"==status) {74 j$("#randnumber").val("");75 j$("#randnumber").focus();76 } else{77 j$("#yhmc").val("");78 j$("#yhmm").val("");79 j$("#randnumber").val("");80 j$("#yhmc").focus();81 }82 }83 }84 }85
86 functionvalidate() {87 var username = j$("#yhmc").val();88 var password = j$("#yhmm").val();89 var randnumber = j$("#randnumber").val();90 if(kutil.isNull(username)) {91 showMessage("请输入用户名!");92 j$("#yhmc").focus();93 return false;94 }95 if(kutil.isNull(password)) {96 showMessage("请输入密码!");97 j$("#yhmm").focus();98 return false;99 }100 if(kutil.isNull(randnumber)) {101 showMessage("请输入验证码!");102 j$("#randnumber").focus();103 return false;104 }105 return true;106 }107
108 //重置密码为账号(找回密码)
109 functiondoReset() {110 var tourl = _webRootPath + "frame/retrievePassword.jsp";111 window.document.location.href =tourl ;112 }113
114 /**115 * 刷新验证码116 */
117 functionrefreshImg(){118 var url = _webRootPath + "cas/genValidateCode?dateTime="+(newDate());119 document.getElementById("randpic").src =url ;120 }121
122 functionshowMessage(message){123 $("msg").innerHTML =message;124 setTimeout("$('msg').innerHTML='';",15000);125 }126
127 functiongologin(e , obj){128 var e = window.event?window.event:e;129 var x=e.keyCode;130 if(x!=13) return false;131 if(x<48||x>57) e.returnValue=false;132 obj.select();133 $("login").onclick();134 }135
136 functiongetCPU()137 {138 var agent=navigator.userAgent.toLowerCase();139 if(agent.indexOf("win64")>=0 || agent.indexOf("wow64")>=0) return "x64";140 returnnavigator.cpuClass;141 }142
View Code
来分析一下每一步
1 //验证码正确性验证
2 var username = j$("#yhmc").val();3 var password = j$("#yhmm").val();4 var randnumber = j$("#randnumber").val();5 var passwordPolicy =kutil.isPasswordPolicy(username, password);6 var url = _webRootPath + "cas/logon.action";7 password = hex_md5(hex_md5(password)+hex_md5(randnumber.toLowerCase()));
这里拿到username,password,randnumber之后是通过kutil.isPasswordPolicy(username,password)来检验规范
passwordPolicy也是表单参数,一般情况为 1即可。
var url = _webRootPath + "cas/logon.action";
url是表单提交处。
password = hex_md5(hex_md5(password)+hex_md5(randnumber.toLowerCase()));
可见密码在输入后会经过一次md5加密,然后将验证码进行一次md加密,拼接到一起之后再进行一次md5加密。
再来看下一部分。
1 var p_username = "_u"+randnumber;2 var p_password = "_p"+randnumber;3 username = base64encode(username+";;"+_sessionid);4 var params = p_username+"="+username+"&"+p_password+"="+password+"&randnumber="+randnumber+"&isPasswordPolicy="+passwordPolicy ;
可以发现输入的学号(用户名)在加入表单之前会把username和sessionid字段用base64进行加密
sessionid从cookie中拿到
那么整个params结构就很清楚了。
注意在表单中键是'_p','_u'和验证码拼接的。
1.点击登录之后的表单分析
这是一份学号验证码输入正确,密码输入错误的栗子
这个是成功登录的例子
整个流程已经很明显了
emmmmm至于登录失败的Response,就是下面这个
2.使用Java进行模拟登录
可能在这之前,你会很好奇验证码怎么拿到
的确,验证码与时间有关
至于怎么拿
你可以在模拟登录之前先用最简单的爬虫知识去request登录页
下面详细来讲模拟登录的流程。
1.如何拿到jsessionid
2.表单的设置
这些就是模拟登录的核心代码了
去年写的代码
注释也是...话说...
-
java爬虫模拟登陆失败, 求大神帮忙看看
2017-09-15 01:13:51* 纷简历模拟登陆 */ public static void fenResumePost() { // 创建客户端 CloseableHttpClient closeableHttpClient = HttpClients.createDefault(); // 预访问的网址 String login_src = ... -
JAVA使用HtmlUnit爬虫工具模拟登陆CSDN案例
2020-08-26 15:45:42今天小编就为大家分享一篇关于JAVA使用HtmlUnit爬虫工具模拟登陆CSDN案例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧 -
java 爬虫模拟登陆CSDN详解(模拟表单登陆)
2018-09-08 18:30:19借鉴了许多网上的东西...我们要模拟CSDN用户表单登录,来获取用户登录后的数据。 在一些网站和论坛,部分内容总是需要会员用户等需要一定权限的用户才能看得到。 好了由此可见模拟用户表单登录的重要性了。 ...借鉴了许多网上的东西终于搞懂了,其实理念很简单,就是用代码向表单中提交数据,这时候需要分析需要提交什么,账户?密码?就没了嘛,不,当然不,还需要一下其他的东西,这些东西,因不同的网站而不同,
第一步:分析页面结构
我们要模拟CSDN用户表单登录,来获取用户登录后的数据。
在一些网站和论坛,部分内容总是需要会员用户等需要一定权限的用户才能看得到。
好了由此可见模拟用户表单登录的重要性了。进入登录页,在页面上按F12查看页面元素的内容。
这次我们只要form标签,和其内部的账号密码输入框信息。
第二步:讲解一下Post需要的操作具体流程
一般表单的id都是唯一的,所以要过滤出表单是很容易的一件事情
这里表单的id值是fm1List<Element> et = d1.select("#fm1");// 获取form表单
下一步是获得表单下面的帐号和密码输入框控件,同样可以根据id来过滤,不过这里使用的是name属性。
一般网站设计都会把name属性配上value,po -
Java SpringBoot 爬虫(二)用户模拟登陆
2018-05-15 19:54:51爬虫很多数据需要登录,登录成功后才能获取一些数据,这里记录一下模拟登录江西移动查询自己手机话费。 首先需要抓包获取首页网址:http://service.jx.10086.cn/service/resources/indexNew.html 抓取登录页面网址... -
爬虫模拟登陆、爬虫模拟登陆
2018-09-05 11:20:24爬虫模拟登陆,爬虫模拟登陆, -
Java 爬虫实战之模拟登陆
2019-07-08 20:47:34Java 爬虫实战之模拟登陆 import java.io.IOException; import java.util.HashMap; import java.util.List; import java.util.Map; import org.jsoup.Connection; import org.jsoup.Jsoup; import org.jsoup.... -
JAVA爬虫实现自动登录淘宝
2020-08-27 18:37:05给大家分享一个关于JAVA爬虫的相关知识点,通过代码实现自动登录淘宝网,有兴趣的朋友测试下。 -
Java爬虫系列之四模拟登录【模拟登录人人网】
2017-08-29 11:35:28通过前面的学习,我们已经可以对不需要登录的网页正常访问,但现在的网页大部分都需要用户注册,因此这里以学人人网为例,学习一下网站的模拟登录。 首先对http://www.renren.com/进行爬取,对得到的内容进行分析... -
java爬虫htmlunit模拟浏览器登录
2021-03-01 09:34:29介绍刚学到了一种超实用的java爬虫技术htmlunit,先记录一下。htmlunit其实就是一个没有界面的浏览器,操作很简单,就像自己在使用浏览器。本文介绍其简单的几个操作,仅初学了解htmlunit。第一是模拟登录网站,第二... -
java模拟cookie登陆操作
2020-09-01 23:02:12主要为大家详细介绍了java模拟cookie登陆操作,模拟登陆,取得cookie以记录身份,下次请求时发送cookie以表明身份,感兴趣的小伙伴们可以参考一下 -
java模拟登陆获取cookie
2020-09-30 11:15:09爬虫记录(3)——模拟登录获取cookie,访问私信页面 在此基础上略作修改实现了功能,期间碰到了一些问题简要说一下: 1.在浏览器控制台里找不到登陆时的requestURL 因为学习通登陆经过多次跳转,请求页面快速刷没,... -
Java 爬虫模拟知乎登陆
2017-06-21 16:31:03Java 爬虫模拟知乎登陆 一、知乎登陆页面分析 1、我用的是Chrome浏览器 按F12打开开发者工具 选到NetWork 然后登陆一次观察在登陆过程中所用的URL及post了哪些参数 上传的参数如下: 2、模拟登陆知乎分为以下几步... -
java模拟登陆爬虫
2021-02-12 14:18:021、添加依赖org.jsoupjsoup1.9.22、示例代码...import org.jsoup.Connection;import org.jsoup.Jsoup;import org.jsoup.nodes.Document;import java.io.IOException;import java.util.HashMap;import java.util.M... -
模拟登陆爬虫+验证码爬虫
2021-03-06 23:52:02最近就专门研究这个爬虫问题:1.简单单页网页的爬取2.翻页网页的爬取(商品,新闻类啊)3.需要登陆网页的爬取4.需要登陆加验证的网页爬取5.scrapy 的框架问题6.beautifulSoup、requests7.cookeis、表单数据的查看以上... -
java爬虫 Java+Elasticsearch+Kibana
2016-12-28 17:43:04这个是从sf上面看到的,一款爬了知乎几十万用户的数据的爬虫,刚下载下来,本人还没怎么研究透..先共享下..希望一起来研究研究...共同进步 -
java模拟爬虫登录业务系统带传统验证码
2021-10-19 14:52:472、使用jsoup模拟浏览器登录请求。 package com.test.tess; import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.core.SerializableString; import com.jst.tess.constants.Constants; import... -
java-爬虫部分:关于京东模拟登陆的两种实现 | 学步园
2021-03-01 08:06:42最近要做一个爬虫,需要网站数据,先拿京东开刀。因为我是java开发的,所以最开始的时候,想到了httpClient和htmlunit两个东东,于是开始做实验。注意:京东会根据你的IP,多次登陆后,设置验证码,我目前正在解决... -
运用爬虫模拟登陆
2018-09-05 09:48:06运用爬虫模拟登陆, -
爬虫模拟登陆 SegmentFault
2021-03-17 13:56:02大致意思是模拟登陆 segmentfault.com,一时手痒,本文将带领大家一起实现这个操作。解析这个问题问的非常好,但可惜的是大家的回复都是纸上谈兵未经探讨,最前最高票的回答的竟然说让下抓包工具,简直可笑啊,... -
java编写模拟登陆爬虫
2017-09-11 19:42:44—-首先为什么能用程序去登陆网站?因为当我们访问网站后,服务端会生成一个sessionId,保存在客户端的cookie中,如何这个sessionId是正确登陆是返回的id,那么当我们访问需要登录才能访问的网页时,将这个sessionId... -
JAVA网络爬虫实战视频教程
2018-11-20 23:30:34┃ ┣━网络爬虫JAVA ┃ ┃ ┃ ┃ ┣━开源系统-教学视频 ┃ ┃ ┃ ┃ ┃ ┣━微博爬虫-博主、博文、关注列表抓取更新.zip ┃ ┃ ┃ ┃ ┃ ┣━微博爬虫_导入与布署视频.zip ┃ ┃ ┃ ┃ ┃ ┣━漫爬型网络爬虫_导入...