您好,登录后才能下订单哦!
jsoup 是一款用于解析 HTML 的 Java 库,它提供了非常方便的 API 来提取和操作数据。jsoup 的主要功能包括:
jsoup 的设计目标是尽可能地模拟浏览器解析 HTML 的方式,因此它能够处理各种复杂的 HTML 文档,并且能够很好地处理不规范的 HTML。
如果你使用 Maven 来管理项目依赖,可以在 pom.xml 文件中添加以下依赖:
<dependency>
    <groupId>org.jsoup</groupId>
    <artifactId>jsoup</artifactId>
    <version>1.14.3</version>
</dependency>
你也可以从 jsoup 官方网站 下载最新的 JAR 文件,并将其添加到项目的类路径中。
jsoup 可以从多种来源解析 HTML,包括 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());
    }
}
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());
    }
}
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());
    }
}
jsoup 提供了多种方式来提取 HTML 文档中的数据,最常用的是使用 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());
        }
    }
}
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());
    }
}
jsoup 不仅可以提取数据,还可以修改 HTML 文档。
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);
    }
}
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);
    }
}
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);
    }
}
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);
    }
}
jsoup 可以方便地处理 HTML 表单,包括提交表单和获取表单数据。
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"));
        }
    }
}
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());
    }
}
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());
    }
}
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"));
    }
}
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());
    }
}
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());
    }
}
如果你遇到 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());
    }
}
如果你遇到中文乱码问题,可以通过设置 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());
    }
}
如果你遇到 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());
    }
}
jsoup 是一款功能强大且易于使用的 Java HTML 解析库,它能够处理各种复杂的 HTML 文档,并且提供了丰富的 API 来提取和操作数据。通过本文的介绍,你应该已经掌握了 jsoup 的基本用法和一些高级技巧。希望你在实际项目中能够灵活运用 jsoup,提高开发效率。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。