Web Kazıyıcı Java

Web Scraping, web sayfalarından veri çıkarmak için kullanılan veri kazıma, web toplama veya web taraması olarak da adlandırılır. Bir web kazıyıcı, bilgi çıkarmak için farklı yaklaşımlar kullanabilir. Örneğin, XPath, CSS seçiciler, özel filtreler, HTML gezintisi vb. Bu tür senaryolara uygun olarak, bu makale Java’da programlı olarak bir web kazıyıcının nasıl oluşturulacağını kapsar.

Java Web Kazıma Kitaplığı Yapılandırması

Aspose.HTML for Java API desteği, farklı teknikler kullanan web kazıma özellikleri sunar. İndirilenler sayfasından JAR dosyalarını indirerek veya projenizin pom.xml dosyasında aşağıdaki Maven yapılandırmalarını kullanarak API’ye kolayca erişebilirsiniz:

Depo:

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

Bağımlılık:

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

Java’da HTML Gezinme ile Web Scraping

HTML sayfalarında gezinmek için Node sınıfı ile çalışabilirsiniz. Aşağıdaki kod parçacığı, Java’da bir HTML belgesinde nasıl gezinileceğini gösterir:

// Bir HTML kodu hazırlayın
String html_code = "<span>Hello</span> <span>World!</span>";

// Hazırlanan koddan bir belge başlat
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(html_code, ".");
try {
    // BODY'nin ilk çocuğuna (ilk SPAN) referans alın
    com.aspose.html.dom.Element element = document.getBody().getFirstElementChild();
    System.out.println(element.getTextContent()); // output: Hello

    // İkinci SPAN öğesinin referansını alın
    element = element.getNextElementSibling();
    System.out.println(element.getTextContent()); // output: World!
} finally {
    if (document != null) {
        document.dispose();
    }
}

HTML Belgesinin ve Öğelerinin Java’da İncelenmesi

HTML sayfalarında gezinmek için element traversal yöntemiyle çalışabilirsiniz. Aşağıdaki kod örneği, Java’da HTML belgelerinin nasıl denetleneceğini ayrıntılı olarak açıklamaktadır.

// Bir dosyadan belge yükleme
String documentPath = "html_file.html";
var document = new com.aspose.html.HTMLDocument(documentPath);
{
    // Belgenin html öğesini alın
    var element = document.getDocumentElement();                
    System.out.println(element.getTagName()); // HTML
    
    // Html öğesinin son öğesini alın
    element = element.getLastElementChild();
    System.out.println(element.getTagName()); // BODY
    
    // Gövde öğesinin ilk öğesini alın
    element = element.getFirstElementChild();
    System.out.println(element.getTagName()); // H1
    System.out.println(element.getTextContent()); // Header 1     
}

Java’da Web Kazıyıcı için Özel Filtre Kullanımı

Java’daki web kazıyıcıyla çalışmak üzere belirli filtreleri atlamak veya kabul etmek için özel bir filtre ayarlayabilirsiniz. Aşağıdaki kod örneği, Java kullanarak bir web kazıyıcıda özel veya kullanıcı tanımlı filtrelerle nasıl çalışılacağını ayrıntılı olarak açıklamaktadır:

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

    @Override
    public short acceptNode(com.aspose.html.dom.Node n) {
        // Geçerli filtre, IMG öğeleri dışındaki tüm öğeleri atlar.
        return "img".equals(n.getLocalName()) ? FILTER_ACCEPT : FILTER_SKIP;
    }

}

Ardından, özel bir filtre ayarladıktan sonra, aşağıdaki kod parçacığını kullanarak bir HTML sayfasında kolayca gezinebilirsiniz:

// Bir HTML kodu hazırlayın
String code = "    < p > Hello </p >\n" +
              "    <img src = 'image1.png' >\n" +
              "    <img src = 'image2.png' >\n" +
              "    <p > World ! </p >\n";

// Hazırlanan koda dayalı olarak bir belgeyi başlatın
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // HTML gezintisini başlatmak için bir TreeWalker örneği oluşturmamız gerekiyor.
    // Belirtilen parametreler, belgenin kökünden yürümeye başladığı, tüm düğümleri yinelediği ve özel filtre uygulamamızı kullandığı anlamına gelir.
    com.aspose.html.dom.traversal.ITreeWalker iterator = document.createTreeWalker(document, com.aspose.html.dom.traversal.filters.NodeFilter.SHOW_ALL, new OnlyImageFilter());
    // Kullanmak
    while (iterator.nextNode() != null) {
        // Kendi filtremizi kullandığımız için geçerli düğüm her zaman HTMLImageElement'in bir örneği olacaktır.
        // Dolayısıyla, burada ek doğrulamalara ihtiyacımız yok.
        com.aspose.html.HTMLImageElement image = (com.aspose.html.HTMLImageElement) iterator.getCurrentNode();

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

Java’da XPath Query kullanarak Web Scraping

XPath kullanarak bir HTML belgesinin farklı düğümlerini farklı ölçütlere göre seçebilirsiniz. Aşağıdaki kod, Java’da XPath Query kullanılarak web scraping’in nasıl gerçekleştirileceğini gösterir:

// Bir HTML kodu hazırlayın
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";

// Hazırlanan koda dayalı olarak bir belgeyi başlatın
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // Burada, 'class' özniteliği 'happy' değerine eşit olan öğelerden tüm alt SPAN öğelerini seçtiğimiz XPath ifadesini değerlendiriyoruz:
    com.aspose.html.dom.xpath.IXPathResult result = document.evaluate("//*[@class='happy']//span",
            document,
            null,
            com.aspose.html.dom.xpath.XPathResultType.Any,
            null
    );

    // Ortaya çıkan düğümler üzerinde yineleme yapın
   for (com.aspose.html.dom.Node node; (node = result.iterateNext()) != null; ) {
        System.out.println(node.getTextContent());
        // çıktı: merhaba
        // çıktı: Dünya!
    }
} finally {
    if (document != null) {
        document.dispose();
    }
}

Java’da CSS Seçici ile Web Scraping

CSS seçiciyi kullanarak gerekli öğeleri bir web kazıyıcıda arayabilirsiniz. Bir parametreyi sorgu seçici olarak belirtebilirsiniz ve ardından seçiciyle eşleşen bir liste web kazıyıcıya döndürülür. Aşağıdaki kod örneği, Java kullanarak bir web kazıyıcıda CSS seçicinin nasıl kullanılacağını gösterir:

// Bir HTML kodu hazırlayın
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";

// Hazırlanan koda dayalı olarak bir belge başlatın
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // Burada, 'class' özniteliği 'happy' değerine eşit olan tüm öğeleri ve bunların alt SPAN öğelerini ayıklayan bir CSS Seçici oluşturuyoruz.
    com.aspose.html.collections.NodeList elements = document.querySelectorAll(".happy span");

    // Ortaya çıkan öğe listesi üzerinde yineleme yapın
    elements.forEach(element -> {
        System.out.println(((com.aspose.html.HTMLElement) element).getInnerHTML());
        // çıktı: merhaba
        // çıktı: Dünya!
    });
} finally {
    if (document != null) {
        document.dispose();
    }
}

Çözüm

Bu makalede, Java’da bir web kazıyıcı oluşturmak için kullanılabilecek farklı yöntemleri incelediniz. Java’da bir web kazıyıcı oluşturmak için Aspose.HTML for Java kitaplığını kullanarak yalnızca birkaç API çağrısı yapmanız yeterlidir. Bu makalede HTML Gezintisi, CSS Seçici, Özel filtre ve XPath Sorgusu tekniklerini keşfedebilirsiniz. Ayrıca, daha fazla bilgiye veya yardıma ihtiyacınız olursa lütfen forum aracılığıyla bizimle iletişime geçmekten çekinmeyin.

Ayrıca bakınız

Java’da EPUB’u XPS’ye dönüştürün