WebスクレイパーJava

Webスクレイピングは、データスクレイピング、Webハーベスティング、またはWebクロールとも呼ばれ、Webページからデータを抽出するために使用されます。 Webスクレイパーは、さまざまなアプローチを使用して情報を抽出できます。たとえば、XPath、CSSセレクター、カスタムフィルター、HTMLナビゲーションなどです。このようなシナリオに従って、この記事では、JavaでプログラムでWebスクレイパーを作成する方法について説明します。

JavaWebスクレイピングライブラリの構成

Aspose.HTML for Java APIサポートは、さまざまな手法を使用したWebスクレイピング機能を提供します。 ダウンロードページからJARファイルをダウンロードするか、プロジェクトのpom.xmlファイルで次のMaven構成を使用することで、APIに簡単にアクセスできます。

リポジトリ:

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

依存:

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

JavaでのHTMLナビゲーションによるWebスクレイピング

Nodeクラスを操作して、HTMLページをナビゲートできます。以下のコードスニペットは、JavaでHTMLドキュメントをナビゲートする方法を示しています。

// HTMLコードを準備する
String html_code = "<span>Hello</span> <span>World!</span>";

// 準備したコードからドキュメントを初期化します
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(html_code, ".");
try {
    // BODYの最初の子(最初のSPAN)への参照を取得します
    com.aspose.html.dom.Element element = document.getBody().getFirstElementChild();
    System.out.println(element.getTextContent()); // output: Hello

    // 2番目のSPAN要素への参照を取得します
    element = element.getNextElementSibling();
    System.out.println(element.getTextContent()); // output: World!
} finally {
    if (document != null) {
        document.dispose();
    }
}

JavaでのHTMLドキュメントとその要素の検査

要素トラバーサルメソッドを使用して、HTMLページをナビゲートできます。以下のコードサンプルでは、JavaでHTMLドキュメントを検査する方法について詳しく説明しています。

// ファイルからドキュメントをロードする
String documentPath = "html_file.html";
var document = new com.aspose.html.HTMLDocument(documentPath);
{
    // ドキュメントのhtml要素を取得します
    var element = document.getDocumentElement();                
    System.out.println(element.getTagName()); // HTML
    
    // html要素の最後の要素を取得します
    element = element.getLastElementChild();
    System.out.println(element.getTagName()); // BODY
    
    // body要素の最初の要素を取得します
    element = element.getFirstElementChild();
    System.out.println(element.getTagName()); // H1
    System.out.println(element.getTextContent()); // Header 1     
}

JavaでのWebスクレイパーのカスタムフィルターの使用

カスタムフィルターを設定して、JavaのWebスクレイパーで機能する特定のフィルターをスキップまたは受け入れることができます。以下のコードサンプルでは、Javaを使用してWebスクレイパーでカスタムフィルターまたはユーザー定義フィルターを操作する方法について詳しく説明しています。

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

    @Override
    public short acceptNode(com.aspose.html.dom.Node n) {
        // 現在のフィルターは、IMG要素を除くすべての要素をスキップします。
        return "img".equals(n.getLocalName()) ? FILTER_ACCEPT : FILTER_SKIP;
    }

}

その後、カスタムフィルタを設定した後、以下のコードスニペットを使用してHTMLページを簡単にナビゲートできます。

// HTMLコードを準備する
String code = "    < p > Hello </p >\n" +
              "    <img src = 'image1.png' >\n" +
              "    <img src = 'image2.png' >\n" +
              "    <p > World ! </p >\n";

// 準備したコードに基づいてドキュメントを初期化します
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // HTMLナビゲーションを開始するには、TreeWalkerのインスタンスを作成する必要があります。
    // 指定されたパラメーターは、ドキュメントのルートからウォークを開始し、すべてのノードを繰り返し、フィルターのカスタム実装を使用することを意味します
    com.aspose.html.dom.traversal.ITreeWalker iterator = document.createTreeWalker(document, com.aspose.html.dom.traversal.filters.NodeFilter.SHOW_ALL, new OnlyImageFilter());
    // 使用する
    while (iterator.nextNode() != null) {
        // 独自のフィルターを使用しているため、現在のノードは常にHTMLImageElementのインスタンスになります。
        // したがって、ここで追加の検証は必要ありません。
        com.aspose.html.HTMLImageElement image = (com.aspose.html.HTMLImageElement) iterator.getCurrentNode();

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

JavaでXPathクエリを使用したWebスクレイピング

XPathを使用して、さまざまな基準でHTMLドキュメントのさまざまなノードを選択できます。以下のコードは、JavaでXPathクエリを使用してWebスクレイピングを実行する方法を示しています。

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

// 準備したコードに基づいてドキュメントを初期化します
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // ここでは、「class」属性が「happy」に等しい要素からすべての子SPAN要素を選択するXPath式を評価します。
    com.aspose.html.dom.xpath.IXPathResult result = document.evaluate("//*[@class='happy']//span",
            document,
            null,
            com.aspose.html.dom.xpath.XPathResultType.Any,
            null
    );

    // 結果のノードを反復処理します
    for (com.aspose.html.dom.Node node; (node = result.iterateNext()) != null; ) {
        System.out.println(node.getTextContent());
        // 出力:こんにちは
        // 出力:世界!
    }
} finally {
    if (document != null) {
        document.dispose();
    }
}

JavaでのCSSセレクターによるWebスクレイピング

CSSセレクターを使用して、Webスクレイパーで必要なアイテムを検索できます。パラメータをクエリセレクタとして指定すると、セレクタに一致するリストがWebスクレイパーに返されます。次のコードサンプルは、Javaを使用してWebスクレイパーでCSSセレクターを使用する方法を示しています。

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

// 準備したコードに基づいてドキュメントを初期化します
com.aspose.html.HTMLDocument document = new com.aspose.html.HTMLDocument(code, ".");
try {
    // ここでは、「class」属性が「happy」に等しいすべての要素とその子SPAN要素を抽出するCSSセレクターを作成します。
    com.aspose.html.collections.NodeList elements = document.querySelectorAll(".happy span");

    // 結果の要素のリストを繰り返し処理します
    elements.forEach(element ->{
        System.out.println(((com.aspose.html.HTMLElement) element).getInnerHTML());
        // 出力:こんにちは
        // 出力:世界!
    });
} finally {
    if (document != null) {
        document.dispose();
    }
}

結論

この記事では、JavaでWebスクレイパーを作成するために使用できるさまざまな方法について説明しました。 Aspose.HTML for Javaライブラリを使用していくつかのAPI呼び出しを行うだけで、JavaでWebスクレイパーを作成できます。この記事では、HTMLナビゲーション、CSSセレクター、カスタムフィルター、およびXPathクエリの手法について説明します。さらに、さらに詳しい情報やサポートが必要な場合は、フォーラムからお気軽にご連絡ください。

関連項目

JavaでEPUBをXPSに変換