Web Scraper Java

Web Scraping jest również nazywany zbieraniem danych, zbieraniem sieci lub indeksowaniem sieci, które służy do wydobywania danych ze stron internetowych. Skrobak sieciowy może wykorzystywać różne podejścia do wydobywania informacji. Na przykład XPath, selektory CSS, niestandardowe filtry, nawigacja HTML itp. Zgodnie z takimi scenariuszami, w tym artykule opisano, jak programowo utworzyć narzędzie do skrobania stron internetowych w Javie.

Konfiguracja biblioteki Web Scraping Java

Aspose.HTML for Java API obsługuje funkcje web scrapingu przy użyciu różnych technik. Możesz po prostu uzyskać dostęp do API, pobierając pliki JAR ze strony Downloads lub użyj następujących konfiguracji Mavena w pliku pom.xml swojego projektu:

Magazyn:

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

Zależność:

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

Skrobanie stron internetowych z nawigacją HTML w Javie

Możesz pracować z klasą Node, aby nawigować po stronach HTML. Poniższy fragment kodu pokazuje, jak poruszać się po dokumencie HTML w Javie:

// Przygotuj kod HTML
String html_code = "<span>Hello</span> <span>World!</span>";

// Zainicjuj dokument z przygotowanego kodu
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(html_code, ".");
try {
    // Uzyskaj odniesienie do pierwszego elementu potomnego (pierwszy SPAN) CIAŁA
    com.aspose.html.dom.Element element = document.getBody().getFirstElementChild();
    System.out.println(element.getTextContent()); // output: Hello

    // Pobierz odwołanie do drugiego elementu SPAN
    element = element.getNextElementSibling();
    System.out.println(element.getTextContent()); // output: World!
} finally {
    if (document != null) {
        document.dispose();
    }
}

Inspekcja dokumentu HTML i jego elementów w Javie

Możesz pracować z metodą przechodzenia elementów, aby poruszać się po stronach HTML. Poniższy przykładowy kod wyjaśnia, jak sprawdzać dokumenty HTML w Javie.

// Załaduj dokument z pliku
String documentPath = "html_file.html";
var document = new com.aspose.html.HTMLDocument(documentPath);
{
    // Pobierz element HTML dokumentu
    var element = document.getDocumentElement();                
    System.out.println(element.getTagName()); // HTML
    
    // Pobierz ostatni element elementu HTML
    element = element.getLastElementChild();
    System.out.println(element.getTagName()); // BODY
    
    // Pobierz pierwszy element elementu body
    element = element.getFirstElementChild();
    System.out.println(element.getTagName()); // H1
    System.out.println(element.getTextContent()); // Header 1     
}

Niestandardowe użycie filtra dla narzędzia Web Scraper w Javie

Możesz ustawić niestandardowy filtr, aby pomijał lub akceptował określone filtry do pracy ze skrobakiem internetowym w Javie. Poniższy przykładowy kod wyjaśnia, jak pracować z filtrami niestandardowymi lub zdefiniowanymi przez użytkownika w skrobaku internetowym przy użyciu języka Java:

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

    @Override
    public short acceptNode(com.aspose.html.dom.Node n) {
        // Bieżący filtr pomija wszystkie elementy oprócz elementów IMG.
        return "img".equals(n.getLocalName()) ? FILTER_ACCEPT : FILTER_SKIP;
    }

}

Następnie, po skonfigurowaniu niestandardowego filtra, możesz łatwo poruszać się po stronie HTML, korzystając z poniższego fragmentu kodu:

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

// Zainicjuj dokument na podstawie przygotowanego kodu
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // Aby rozpocząć nawigację HTML, musimy utworzyć instancję TreeWalker.
    // Podane parametry oznaczają, że zaczyna chodzić od korzenia dokumentu, iterując wszystkie węzły i korzysta z naszej niestandardowej implementacji filtra
    com.aspose.html.dom.traversal.ITreeWalker iterator = document.createTreeWalker(document, com.aspose.html.dom.traversal.filters.NodeFilter.SHOW_ALL, new OnlyImageFilter());
    // Posługiwać się
    while (iterator.nextNode() != null) {
        // Ponieważ używamy własnego filtra, bieżący węzeł zawsze będzie instancją elementu HTMLImageElement.
        // Nie potrzebujemy tutaj dodatkowych walidacji.
        com.aspose.html.HTMLImageElement image = (com.aspose.html.HTMLImageElement) iterator.getCurrentNode();

        System.out.println(image.getSrc());
        // wyjście: obraz1.png
        // wyjście: image2.png
    }
} finally {
    if (document != null) {
        document.dispose();
    }
}

Web Scraping przy użyciu XPath Query w Javie

Możesz wybrać różne węzły dokumentu HTML według różnych kryteriów, używając XPath. Poniższy kod demonstruje, jak wykonać skrobanie sieci za pomocą XPath Query w Javie:

// Przygotuj kod 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";

// Zainicjuj dokument na podstawie przygotowanego kodu
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // Tutaj oceniamy wyrażenie XPath, w którym wybieramy wszystkie podrzędne elementy SPAN spośród elementów, których atrybut „class” jest równy „happy”:
    com.aspose.html.dom.xpath.IXPathResult result = document.evaluate("//*[@class='happy']//span",
            document,
            null,
            com.aspose.html.dom.xpath.XPathResultType.Any,
            null
    );

    // Iteruj po wynikowych węzłach
   for (com.aspose.html.dom.Node node; (node = result.iterateNext()) != null; ) {
        System.out.println(node.getTextContent());
        // wyjście: Witam
        // wyjście: Świat!
    }
} finally {
    if (document != null) {
        document.dispose();
    }
}

Skrobanie stron internetowych za pomocą selektora CSS w Javie

Możesz wyszukać potrzebne elementy w web scraperze za pomocą selektora CSS. Możesz określić parametr jako selektor zapytania, a następnie lista pasujących do selektora zostanie zwrócona do narzędzia Web Scraper. Poniższy przykładowy kod pokazuje, jak używać selektora CSS w skrobaku internetowym przy użyciu Javy:

// Przygotuj kod 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";

// Zainicjuj dokument na podstawie przygotowanego kodu
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // Tutaj tworzymy selektor CSS, który wyodrębnia wszystkie elementy, których atrybut „class” jest równy „happy” i ich elementy potomne SPAN
    com.aspose.html.collections.NodeList elements = document.querySelectorAll(".happy span");

    // Iteruj po wynikowej liście elementów
    elements.forEach(element -> {
        System.out.println(((com.aspose.html.HTMLElement) element).getInnerHTML());
        // wyjście: Witam
        // wyjście: Świat!
    });
} finally {
    if (document != null) {
        document.dispose();
    }
}

Wniosek

W tym artykule zbadałeś różne metody, których można użyć do stworzenia skrobaka sieciowego w Javie. Wystarczy wykonać kilka wywołań API przy użyciu biblioteki Aspose.HTML for Java, aby stworzyć web scraper w Javie. W tym artykule możesz zapoznać się z technikami nawigacji HTML, selektora CSS, filtra niestandardowego i zapytań XPath. Ponadto, jeśli potrzebujesz dodatkowych informacji lub pomocy, skontaktuj się z nami za pośrednictwem forum.

Zobacz też

Konwertuj EPUB na XPS w Javie