Web Scraper Java

Web Scraping se také nazývá škrábání dat, sklizeň webu nebo procházení webu, které se používá k extrahování dat z webových stránek. Webový škrabák může používat různé přístupy k extrakci informací. Například XPath, selektory CSS, vlastní filtry, navigace HTML atd. V souladu s takovými scénáři tento článek popisuje, jak programově vytvořit webový škrabák v Javě.

Konfigurace knihovny Java Web Scraping

Aspose.HTML for Java Podpora rozhraní API nabízí funkce stírání webu pomocí různých technik. K API můžete jednoduše přistupovat stažením souborů JAR ze stránky Stahování nebo použitím následujících konfigurací Maven v souboru pom.xml vašeho projektu:

úložiště:

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

Závislost:

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

Web Scraping s HTML navigací v Javě

Chcete-li procházet stránky HTML, můžete pracovat s třídou Node. Níže uvedený fragment kódu ukazuje, jak se pohybovat v dokumentu HTML v jazyce Java:

// Připravte si HTML kód
String html_code = "<span>Hello</span> <span>World!</span>";

// Inicializujte dokument z připraveného kódu
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(html_code, ".");
try {
    // Získejte odkaz na prvního potomka (první SPAN) TĚLA
    com.aspose.html.dom.Element element = document.getBody().getFirstElementChild();
    System.out.println(element.getTextContent()); // output: Hello

    // Získejte odkaz na druhý prvek SPAN
    element = element.getNextElementSibling();
    System.out.println(element.getTextContent()); // output: World!
} finally {
    if (document != null) {
        document.dispose();
    }
}

Kontrola HTML dokumentu a jeho prvků v Javě

Pro navigaci po stránkách HTML můžete pracovat s metodou procházení prvků. Níže uvedená ukázka kódu vysvětluje, jak kontrolovat HTML dokumenty v Javě.

// Načtěte dokument ze souboru
String documentPath = "html_file.html";
var document = new com.aspose.html.HTMLDocument(documentPath);
{
    // Získejte html prvek dokumentu
    var element = document.getDocumentElement();                
    System.out.println(element.getTagName()); // HTML
    
    // Získejte poslední prvek prvku html
    element = element.getLastElementChild();
    System.out.println(element.getTagName()); // BODY
    
    // Získejte první prvek prvku těla
    element = element.getFirstElementChild();
    System.out.println(element.getTagName()); // H1
    System.out.println(element.getTextContent()); // Header 1     
}

Použití vlastního filtru pro Web Scraper v Javě

Můžete nastavit vlastní filtr pro přeskočení nebo přijetí konkrétních filtrů pro práci s webovou škrabkou v Javě. Níže uvedená ukázka kódu vysvětluje, jak pracovat s vlastními nebo uživatelem definovanými filtry ve webovém škrabáku pomocí Java:

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

    @Override
    public short acceptNode(com.aspose.html.dom.Node n) {
        // Aktuální filtr přeskočí všechny prvky kromě prvků IMG.
        return "img".equals(n.getLocalName()) ? FILTER_ACCEPT : FILTER_SKIP;
    }

}

Následně, po nastavení vlastního filtru, můžete snadno procházet stránkou HTML pomocí fragmentu kódu níže:

// Připravte si HTML kód
String code = "    < p > Hello </p >\n" +
              "    <img src = 'image1.png' >\n" +
              "    <img src = 'image2.png' >\n" +
              "    <p > World ! </p >\n";

// Inicializujte dokument na základě připraveného kódu
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // Pro spuštění HTML navigace potřebujeme vytvořit instanci TreeWalker.
    // Zadané parametry znamenají, že začne chodit z kořenového adresáře dokumentu, iteruje všechny uzly a použije naši vlastní implementaci filtru
    com.aspose.html.dom.traversal.ITreeWalker iterator = document.createTreeWalker(document, com.aspose.html.dom.traversal.filters.NodeFilter.SHOW_ALL, new OnlyImageFilter());
    // Použití
    while (iterator.nextNode() != null) {
        // Protože používáme vlastní filtr, aktuální uzel bude vždy instancí HTMLImageElement.
        // Zde tedy nepotřebujeme další ověření.
        com.aspose.html.HTMLImageElement image = (com.aspose.html.HTMLImageElement) iterator.getCurrentNode();

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

Web Scraping pomocí XPath Query v Javě

Pomocí XPath můžete vybrat různé uzly dokumentu HTML podle různých kritérií. Níže uvedený kód ukazuje, jak provádět stírání webu pomocí XPath Query v Javě:

// Připravte si HTML kód
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";

// Inicializujte dokument na základě připraveného kódu
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // Zde vyhodnotíme výraz XPath, kde vybereme všechny podřízené prvky SPAN z prvků, jejichž atribut 'class' se rovná 'happy':
    com.aspose.html.dom.xpath.IXPathResult result = document.evaluate("//*[@class='happy']//span",
            document,
            null,
            com.aspose.html.dom.xpath.XPathResultType.Any,
            null
    );

    // Iterujte přes výsledné uzly
   for (com.aspose.html.dom.Node node; (node = result.iterateNext()) != null; ) {
        System.out.println(node.getTextContent());
        // výstup: Dobrý den
        // výstup: Svět!
    }
} finally {
    if (document != null) {
        document.dispose();
    }
}

Web Scraping pomocí CSS Selector v Javě

Potřebné položky můžete vyhledávat ve webovém škrabáku pomocí selektoru CSS. Můžete zadat parametr jako selektor dotazu a potom se do webového škrabáku vrátí seznam odpovídajících selektoru. Následující ukázka kódu ukazuje, jak používat selektor CSS ve webovém škrabáku pomocí Java:

// Připravte si HTML kód
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";

// Inicializujte dokument na základě připraveného kódu
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // Zde vytvoříme selektor CSS, který extrahuje všechny prvky, jejichž atribut 'class' se rovná 'happy' a jejich podřízené prvky SPAN
    com.aspose.html.collections.NodeList elements = document.querySelectorAll(".happy span");

    // Iterujte výsledný seznam prvků
    elements.forEach(element -> {
        System.out.println(((com.aspose.html.HTMLElement) element).getInnerHTML());
        // výstup: Dobrý den
        // výstup: Svět!
    });
} finally {
    if (document != null) {
        document.dispose();
    }
}

Závěr

V tomto článku jste prozkoumali různé metody, které lze použít k vytvoření webového škrabáku v Javě. K vytvoření webového škrabáku v Javě stačí provést několik volání API pomocí knihovny Aspose.HTML for Java. V tomto článku můžete prozkoumat techniky HTML Navigation, CSS Selector, Custom filter a XPath Query. Kromě toho nás neváhejte kontaktovat prostřednictvím fóra, pokud potřebujete další informace nebo pomoc.

Viz také

Převést EPUB na XPS v Javě