欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java爬虫模拟登陆的实例详解

程序员文章站 2022-05-30 20:50:41
使用jsoup工具可以解析某个url地址、html文本内容,是java爬虫很好的优势,也是我们在网络爬虫不可缺少的工具。本文小编带领大家使用jsoup 实现java爬虫模拟登陆,通过省力的api,很好...

使用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();
  }
}

实例代码扩展:

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<element> et = d1.select("#form1");// 获取form表单,可以通过查看页面源码代码得知
    // 获取,cooking和表单属性,下面map存放post时的数据
    map<string, string> 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<string, string> 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爬虫实战之模拟登陆内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!