JavaRush /Blog Java /Random-VI /3 ví dụ về cách phân tích tệp HTML trong Java bằng Jsoup
Sdu
Mức độ

3 ví dụ về cách phân tích tệp HTML trong Java bằng Jsoup

Xuất bản trong nhóm
3 ví dụ về cách phân tích tệp HTML trong Java bằng Jsoup - 1HTML là cốt lõi của WEB, tất cả các trang Internet mà bạn nhìn thấy, cho dù chúng được tạo động bằng JavaScript, JSP, PHP, ASP hay các công nghệ web khác, đều dựa trên HTML. Trên thực tế, trình duyệt của bạn phân tích cú pháp HTML và hiển thị nó theo cách thuận tiện cho bạn. Nhưng điều gì sẽ xảy ra nếu bạn cần phân tích một tài liệu HTML và tìm một phần tử, thẻ, thuộc tính nào đó trong đó hoặc kiểm tra xem một phần tử cụ thể có tồn tại hay không bằng chương trình Java. Nếu bạn đã là lập trình viên Java được vài năm, tôi chắc chắn bạn sẽ thực hiện phân tích cú pháp XML bằng các trình phân tích cú pháp như DOM hoặc SAX. Nhưng trớ trêu thay, đôi khi bạn cần phân tích tài liệu HTML từ một ứng dụng Java cơ bản không chứa Servlets và các công nghệ web Java khác. Hơn nữa, Core JDK cũng không chứa thư viện HTTP hoặc HTML. Đó là lý do tại sao khi phân tích cú pháp tệp HTML, nhiều lập trình viên Java hỏi Google cách lấy giá trị của thẻ HTML trong Java. Khi tôi biết điều này, tôi chắc chắn rằng giải pháp sẽ là một thư viện nguồn mở triển khai chức năng tôi cần, nhưng tôi không biết rằng nó sẽ tuyệt vời và giàu tính năng như Jsoup. Nó không chỉ cung cấp hỗ trợ đọc và phân tích các tệp HTML, thuộc tính, lớp CSS theo kiểu JQuery mà đồng thời cho phép bạn sửa đổi chúng. Sử dụng Jsoup bạn có thể làm bất cứ điều gì bạn muốn với tài liệu HTML. Trong bài viết này, chúng tôi sẽ phân tích cú pháp tệp HTML và tìm tên cũng như thuộc tính của thẻ. Chúng ta cũng sẽ xem xét các ví dụ về tải xuống và phân tích cú pháp HTML từ một tệp và bất kỳ URL nào, chẳng hạn như trang chủ Google.

Jsoup là gì

Jsoup là một thư viện Java mã nguồn mở để làm việc với HTML thực. Nó cung cấp một API rất thuận tiện để truy xuất và thao tác dữ liệu bằng cách sử dụng các kỹ thuật giống DOM, CSS và jQuery tốt nhất. Jsoup triển khai đặc tả WHATWG HTML5 và phân tích HTML thành cùng một DOM như các trình duyệt hiện đại như Chrome và Firefox thực hiện. Dưới đây là một số tính năng hữu ích của thư viện Jsoup:
  • Jsoup có thể quét và phân tích HTML từ một URL, tệp hoặc chuỗi.
  • Jsoup có thể tìm và trích xuất dữ liệu bằng cách sử dụng bộ chọn CSS hoặc bộ chọn CSS.
  • Jsoup cho phép bạn thao tác các phần tử, thuộc tính và văn bản HTML.
  • Jsoup cung cấp tính năng khử trùng danh sách trắng đối với thông tin do người dùng cung cấp để ngăn chặn các cuộc tấn công XSS.
  • Jsoup cũng tạo ra HTML "gọn gàng".
Jsoup được thiết kế để hoạt động với nhiều loại HTML tồn tại trong thế giới thực, bao gồm HTML được xác thực hợp lệ với bộ thẻ không đầy đủ, chưa được xác thực. Một trong những ưu điểm chính của Jsoup là độ tin cậy của nó.

Phân tích cú pháp HTML trong Java bằng Jsoup

Trong hướng dẫn này, chúng ta sẽ thấy ba ví dụ khác nhau về phân tích cú pháp và duyệt tài liệu HTML trong Java bằng Jsoup. Trong ví dụ đầu tiên, chúng ta sẽ phân tích một chuỗi HTML chứa các thẻ ở dạng chuỗi ký tự Java. Trong ví dụ thứ hai, chúng tôi sẽ tải xuống tài liệu HTML của mình từ Internet và trong ví dụ thứ ba, chúng tôi sẽ tải xuống tệp HTML mẫu login.html của riêng mình để phân tích cú pháp. Tệp này là một tài liệu HTML mẫu bao gồm thẻ "tiêu đề" và thẻ "div" trong phần "nội dung" chứa biểu mẫu HTML. Biểu mẫu chứa các trường để nhập tên người dùng và mật khẩu, cũng như các nút đặt lại và xác nhận cho các hành động tiếp theo. Đây là HTML "chính xác" có thể vượt qua bước kiểm tra "tính hợp lệ", nghĩa là tất cả các thẻ và thuộc tính đều được đóng đúng cách. Tệp HTML của chúng tôi trông như thế này:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <title>Login Page</title>
    </head>
    <body>
        <div id="login" class="simple" >
            <form action="login.do">
                Username : <input id="username" type="text" /><br>
                Password : <input id="password" type="password" /><br>
                <input id="submit" type="submit" />
                <input id="reset" type="reset" />
            </form>
        </div>
    </body>
</html>
Với Jsoup, việc phân tích HTML rất dễ dàng, tất cả những gì bạn cần làm là gọi một phương thức tĩnh Jsoup.parse()và truyền chuỗi HTML của bạn tới nó. Jsoup cung cấp một số phương thức nạp chồng parse()để đọc HTML từ một chuỗi, tệp, từ URI cơ sở, từ URL và từ tệp InputStream. Bạn cũng có thể chỉ định mã hóa để đọc chính xác tệp HTML nếu nó không ở định dạng UTF-8. Phương thức này parse(String html)phân tích HTML đến thành một đối tượng mới Document. Trong Jsoup, một lớp Documentkế thừa từ một lớp Element, lớp này mở rộng lớp Node. Lớp này cũng Nodekế thừa từ lớp TextNode. Miễn là bạn chuyển một chuỗi không null vào phương thức, bạn được đảm bảo có một phân tích cú pháp thành công, có ý nghĩa về một đối tượng Documentchứa (ít nhất) các phần tử "head" và "body". Nếu bạn có một đối tượng Document, bạn có thể lấy dữ liệu mong muốn bằng cách gọi các phương thức thích hợp của lớp Documentvà lớp cha của nó Elementcũng như các lớp Node.

Chương trình Java để phân tích tài liệu HTML

Đây là chương trình hoàn chỉnh của chúng tôi để phân tích chuỗi HTML, tệp HTML được tải xuống từ internet và tệp HTML cục bộ. Để chạy nó, bạn có thể sử dụng IDE (Eclipse hoặc bất kỳ loại nào khác) hoặc dòng lệnh. Trong Eclipse, việc này rất dễ dàng, chỉ cần sao chép mã này, tạo một dự án Java mới, nhấp chuột phải vào thư mục "src" và dán mã đã sao chép. Eclipse sẽ đảm nhiệm việc tạo gói và tệp mã nguồn phù hợp với tên thích hợp, do đó công việc sẽ ít tốn kém hơn rất nhiều. Nếu bạn đã có một dự án Java thì đây chỉ là một bước. Chương trình dưới đây minh họa ba ví dụ về phân tích cú pháp và duyệt tệp HTML. Trong ví dụ đầu tiên, chúng tôi phân tích cú pháp trực tiếp một chuỗi chứa HTML, trong ví dụ thứ hai là tệp HTML được tải xuống từ một URL, trong ví dụ thứ ba, chúng tôi tải xuống và phân tích cú pháp tài liệu HTML từ hệ thống tệp cục bộ.
import java.io.File;
import java.io.IOException;

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

/**
* Java Program to parse/read HTML documents from File using Jsoup library.
* Jsoup is an open source library which allows Java developer to parse HTML
* files and extract elements, manipulate data, change style using DOM, CSS and
* JQuery like method.
*
* @author Javin Paul
*/
public class HTMLParser{

    public static void main(String args[]) {

        // Parse HTML String using JSoup library
        String HTMLSTring = "<!DOCTYPE html>"
                + "<html>"
                + "<head>"
                + "<title>JSoup Example</title>"
                + "</head>"
                + "<body>"
                + "<table><tr><td><h1>HelloWorld</h1></tr>"
                + "</table>"
                + "</body>"
                + "</html>";

        Document html = Jsoup.parse(HTMLSTring);
        String title = html.title();
        String h1 = html.body().getElementsByTag("h1").text();

        System.out.println("Input HTML String to JSoup :" + HTMLSTring);
        System.out.println("After parsing, Title : " + title);
        System.out.println("Afte parsing, Heading : " + h1);

        // JSoup Example 2 - Reading HTML page from URL
        Document doc;
        try {
            doc = Jsoup.connect("http://google.com/").get();
            title = doc.title();
        } catch (IOException e) {
            e.printStackTrace();
        }

        System.out.println("Jsoup Can read HTML page from URL, title : " + title);

        // JSoup Example 3 - Parsing an HTML file in Java
        //Document htmlFile = Jsoup.parse("login.html", "ISO-8859-1"); // wrong
        Document htmlFile = null;
        try {
            htmlFile = Jsoup.parse(new File("login.html"), "ISO-8859-1");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } // right
        title = htmlFile.title();
        Element div = htmlFile.getElementById("login");
        String cssClass = div.className(); // getting class form HTML element

        System.out.println("Jsoup can also parse HTML file directly");
        System.out.println("title : " + title);
        System.out.println("class of div tag : " + cssClass);
    }
}
Đầu ra:
Input HTML String to JSoup :<!DOCTYPE html><html><head><title>JSoup Example</title></head><body><table><tr><td><h1>HelloWorld</h1></tr></table></body></html>
After parsing, Title : JSoup Example
Afte parsing, Heading : HelloWorld
Jsoup Can read HTML page from URL, title : Google
Jsoup can also parse HTML file directly
title : Login Page
class of div tag : simple
Trình phân tích cú pháp HTML Jsoup sẽ cố gắng hết sức để tạo ra một phân tích cú pháp "sạch" cho HTML mà bạn cung cấp, cho dù nó có đúng định dạng hay không. Nó có thể xử lý các lỗi sau:
  • thẻ không được đóng. Ví dụ,<p>Java <p>Scala to <p>Java</p> <p>Scala</p>
  • các thẻ ngụ ý. Ví dụ: những cái mở <td>Java is Great</td>sẽ được gói trong<table><tr><td>
  • Jsoup tạo cấu trúc tài liệu mạnh mẽ (HTML chứa phần đầu và phần thân, nhưng phần thân chỉ chứa các phần tử có liên quan)
Jsoup là một thư viện mã nguồn mở tuyệt vời và đáng tin cậy giúp việc đọc tài liệu html, các đoạn nội dung, chuỗi html và phân tích trực tiếp nội dung web html trở nên rất đơn giản.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION