jsoup怎么用

发布时间:2022-01-15 17:44:18 作者:iii
来源:亿速云 阅读:204

jsoup怎么用

1. 简介

jsoup 是一款用于解析 HTML 的 Java 库,它提供了非常方便的 API 来提取和操作数据。jsoup 的主要功能包括:

jsoup 的设计目标是尽可能地模拟浏览器解析 HTML 的方式,因此它能够处理各种复杂的 HTML 文档,并且能够很好地处理不规范的 HTML。

2. 安装与配置

2.1 Maven 依赖

如果你使用 Maven 来管理项目依赖,可以在 pom.xml 文件中添加以下依赖:

<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.14.3</version>
</dependency>

2.2 手动下载

你也可以从 jsoup 官方网站 下载最新的 JAR 文件,并将其添加到项目的类路径中。

3. 基本用法

3.1 解析 HTML

jsoup 可以从多种来源解析 HTML,包括 URL、文件和字符串。

3.1.1 从 URL 解析

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class JsoupExample {
    public static void main(String[] args) throws Exception {
        Document doc = Jsoup.connect("https://example.com").get();
        System.out.println(doc.title());
    }
}

3.1.2 从文件解析

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

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

public class JsoupExample {
    public static void main(String[] args) throws IOException {
        File input = new File("path/to/file.html");
        Document doc = Jsoup.parse(input, "UTF-8", "https://example.com/");
        System.out.println(doc.title());
    }
}

3.1.3 从字符串解析

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class JsoupExample {
    public static void main(String[] args) {
        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.title());
    }
}

3.2 提取数据

jsoup 提供了多种方式来提取 HTML 文档中的数据,最常用的是使用 CSS 选择器。

3.2.1 使用 CSS 选择器

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class JsoupExample {
    public static void main(String[] args) throws Exception {
        Document doc = Jsoup.connect("https://example.com").get();
        Elements links = doc.select("a[href]");
        for (Element link : links) {
            System.out.println(link.attr("href") + " " + link.text());
        }
    }
}

3.2.2 使用 DOM 方法

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

public class JsoupExample {
    public static void main(String[] args) throws Exception {
        Document doc = Jsoup.connect("https://example.com").get();
        Element content = doc.getElementById("content");
        System.out.println(content.text());
    }
}

3.3 操作 HTML

jsoup 不仅可以提取数据,还可以修改 HTML 文档。

3.3.1 修改属性

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

public class JsoupExample {
    public static void main(String[] args) throws Exception {
        Document doc = Jsoup.connect("https://example.com").get();
        Element link = doc.select("a").first();
        link.attr("href", "https://newurl.com");
        System.out.println(link);
    }
}

3.3.2 修改文本

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

public class JsoupExample {
    public static void main(String[] args) throws Exception {
        Document doc = Jsoup.connect("https://example.com").get();
        Element link = doc.select("a").first();
        link.text("New Text");
        System.out.println(link);
    }
}

3.3.3 添加元素

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;

public class JsoupExample {
    public static void main(String[] args) throws Exception {
        Document doc = Jsoup.connect("https://example.com").get();
        Element div = doc.select("div").first();
        div.append("<p>New paragraph</p>");
        System.out.println(div);
    }
}

3.4 清理 HTML

jsoup 提供了清理 HTML 的功能,可以防止 XSS 攻击。

import org.jsoup.Jsoup;
import org.jsoup.safety.Whitelist;

public class JsoupExample {
    public static void main(String[] args) {
        String unsafe = "<p><a href='http://example.com/' onclick='stealCookies()'>Link</a></p>";
        String safe = Jsoup.clean(unsafe, Whitelist.basic());
        System.out.println(safe);
    }
}

4. 高级用法

4.1 处理表单

jsoup 可以方便地处理 HTML 表单,包括提交表单和获取表单数据。

4.1.1 获取表单数据

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;

public class JsoupExample {
    public static void main(String[] args) throws Exception {
        Document doc = Jsoup.connect("https://example.com/login").get();
        Element form = doc.select("form").first();
        Elements inputs = form.select("input");
        for (Element input : inputs) {
            System.out.println(input.attr("name") + " " + input.attr("value"));
        }
    }
}

4.1.2 提交表单

import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import java.io.IOException;

public class JsoupExample {
    public static void main(String[] args) throws IOException {
        Connection.Response loginForm = Jsoup.connect("https://example.com/login")
                .method(Connection.Method.GET)
                .execute();

        Document loginDoc = loginForm.parse();
        String csrfToken = loginDoc.select("input[name=csrf_token]").attr("value");

        Connection.Response loginResponse = Jsoup.connect("https://example.com/login")
                .data("username", "user")
                .data("password", "pass")
                .data("csrf_token", csrfToken)
                .cookies(loginForm.cookies())
                .method(Connection.Method.POST)
                .execute();

        System.out.println(loginResponse.statusCode());
    }
}

4.2 处理 Cookie

jsoup 可以方便地处理 Cookie,包括获取和设置 Cookie。

import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import java.io.IOException;

public class JsoupExample {
    public static void main(String[] args) throws IOException {
        Connection.Response response = Jsoup.connect("https://example.com")
                .method(Connection.Method.GET)
                .execute();

        Document doc = response.parse();
        System.out.println(doc.title());

        Connection.Response loginResponse = Jsoup.connect("https://example.com/login")
                .data("username", "user")
                .data("password", "pass")
                .cookies(response.cookies())
                .method(Connection.Method.POST)
                .execute();

        System.out.println(loginResponse.statusCode());
    }
}

4.3 处理重定向

jsoup 默认会跟随重定向,但你可以通过设置 followRedirects(false) 来禁用重定向。

import org.jsoup.Connection;
import org.jsoup.Jsoup;

import java.io.IOException;

public class JsoupExample {
    public static void main(String[] args) throws IOException {
        Connection.Response response = Jsoup.connect("https://example.com")
                .followRedirects(false)
                .execute();

        System.out.println(response.statusCode());
        System.out.println(response.header("Location"));
    }
}

4.4 处理超时

jsoup 默认的超时时间是 30 秒,你可以通过设置 timeout(int milliseconds) 来修改超时时间。

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import java.io.IOException;

public class JsoupExample {
    public static void main(String[] args) throws IOException {
        Document doc = Jsoup.connect("https://example.com")
                .timeout(5000)
                .get();

        System.out.println(doc.title());
    }
}

4.5 处理代理

jsoup 支持通过代理访问网页。

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import java.io.IOException;

public class JsoupExample {
    public static void main(String[] args) throws IOException {
        Document doc = Jsoup.connect("https://example.com")
                .proxy("proxy.example.com", 8080)
                .get();

        System.out.println(doc.title());
    }
}

5. 常见问题

5.1 如何处理 SSL 证书问题?

如果你遇到 SSL 证书问题,可以通过设置 validateTLSCertificates(false) 来禁用 SSL 证书验证。

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import java.io.IOException;

public class JsoupExample {
    public static void main(String[] args) throws IOException {
        Document doc = Jsoup.connect("https://example.com")
                .validateTLSCertificates(false)
                .get();

        System.out.println(doc.title());
    }
}

5.2 如何处理中文乱码问题?

如果你遇到中文乱码问题,可以通过设置 charset 来指定字符编码。

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import java.io.IOException;

public class JsoupExample {
    public static void main(String[] args) throws IOException {
        Document doc = Jsoup.connect("https://example.com")
                .header("Accept-Charset", "UTF-8")
                .get();

        System.out.println(doc.title());
    }
}

5.3 如何处理 403 错误?

如果你遇到 403 错误,可以通过设置 userAgent 来模拟浏览器访问。

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

import java.io.IOException;

public class JsoupExample {
    public static void main(String[] args) throws IOException {
        Document doc = Jsoup.connect("https://example.com")
                .userAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36")
                .get();

        System.out.println(doc.title());
    }
}

6. 总结

jsoup 是一款功能强大且易于使用的 Java HTML 解析库,它能够处理各种复杂的 HTML 文档,并且提供了丰富的 API 来提取和操作数据。通过本文的介绍,你应该已经掌握了 jsoup 的基本用法和一些高级技巧。希望你在实际项目中能够灵活运用 jsoup,提高开发效率。

推荐阅读:
  1. 时间戳以及jsoup应用
  2. jsoup jar包在android中的问题

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

jsoup

上一篇:circRNADisease数据库怎么用

下一篇:springboot整合quartz定时任务框架的方法是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》