c 抓取网页数据(2.Jsoup伪造请求头且携带身份信息获取登录信息结果:)

优采云 发布时间: 2022-02-04 00:00

  c 抓取网页数据(2.Jsoup伪造请求头且携带身份信息获取登录信息结果:)

  今天在学习爬虫的时候,想着用jsoup来模拟登录。下面分有验证码和无验证码两种情况进行讨论。

  -----------------------------------------无验证码------------------ - ------------

  1.我们使用网页正常登录,使用浏览器自带的开发者工具查看一些登录信息

  

  当我们登录时,需要携带自己的身份信息,即用户名和密码。它还携带了一些浏览器信息,所以我们可以通过Jsoup伪造一些请求头,写入自己的身份信息进行登录,然后获取登录后返回的cookie,里面会收录session,而有了sessionid我们就可以爬取获取到的url登录后即可访问。

  2.Jsoup伪造请求头,携带身份信息获取登录信息

   /**

* 模拟登录获取cookie和sessionid

*/

public static void login() throws IOException {

String urlLogin = "http://qiaoliqiang.cn/Exam/user_login.action";

Connection connect = Jsoup.connect(urlLogin);

// 伪造请求头

connect.header("Accept", "application/json, text/javascript, */*; q=0.01").header("Accept-Encoding",

"gzip, deflate");

connect.header("Accept-Language", "zh-CN,zh;q=0.9").header("Connection", "keep-alive");

connect.header("Content-Length", "72").header("Content-Type",

"application/x-www-form-urlencoded; charset=UTF-8");

connect.header("Host", "qiaoliqiang.cn").header("Referer", "http://qiaoliqiang.cn/Exam/");

connect.header("User-Agent",

"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36")

.header("X-Requested-With", "XMLHttpRequest");

// 携带登陆信息

connect.data("username", "362501197407067215").data("password", "123456").data("user_type", "2")

.data("isRememberme", "yes");

//请求url获取响应信息

Response res = connect.ignoreContentType(true).method(Method.POST).execute();// 执行请求

// 获取返回的cookie

Map cookies = res.cookies();

for (Entry entry : cookies.entrySet()) {

System.out.println(entry.getKey() + "-" + entry.getValue());

}

System.out.println("---------华丽的分割线-----------");

String body = res.body();// 获取响应体

System.out.println(body);

}

  结果:

  logininfo-"362501197407067215,123456"

JSESSIONID-75ad3bad-30cd-4d7a-8918-b13054f4b737

rememberMe-deleteMe

---------华丽的分割线-----------

{"login_result":"success_manager","user_type":"2","login_url":"examParper\/examPaper\/examparperManage.jsp"}

  反例:

  此时,我们将身份信息的密码修改为错误密码:

   // 携带登陆信息

connect.data("username", "362501197407067215").data("password", "123").data("user_type", "2")

.data("isRememberme", "yes");

  结果:

  ---------华丽的分割线-----------

{"login_result":"error002","user_type":"2","login_url":null}

  3.根据以上cookie获取模拟访问网站登录即可访问网站

  将cookies定义为全局变量cookies,当我们访问登录可以访问的url时,我们会带着cookies访问。

  package cn.qlq.craw.Jsoup;

import java.io.IOException;

import java.util.Map;

import java.util.Map.Entry;

import org.jsoup.Connection;

import org.jsoup.Connection.Method;

import org.jsoup.Connection.Response;

import org.jsoup.Jsoup;

import org.jsoup.nodes.Document;

/**

* 模拟Jsoup跳过登陆进行爬虫

*

* @author liqiang

*

*/

public class JsoupCookieCraw {

private static Map cookies = null;

public static void main(String[] args) throws IOException {

// 先模拟登录获取到cookie和sessionid并存到全局变量cookies中

login();

String url = "http://qiaoliqiang.cn/Exam/view/testPerson/outEmployeeAllot.jsp";

// 直接获取DOM树,带着cookies去获取

Document document = Jsoup.connect(url).cookies(cookies).post();

System.out.println(document.toString());

}

/**

* 模拟登录获取cookie和sessionid

*/

public static void login() throws IOException {

String urlLogin = "http://qiaoliqiang.cn/Exam/user_login.action";

Connection connect = Jsoup.connect(urlLogin);

// 伪造请求头

connect.header("Accept", "application/json, text/javascript, */*; q=0.01").header("Accept-Encoding",

"gzip, deflate");

connect.header("Accept-Language", "zh-CN,zh;q=0.9").header("Connection", "keep-alive");

connect.header("Content-Length", "72").header("Content-Type",

"application/x-www-form-urlencoded; charset=UTF-8");

connect.header("Host", "qiaoliqiang.cn").header("Referer", "http://qiaoliqiang.cn/Exam/");

connect.header("User-Agent",

"Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36")

.header("X-Requested-With", "XMLHttpRequest");

// 携带登陆信息

connect.data("username", "362501197407067215").data("password", "123456").data("user_type", "2")

.data("isRememberme", "yes");

//请求url获取响应信息

Response res = connect.ignoreContentType(true).method(Method.POST).execute();// 执行请求

// 获取返回的cookie

cookies = res.cookies();

}

}

  结果:(可以获取我们访问的页面内容)

  

分配员工

.....................

  反例:

  我们去掉登录方式,访问时不携带cookies:

   public static void main(String[] args) throws IOException {

String url = "http://qiaoliqiang.cn/Exam/view/testPerson/outEmployeeAllot.jsp";

// 直接获取DOM树,带着cookies去获取

Document document = Jsoup.connect(url).post();

System.out.println(document.toString());

}

  结果:(我们访问了系统的首页,也就是登录界面,发现我们被网站屏蔽了)

  

主页

.....

  总结:

  使用上述模拟登录方式,无验证码登录基本可以满足要求。

  ------------------------------有验证码------ - ------------

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线