Pengikis Web Java

Pengikisan Web juga disebut pengikisan data, pemanenan web, atau perayapan web yang digunakan untuk mengekstrak data dari halaman web. Pengikis web dapat menggunakan pendekatan berbeda untuk mengekstrak informasi. Misalnya, XPath, pemilih CSS, filter khusus, navigasi HTML, dll. Sesuai dengan skenario tersebut, artikel ini membahas cara membuat pengikis web secara terprogram di Java.

Konfigurasi Perpustakaan Java Web Scraping

Aspose.HTML for Java Dukungan API menawarkan fitur pengikisan web menggunakan teknik yang berbeda. Anda cukup mengakses API dengan mengunduh file JAR dari halaman Downloads atau menggunakan konfigurasi Maven berikut di file pom.xml proyek Anda:

Gudang:

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

Ketergantungan:

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

Scraping Web dengan Navigasi HTML di Java

Anda dapat bekerja dengan kelas Node untuk menavigasi halaman HTML. Cuplikan kode di bawah ini menunjukkan cara menavigasi dokumen HTML di Java:

// Siapkan kode HTML
String html_code = "<span>Hello</span> <span>World!</span>";

// Inisialisasi dokumen dari kode yang disiapkan
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(html_code, ".");
try {
    // Dapatkan referensi ke anak pertama (SPAN pertama) dari BODY
    com.aspose.html.dom.Element element = document.getBody().getFirstElementChild();
    System.out.println(element.getTextContent()); // output: Hello

    // Dapatkan referensi ke elemen SPAN kedua
    element = element.getNextElementSibling();
    System.out.println(element.getTextContent()); // output: World!
} finally {
    if (document != null) {
        document.dispose();
    }
}

Inspeksi Dokumen HTML dan Elemennya di Java

Anda dapat bekerja dengan metode traversal elemen untuk menavigasi halaman HTML. Contoh kode di bawah ini menjelaskan cara memeriksa dokumen HTML di Java.

// Muat dokumen dari file
String documentPath = "html_file.html";
var document = new com.aspose.html.HTMLDocument(documentPath);
{
    // Dapatkan elemen html dari dokumen tersebut
    var element = document.getDocumentElement();                
    System.out.println(element.getTagName()); // HTML
    
    // Dapatkan elemen terakhir dari elemen html
    element = element.getLastElementChild();
    System.out.println(element.getTagName()); // BODY
    
    // Dapatkan elemen pertama dari elemen tubuh
    element = element.getFirstElementChild();
    System.out.println(element.getTagName()); // H1
    System.out.println(element.getTextContent()); // Header 1     
}

Penggunaan Filter Kustom untuk Scraper Web di Jawa

Anda dapat menyetel filter khusus untuk melewati atau menerima filter tertentu untuk bekerja dengan web scraper di Java. Contoh kode di bawah ini menjelaskan cara bekerja dengan filter khusus atau yang ditentukan pengguna di web scraper menggunakan Java:

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

    @Override
    public short acceptNode(com.aspose.html.dom.Node n) {
        // Filter saat ini melewatkan semua elemen, kecuali elemen IMG.
        return "img".equals(n.getLocalName()) ? FILTER_ACCEPT : FILTER_SKIP;
    }

}

Selanjutnya, setelah menyiapkan filter khusus, Anda dapat dengan mudah menavigasi halaman HTML menggunakan potongan kode di bawah ini:

// Siapkan kode HTML
String code = "    < p > Hello </p >\n" +
              "    <img src = 'image1.png' >\n" +
              "    <img src = 'image2.png' >\n" +
              "    <p > World ! </p >\n";

// Inisialisasi dokumen berdasarkan kode yang disiapkan
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // Untuk memulai navigasi HTML, kita perlu membuat instance TreeWalker.
    // Parameter yang ditentukan berarti mulai berjalan dari akar dokumen, mengulangi semua node dan menggunakan penerapan filter khusus kami
    com.aspose.html.dom.traversal.ITreeWalker iterator = document.createTreeWalker(document, com.aspose.html.dom.traversal.filters.NodeFilter.SHOW_ALL, new OnlyImageFilter());
    // Menggunakan
    while (iterator.nextNode() != null) {
        // Karena kami menggunakan filter kami sendiri, simpul saat ini akan selalu menjadi turunan dari HTMLImageElement.
        // Jadi, kami tidak memerlukan validasi tambahan di sini.
        com.aspose.html.HTMLImageElement image = (com.aspose.html.HTMLImageElement) iterator.getCurrentNode();

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

Pengikisan Web menggunakan Kueri XPath di Java

Anda dapat memilih node yang berbeda dari dokumen HTML dengan kriteria yang berbeda menggunakan XPath. Kode di bawah ini menunjukkan cara melakukan web scraping menggunakan XPath Query di Java:

// Siapkan kode 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";

// Inisialisasi dokumen berdasarkan kode yang disiapkan
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // Di sini kami mengevaluasi ekspresi XPath di mana kami memilih semua elemen anak SPAN dari elemen yang atribut 'class'-nya sama dengan 'happy':
    com.aspose.html.dom.xpath.IXPathResult result = document.evaluate("//*[@class='happy']//span",
            document,
            null,
            com.aspose.html.dom.xpath.XPathResultType.Any,
            null
    );

    // Ulangi node yang dihasilkan
   for (com.aspose.html.dom.Node node; (node = result.iterateNext()) != null; ) {
        System.out.println(node.getTextContent());
        // keluaran: Halo
        // keluaran: Dunia!
    }
} finally {
    if (document != null) {
        document.dispose();
    }
}

Pengikisan Web dengan Pemilih CSS di Java

Anda dapat mencari item yang diperlukan di pengikis web menggunakan pemilih CSS. Anda dapat menentukan parameter sebagai pemilih kueri dan kemudian daftar pemilih yang cocok dikembalikan ke pengikis web. Contoh kode berikut menunjukkan cara menggunakan pemilih CSS di web scraper menggunakan Java:

// Siapkan kode 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";

// Inisialisasi dokumen berdasarkan kode yang disiapkan
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // Di sini kita membuat Pemilih CSS yang mengekstrak semua elemen yang atribut 'kelasnya' sama dengan 'bahagia' dan elemen SPAN anaknya
    com.aspose.html.collections.NodeList elements = document.querySelectorAll(".happy span");

    // Ulangi daftar elemen yang dihasilkan
    elements.forEach(element -> {
        System.out.println(((com.aspose.html.HTMLElement) element).getInnerHTML());
        // keluaran: Halo
        // keluaran: Dunia!
    });
} finally {
    if (document != null) {
        document.dispose();
    }
}

Kesimpulan

Pada artikel ini, Anda telah mempelajari berbagai metode yang dapat digunakan untuk membuat web scraper di Java. Anda hanya perlu melakukan beberapa panggilan API menggunakan library Aspose.HTML for Java untuk membuat web scraper di Java. Anda dapat menjelajahi teknik Navigasi HTML, Pemilih CSS, Filter khusus, dan Kueri XPath di artikel ini. Selanjutnya, jangan ragu untuk menghubungi kami melalui forum jika Anda memerlukan informasi lebih lanjut atau bantuan apa pun.

Lihat juga

Konversikan EPUB ke XPS di Java