jsoup简单用法实例

1 篇文章 0 订阅
1 篇文章 0 订阅

maven工程需要引入:

        <dependency>
            <!-- jsoup HTML parser library @ https://jsoup.org/ -->
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>1.13.1</version>
        </dependency>

Java代码

package com.itoss.crawler;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.junit.jupiter.api.Test;

import java.io.File;
import java.io.IOException;


public class JsoupTest {
    @Test
    public void parseHtmlString() {
        //从字符串中分析文档
        String html = "<html><head><title>First parse</title></head>"
                + "<body><p>Parsed HTML into a doc.</p></body></html>";
        Document doc = Jsoup.parse(html);
        System.out.println(doc.html());
    }

    @Test
    public void parseHtmlFragment() {
        //分析正文片段
        String html = "<div><p>Lorem ipsum.</p>";
        Document doc = Jsoup.parseBodyFragment(html);
        Element body = doc.body();
        System.out.println(body.html());
    }

    @Test
    public void parseUrl() {
        //从 URL 加载文档
        Document doc = null;
        try {
            doc = Jsoup.connect("https://www.baidu.com/").get();
            System.out.println(doc.html());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Test
    public void parseFile() {
        //从文件加载文档
        File file = new File("C:\\Users\\juun\\Desktop\\ani.html");
        try {
            Document doc = Jsoup.parse(file, "utf8");
            System.out.println(doc.html());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Test
    public void docParse(){
        //document解析
        File file = new File("C:\\Users\\juun\\Desktop\\ani.html");
        try {
            Document doc = Jsoup.parse(file, "utf8");

            System.out.println(doc.getElementById("id1").text());
            System.out.println(doc.getElementsByClass("bounceInLeft").get(0).text());
            System.out.println(doc.getElementsByAttribute("idname").get(0).text());
            System.out.println(doc.getElementsByAttributeValue("class", "animated bounceInRight").get(0).text());
            System.out.println(doc.getElementsByTag("h1").get(0).text());
            System.out.println(doc.getElementsByTag("h1").get(0).className());
            System.out.println(doc.getElementsByTag("h1").get(0).attr("id"));
            System.out.println(doc.getElementsByTag("h1").get(0).html());
/*
查找元素
    getElementById(String id)
    getElementsByTag(String tag)
    getElementsByClass(String className)
    getElementsByAttribute(String key)(及相关方法)
    元素同级:, 、 、 、,siblingElements()firstElementSibling()lastElementSibling()nextElementSibling()previousElementSibling()
    图:parent()children()child(int index)
元素数据
    attr(String key)获取和设置属性attr(String key, String value)
    attributes()获取所有属性
    id()和className()classNames()
    text()获取和设置文本内容text(String value)
    html()获取和设置内部 HTML 内容html(String value)
    outerHtml()获取外部 HTML 值
    data()获取数据内容(例如 和 标记)scriptstyle
    tag()和tagName()
操作 HTML 和文本
    append(String html),prepend(String html)
    appendText(String text),prependText(String text)
    appendElement(String tagName),prependElement(String tagName)
    html(String value)
*/
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Test
    public void docSelect(){
        //select选择器解析
        File file = new File("C:\\Users\\juun\\Desktop\\ani.html");
        try {
            Document doc = Jsoup.parse(file, "utf8");

            System.out.println(doc.select("#id1").get(0).text());
            System.out.println(doc.select(".bounceInLeft").get(0).text());
            System.out.println(doc.select("h1").get(0).text());
            System.out.println(doc.select("h3>span").get(0).text());
            System.out.println(doc.select("h1.bounceInLeft").get(0).text());
            System.out.println(doc.select("h1[idname]").get(0).text());
/*
选择器概述
    tagname:按标记查找元素,例如a
    ns|tag:在命名空间中按标记查找元素,例如 查找元素fb|name<fb:name>
    #id:按 ID 查找元素,例如#logo
    .class:按类名查找元素,例如.masthead
    [attribute]:具有属性的元素,例如[href]
    [^attr]:具有属性名称前缀的元素,例如 查找具有 HTML5 数据集属性的元素[^data-]
    [attr=value]:具有属性值的元素,例如 (也可配额, 如[width=500][data-name='launch sequence'])
    [attr^=value],:具有以值开始、以值结束或包含值的属性的元素,例如[attr$=value][attr*=value][href*=/path/]
    [attr~=regex]: 具有与正则表达式匹配的属性值的元素;例如.img[src~=(?i)\.(png|jpe?g)]
    *:所有元素,例如*
选择器组合
    el#id:具有 ID 的元素,例如div#logo
    el.class:具有类的元素,例如div.masthead
    el[attr]:具有属性的元素,例如a[href]
    任何组合,例如a[href].highlight
    ancestor child:来自祖先的子元素,例如 在具有类"正文"的块下查找元素.body pp
    parent > child:直接从父元素降代的元素,例如 查找元素;并找到身体标签的直接子项div.content > ppbody > *
    siblingA + siblingB:查找与同级 B 元素的子级 B 元素,例如,查找同级 B 元素。div.head + div
    siblingA ~ siblingX: 查找同级 X 元素,前面是同级 A,例如h1 ~ p
    el, el, el:对多个选择器进行分组,查找匹配任何选择器的唯一元素;例如.div.masthead, div.logo
伪选择器
    :lt(n):查找其同级索引(即其在 DOM 树中相对于其父级的位置)小于 的元素。例如.ntd:lt(3)
    :gt(n):查找同级索引大于 的元素。例如.ndiv p:gt(2)
    :eq(n):查找其同级索引等于 的元素。例如.nform input:eq(1)
    :has(selector):查找包含与选择器匹配的元素的元素;例如.div:has(p)
    :not(selector):查找与选择器不匹配的元素;例如.div:not(.logo)
    :contains(text):查找包含给定文本的元素。搜索不区分大小写;例如.p:contains(jsoup)
    :containsOwn(text):查找直接包含给定文本的元素
    :matches(regex):查找其文本与指定的正则表达式匹配的元素;例如.div:matches((?i)login)
    :matchesOwn(regex):查找其自己的文本与指定的正则表达式匹配的元素
    请注意,上述索引伪选择器基于 0,也就是说,第一个元素位于索引 0,第二个元素位于 1,等等
*/
        } catch (IOException e) {
            e.printStackTrace();
            e.printStackTrace();
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

军大_j

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值