Web Scraper Java

Web Scraping còn được gọi là thu thập dữ liệu, thu thập dữ liệu web hoặc thu thập thông tin web được sử dụng để trích xuất dữ liệu từ các trang web. Người duyệt web có thể sử dụng các cách tiếp cận khác nhau để trích xuất thông tin. Ví dụ: XPath, bộ chọn CSS, bộ lọc tùy chỉnh, điều hướng HTML, v.v. Phù hợp với các trường hợp như vậy, bài viết này trình bày cách tạo trình quét web theo chương trình trong Java.

Cấu hình Thư viện Scraping Java Web

Aspose.HTML for Java API hỗ trợ cung cấp các tính năng duyệt web bằng các kỹ thuật khác nhau. Bạn có thể chỉ cần truy cập API bằng cách tải xuống các tệp JAR từ trang Tải xuống hoặc sử dụng các cấu hình Maven sau trong tệp pom.xml của dự án của bạn:

Kho:

 <repositories>
     <repository>
         <id>snapshots</id>
         <name>repo</name>
         <url>http://repository.aspose.com/repo/</url>
     </repository>
</repositories>

Sự phụ thuộc:

 <dependencies>
    <dependency>
        <groupId>com.aspose</groupId>
        <artifactId>aspose-html</artifactId>
        <version>21.12</version>
        <classifier>jdk17</classifier>
    </dependency>
</dependencies>

Web Scraping với HTML Navigation trong Java

Bạn có thể làm việc với lớp Node để điều hướng các trang HTML. Đoạn mã dưới đây trình bày cách điều hướng tài liệu HTML trong Java:

// Chuẩn bị mã HTML
String html_code = "<span>Hello</span> <span>World!</span>";

// Khởi tạo tài liệu từ mã đã chuẩn bị
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(html_code, ".");
try {
    // Lấy tham chiếu đến con đầu tiên (SPAN đầu tiên) của BODY
    com.aspose.html.dom.Element element = document.getBody().getFirstElementChild();
    System.out.println(element.getTextContent()); // output: Hello

    // Nhận tham chiếu đến phần tử SPAN thứ hai
    element = element.getNextElementSibling();
    System.out.println(element.getTextContent()); // output: World!
} finally {
    if (document != null) {
        document.dispose();
    }
}

Kiểm tra tài liệu HTML và các phần tử của nó trong Java

Bạn có thể làm việc với phương pháp duyệt phần tử để điều hướng các trang HTML. Mẫu mã dưới đây trình bày chi tiết về cách kiểm tra tài liệu HTML trong Java.

// Tải tài liệu từ một tệp
String documentPath = "html_file.html";
var document = new com.aspose.html.HTMLDocument(documentPath);
{
    // Lấy phần tử html của tài liệu
    var element = document.getDocumentElement();                
    System.out.println(element.getTagName()); // HTML
    
    // Lấy phần tử cuối cùng của phần tử html
    element = element.getLastElementChild();
    System.out.println(element.getTagName()); // BODY
    
    // Lấy phần tử đầu tiên của phần tử body
    element = element.getFirstElementChild();
    System.out.println(element.getTagName()); // H1
    System.out.println(element.getTextContent()); // Header 1     
}

Sử dụng bộ lọc tùy chỉnh cho Web Scraper trong Java

Bạn có thể đặt bộ lọc tùy chỉnh để bỏ qua hoặc chấp nhận các bộ lọc cụ thể để hoạt động với trình quét web trong Java. Mẫu mã dưới đây trình bày chi tiết về cách làm việc với các bộ lọc tùy chỉnh hoặc do người dùng xác định trong trình quét web bằng Java:

public class OnlyImageFilter extends com.aspose.html.dom.traversal.filters.NodeFilter {

    @Override
    public short acceptNode(com.aspose.html.dom.Node n) {
        // Bộ lọc hiện tại bỏ qua tất cả các phần tử, ngoại trừ các phần tử IMG.
        return "img".equals(n.getLocalName()) ? FILTER_ACCEPT : FILTER_SKIP;
    }

}

Sau đó, sau khi thiết lập bộ lọc tùy chỉnh, bạn có thể dễ dàng điều hướng trang HTML bằng đoạn mã bên dưới:

// Chuẩn bị mã HTML
String code = "    < p > Hello </p >\n" +
              "    <img src = 'image1.png' >\n" +
              "    <img src = 'image2.png' >\n" +
              "    <p > World ! </p >\n";

// Khởi tạo tài liệu dựa trên mã đã chuẩn bị
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // Để bắt đầu điều hướng HTML, chúng ta cần tạo một phiên bản của TreeWalker.
    // Các tham số được chỉ định có nghĩa là nó bắt đầu đi từ gốc của tài liệu, lặp lại tất cả các nút và sử dụng việc triển khai bộ lọc tùy chỉnh của chúng tôi
    com.aspose.html.dom.traversal.ITreeWalker iterator = document.createTreeWalker(document, com.aspose.html.dom.traversal.filters.NodeFilter.SHOW_ALL, new OnlyImageFilter());
    // Sử dụng
    while (iterator.nextNode() != null) {
        // Vì chúng tôi đang sử dụng bộ lọc của riêng mình, nút hiện tại sẽ luôn là một phiên bản của HTMLImageElement.
        // Vì vậy, chúng tôi không cần xác nhận bổ sung ở đây.
        com.aspose.html.HTMLImageElement image = (com.aspose.html.HTMLImageElement) iterator.getCurrentNode();

        System.out.println(image.getSrc());
        // đầu ra: image1.png
        // đầu ra: image2.png
    }
} finally {
    if (document != null) {
        document.dispose();
    }
}

Web Scraping bằng cách sử dụng XPath Query trong Java

Bạn có thể chọn các nút khác nhau của tài liệu HTML theo các tiêu chí khác nhau bằng XPath. Đoạn mã dưới đây trình bày cách thực hiện thao tác tìm kiếm trên web bằng cách sử dụng Truy vấn XPath trong Java:

// Chuẩn bị mã HTML
String code = "< div class='happy' >\n" +
              "        <div >\n" +
              "            <span > Hello ! </span >\n" +
              "        </div >\n" +
              "    </div >\n" +
              "    <p class='happy' >\n" +
              "        <span > World </span >\n" +
              "    </p >\n";

// Khởi tạo tài liệu dựa trên mã đã chuẩn bị
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // Ở đây chúng tôi đánh giá biểu thức XPath trong đó chúng tôi chọn tất cả các phần tử SPAN con từ các phần tử có thuộc tính 'class' bằng 'happy':
    com.aspose.html.dom.xpath.IXPathResult result = document.evaluate("//*[@class='happy']//span",
            document,
            null,
            com.aspose.html.dom.xpath.XPathResultType.Any,
            null
    );

    // Lặp lại các nút kết quả
   for (com.aspose.html.dom.Node node; (node = result.iterateNext()) != null; ) {
        System.out.println(node.getTextContent());
        // đầu ra: Xin chào
        // đầu ra: Thế giới!
    }
} finally {
    if (document != null) {
        document.dispose();
    }
}

Web Scraping với CSS Selector trong Java

Bạn có thể tìm kiếm các mục cần thiết trong trình duyệt web bằng cách sử dụng công cụ chọn CSS. Bạn có thể chỉ định một tham số làm bộ chọn truy vấn và sau đó danh sách khớp với bộ chọn được trả về trình duyệt web. Mẫu mã sau đây trình bày cách sử dụng bộ chọn CSS trong trình duyệt web bằng Java:

// Chuẩn bị mã HTML
String code = "< div class='happy' >\n" +
              "        <div >\n" +
              "            <span > Hello </span >\n" +
              "        </div >\n" +
              "    </div >\n" +
              "    <p class='happy' >\n" +
              "        <span > World ! </span >\n" +
              "    </p >\n";

// Khởi tạo tài liệu dựa trên mã đã chuẩn bị
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // Ở đây chúng tôi tạo Bộ chọn CSS trích xuất tất cả các phần tử có thuộc tính 'class' bằng 'happy' và các phần tử SPAN con của chúng
    com.aspose.html.collections.NodeList elements = document.querySelectorAll(".happy span");

    // Lặp lại danh sách các phần tử đã kết quả
    elements.forEach(element -> {
        System.out.println(((com.aspose.html.HTMLElement) element).getInnerHTML());
        // đầu ra: Xin chào
        // đầu ra: Thế giới!
    });
} finally {
    if (document != null) {
        document.dispose();
    }
}

Sự kết luận

Trong bài viết này, bạn đã khám phá các phương pháp khác nhau có thể được sử dụng để tạo trình duyệt web trong Java. Bạn chỉ cần thực hiện một vài lệnh gọi API bằng cách sử dụng thư viện Aspose.HTML for Java để tạo trình duyệt web trong Java. Bạn có thể khám phá các kỹ thuật Điều hướng HTML, Bộ chọn CSS, Bộ lọc tùy chỉnh và Truy vấn XPath trong bài viết này. Hơn nữa, vui lòng liên hệ với chúng tôi qua diễn đàn nếu bạn cần thêm thông tin hoặc bất kỳ hỗ trợ nào.

Xem thêm

Chuyển đổi EPUB sang XPS trong Java