Web Scraper Java

Webbskrapning kallas också dataskrapning, webbskörd eller webbcrawlning som används för att extrahera data från webbsidorna. En webbskrapa kan använda olika tillvägagångssätt för att extrahera information. Till exempel XPath, CSS-väljare, anpassade filter, HTML-navigering, etc. I enlighet med sådana scenarier täcker den här artikeln hur man skapar en webbskrapa programmatiskt i Java.

Java Web Scraping Library Configuration

Aspose.HTML for Java API-stöd erbjuder webbskrapningsfunktioner med olika tekniker. Du kan enkelt komma åt API:et genom att ladda ner JAR-filerna från sidan Nedladdningar eller använda följande Maven-konfigurationer i pom.xml-filen för ditt projekt:

Förvar:

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

Beroende:

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

Webbskrapa med HTML-navigering i Java

Du kan arbeta med klassen Node för att navigera i HTML-sidor. Kodavsnittet nedan visar hur man navigerar i ett HTML-dokument i Java:

// Förbered en HTML-kod
String html_code = "<span>Hello</span> <span>World!</span>";

// Initiera ett dokument från den förberedda koden
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(html_code, ".");
try {
    // Hämta referensen till det första barnet (första SPANEN) i BODY
    com.aspose.html.dom.Element element = document.getBody().getFirstElementChild();
    System.out.println(element.getTextContent()); // output: Hello

    // Hämta referensen till det andra SPAN-elementet
    element = element.getNextElementSibling();
    System.out.println(element.getTextContent()); // output: World!
} finally {
    if (document != null) {
        document.dispose();
    }
}

Inspektion av HTML-dokumentet och dess element i Java

Du kan arbeta med elementtraversalmetoden för att navigera på HTML-sidorna. Kodexemplet nedan beskriver hur man inspekterar HTML-dokument i Java.

// Ladda ett dokument från en fil
String documentPath = "html_file.html";
var document = new com.aspose.html.HTMLDocument(documentPath);
{
    // Hämta html-elementet i dokumentet
    var element = document.getDocumentElement();                
    System.out.println(element.getTagName()); // HTML
    
    // Hämta det sista elementet i html-elementet
    element = element.getLastElementChild();
    System.out.println(element.getTagName()); // BODY
    
    // Få det första elementet av kroppselementet
    element = element.getFirstElementChild();
    System.out.println(element.getTagName()); // H1
    System.out.println(element.getTextContent()); // Header 1     
}

Anpassad filteranvändning för Web Scraper i Java

Du kan ställa in ett anpassat filter för att hoppa över eller acceptera specifika filter för att fungera med webbskrapan i Java. Kodexemplet nedan utvecklar hur man arbetar med de anpassade eller användardefinierade filtren i en webbskrapa med Java:

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

    @Override
    public short acceptNode(com.aspose.html.dom.Node n) {
        // Det aktuella filtret hoppar över alla element, utom IMG-element.
        return "img".equals(n.getLocalName()) ? FILTER_ACCEPT : FILTER_SKIP;
    }

}

Därefter, efter att ha ställt in ett anpassat filter, kan du enkelt navigera på en HTML-sida med hjälp av kodavsnittet nedan:

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

// Initiera ett dokument baserat på den förberedda koden
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // För att starta HTML-navigering måste vi skapa en instans av TreeWalker.
    // De angivna parametrarna innebär att den börjar gå från roten av dokumentet, itererar alla noder och använder vår anpassade implementering av filtret
    com.aspose.html.dom.traversal.ITreeWalker iterator = document.createTreeWalker(document, com.aspose.html.dom.traversal.filters.NodeFilter.SHOW_ALL, new OnlyImageFilter());
    // Använda sig av
    while (iterator.nextNode() != null) {
        // Eftersom vi använder vårt eget filter kommer den aktuella noden alltid att vara en instans av HTMLImageElement.
        // Så vi behöver inte de ytterligare valideringarna här.
        com.aspose.html.HTMLImageElement image = (com.aspose.html.HTMLImageElement) iterator.getCurrentNode();

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

Webbskrapa med XPath Query i Java

Du kan välja olika noder i ett HTML-dokument efter olika kriterier med XPath. Koden nedan visar hur man utför webbskrapning med XPath Query i Java:

// Förbered en HTML-kod
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";

// Initiera ett dokument baserat på den förberedda koden
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // Här utvärderar vi XPath-uttrycket där vi väljer alla underordnade SPAN-element från element vars 'class'-attribut är lika med 'happy':
    com.aspose.html.dom.xpath.IXPathResult result = document.evaluate("//*[@class='happy']//span",
            document,
            null,
            com.aspose.html.dom.xpath.XPathResultType.Any,
            null
    );

    // Iterera över de resulterande noderna
   for (com.aspose.html.dom.Node node; (node = result.iterateNext()) != null; ) {
        System.out.println(node.getTextContent());
        // utgång: Hej
        // output: Världen!
    }
} finally {
    if (document != null) {
        document.dispose();
    }
}

Webbskrapa med CSS-väljare i Java

Du kan söka efter de nödvändiga föremålen i en webbskrapa med hjälp av CSS-väljaren. Du kan ange en parameter som en frågeväljare och sedan returneras en lista över matchande väljare till webbskrapan. Följande kodexempel visar hur man använder CSS-väljaren i en webbskrapa med Java:

// Förbered en HTML-kod
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";

// Initiera ett dokument baserat på den förberedda koden
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // Här skapar vi en CSS-väljare som extraherar alla element vars "class"-attribut är lika med "happy" och deras underordnade SPAN-element
    com.aspose.html.collections.NodeList elements = document.querySelectorAll(".happy span");

    // Iterera över den resulterande listan med element
    elements.forEach(element -> {
        System.out.println(((com.aspose.html.HTMLElement) element).getInnerHTML());
        // utgång: Hej
        // output: Världen!
    });
} finally {
    if (document != null) {
        document.dispose();
    }
}

Slutsats

I den här artikeln har du utforskat olika metoder som kan användas för att skapa en webbskrapa i Java. Du behöver bara göra några API-anrop med hjälp av biblioteket Aspose.HTML for Java för att skapa en webbskrapa i Java. Du kan utforska HTML-navigering, CSS-väljare, anpassat filter och XPath-frågeteknik i den här artikeln. Dessutom är du välkommen att kontakta oss via forumet om du behöver ytterligare information eller hjälp.

Se även

Konvertera EPUB till XPS i Java