爬虫之Jsoup

时间:2021-5-27 作者:qvyue

Jsoup简介
jsoup 是一款Java 的HTML解析器,可直接解析某个URL地址、HTML文本内容。它提供了一套非常省力的API,可通过DOM,CSS以及类似于jQuery的操作方法来取出和操作数据。官网:https://jsoup.org/

主要功能

  1. 从一个URL,文件或字符串中解析HTML

  2. 使用DOM或CSS选择器来查找、取出数据使用DOM或CSS选择器来查找、取出数据

  3. 可操作HTML元素、属性、文本可操作HTML元素、属性、文本

    注意:jsoup是基于MIT协议发布的,可放心使用于商业项目。

Maven依赖关系

        org.jsoupjsoup1.11.3

jsoup api
6个包提供用于开发jsoup应用程序的类和接口。

  • org.jsoup
  • org.jsoup.examples
  • org.jsoup.helper
  • org.jsoup.nodes
  • org.jsoup.parser
  • org.jsoup.safety
  • org.jsoup.salect

主要类:

  • Jsoup 类提供了连接,清理和解析HTML文档的方法
  • Document 获取HTML文档
  • Element 获取、操作HTML节点

简单学习

  1. 三种加载HTML的方法
    @Test
    public void test1() throws IOException {
        //从URL加载HTML
        Document document = Jsoup.connect("http://www.baidu.com").get();
        String title = document.title();
        //获取html中的标题
        System.out.println("title :"+title);

        //从字符串加载HTML
        String html = "First parse"
                + "

Parsed HTML into a doc.

"; Document doc = Jsoup.parse(html); title = doc.title(); System.out.println("title :"+title); //从文件加载HTML doc = Jsoup.parse(new File("F:\jsoup\html\index.html"),"utf-8"); title = doc.title(); System.out.println("title :"+title); }
  1. 获取html中的head,body,url等信息
    @Test
    public void test2() throws IOException {
        Document document = Jsoup.connect("http://www.baidu.com").get();
        String title = document.title();

        System.out.println("title :"+title);
        //获取html中的head
        System.out.println(document.head());
        //获取html中的body
        //System.out.println(document.body());

        //获取HTML页面中的所有链接
        Elements links = document.select("a[href]");
        for (Element link : links){
            System.out.println("link : "+ link.attr("href"));
            System.out.println("text :"+ link.text());
        }
    }
  1. 获取URL的元信息
    @Test
    public void test3() throws IOException {
        Document document = Jsoup.connect("https://passport.lagou.com").get();

        System.out.println(document.head());
        //获取URL的元信息
        String description = document.select("meta[name=description]").get(0).attr("content");
        System.out.println("Meta description : " + description);

        String keywords = document.select("meta[name=keywords]").first().attr("content");
        System.out.println("Meta keyword : " + keywords);
    }
  1. 根据class名称获取表单
    @Test
    public void test4() throws IOException {
        Document document = Jsoup.connect("https://passport.lagou.com/login/login.html?signature=8ECBCDF2B86061432B425A0B94FC863B&service=https%253A%252F%252Fwww.lagou.com%252F&action=login&serviceId=lagou&ts=1547711303033").get();
        //获取拉勾网登入页面的body
        //System.out.println(document.body());
        //根据class名称获取表单
        Elements formElement = document.getElementsByClass("form_body");
        System.out.println(formElement.html());
        //获取URL的元信息
        for (Element inputElement : formElement) {
            String placeholder = inputElement.getElementsByTag("input").attr("placeholder");
            System.out.println(placeholder);
        }
    }
  1. 提取并打印表单参数
    @Test
    public void test5() throws IOException {
        Document document = Jsoup.parse(new File("F:\jsoup\html\login.html"),"utf-8");
        Element loginform = document.getElementById("registerform");

        Elements inputElements = loginform.getElementsByTag("input");
        for (Element inputElement : inputElements) {
            String key = inputElement.attr("name");
            String value = inputElement.attr("value");
            System.out.println("Param name: "+key+" -- Param value: "+value);
        }
    }
  1. 设置元素的html内容
    @Test
    public void test6() throws IOException {
        Document document = Jsoup.parse(new File("F:\jsoup\html\index.html"),"utf-8");
        System.out.println(document.body());// 
System.out.println("*************"); Element div = document.select("div").first(); div.html("

Hello

"); //

Hello

div.prepend("

Fiest

"); //

Fiest

Hello

div.append("

Last

"); //

Fiest

Hello

Last

System.out.println(document.body()); System.out.println("*************"); System.out.println(div.text()); System.out.println("*************"); //对元素包裹一个外部HTML内容 div.wrap("
"); //

Fiest

Hello

Last

System.out.println(document.body()); }
  1. 设置元素的文本内容
    @Test
    public void test7() throws IOException {
        Document document = Jsoup.parse(new File("F:\jsoup\html\index.html"),"utf-8");
        System.out.println(document.body());// 
System.out.println("*************"); Element div = document.select("div").first(); div.text("7 > 8 "); //
7 > 8
div.prepend("Fiest "); //
Fiest 7 > 8
div.append("Last "); //
Fiest 7 > 8 Last
System.out.println(document.body()); System.out.println("*************"); System.out.println(div.text()); }

推荐阅读更多精彩内容

  • Android爬虫之Jsoup
    最近做了个获取Kindle特价书的app(https://www.coolapk.com/apk/167660),...
    ifadai阅读 1,857评论 0赞 14
  • h5常见的面试题
    第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 22,288评论 1赞 45
  • HTML+CSS(47-72)
    问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 11,634评论 1赞 91
  • 李咏 您将永远活在热爱您的观众心中
    李咏 因患癌症病逝 乍一看见这条消息 不敢相信 心想这是假的 又是哪个网痞子搞的噱头吧 直到网上的信息 越来越多 ...
    杏花坞主人阅读 308评论 3赞 3
  • 关于他的一切①
    我不知道什么 更好 最好 我只知道 他是无人能及的 刚刚好 不多不少
    泺夭阅读 64评论 0赞 0

声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。