WebスクレイパーC#

Webスクレイピングは、Webクロール、Webハーベスティング、またはデータスクレイピングとも呼ばれ、Webサイトからデータを抽出するために使用されます。 Webスクレイパーは、Webページからデータを抽出するために、CSSセレクター、XPath、またはこれらの両方などのさまざまなデータセレクターを使用します。これらのセレクターは両方とも、Webから情報を収集および分析するのに効率的です。この記事では、C#でWebスクレイパーを作成する方法、特にHTMLナビゲーション、XPathクエリ、CSSセレクターに関する情報について説明します。

C#Webスクレイピングライブラリの構成

Aspose.HTML for .NETは、新しいリリースセクションから参照DLLファイルをダウンロードするか、次のNuGetインストールコマンドを実行することで、簡単に構成できるWebスクレイピングライブラリです。 :

PM> Install-Package Aspose.Html

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

Nodeクラスのさまざまなプロパティを使用して、HTMLドキュメントをナビゲートできます。以下のコードスニペットは、C#でHTMLWebページをナビゲートする方法を説明しています。

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

// 準備したコードからドキュメントを初期化します
using (var document = new Aspose.Html.HTMLDocument(html_code, "."))
{
    // BODYの最初の子(最初のSPAN)への参照を取得します
    var element = document.Body.FirstChild;
    Console.WriteLine(element.TextContent); // output: Hello

    // HTML要素間の空白への参照を取得します
    element = element.NextSibling;
    Console.WriteLine(element.TextContent); // output: ' '

    // 2番目のSPAN要素への参照を取得します
    element = element.NextSibling;
    Console.WriteLine(element.TextContent); // output: World!
}

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

APIは、要素トラバーサル機能の一般的な使用法も提供します。次のコードスニペットは、APIのさまざまな要素の詳細な検査を実行する方法を示しています。

//ファイルからドキュメントをロードする
string documentPath = System.IO.Path.Combine(DataDir, "html_file.html");

// ローカルファイルシステムのソースHTMLファイルへのパスを指定します
using (var document = new Aspose.Html.HTMLDocument(documentPath))
{
    // ドキュメントのhtml要素を取得します
    var element = document.DocumentElement;                
    Console.WriteLine(element.TagName); // HTML
    
    // html要素の最後の要素を取得します
    element = element.LastElementChild;
    Console.WriteLine(element.TagName); // BODY
    
    // body要素の最初の要素を取得します
    element = element.FirstElementChild;
    Console.WriteLine(element.TagName); // H1
    Console.WriteLine(element.TextContent); // Header 1     
}

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

ITreeWalkerまたはINodeIteratorインターフェイスオブジェクトとカスタムフィルターの実装を使用して、カスタムフィルターを実装できます。次のコードスニペットは、プロセスに従う方法を説明しています。

class OnlyImageFilter : Aspose.Html.Dom.Traversal.Filters.NodeFilter
{
    public override short AcceptNode(Aspose.Html.Dom.Node n)
    {
        // 現在のフィルターは、IMG要素を除くすべての要素をスキップします。
        return string.Equals("img", n.LocalName)
            ? FILTER_ACCEPT
            : FILTER_SKIP;
    }
}

カスタムフィルターを実装した後、次のコードを使用してWebページをすばやくナビゲートできます。

var code = @"
    <p>Hello</p>
    <img src='image1.png'>
    <img src='image2.png'>
    <p>World!</p>";

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

            System.Console.WriteLine(image.Src);
            // 出力:image1.png
            // 出力:image2.png
        }
    }
}

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

XPathを使用して、HTMLドキュメントからデータを抽出できます。次のコードスニペットは、C#でWebスクレイピングにXPathクエリを使用する方法を詳しく説明しています。

// HTMLコードを準備する
var code = @"
    <div class='happy'>
        <div>
            <span>Hello!</span>
        </div>
    </div>
    <p class='happy'>
        <span>World</span>
    </p>
";

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

    // 結果のノードを反復処理します
    for (Aspose.Html.Dom.Node node; (node = result.IterateNext()) != null;)
    {
        System.Console.WriteLine(node.TextContent);
        // 出力:こんにちは
        // 出力:世界!
    }
}

C#のCSSセレクターを使用したWebスクレイピング

CSS Selectors構文に基づいて、ドキュメントツリー内の要素に一致する検索パターンを作成できます。以下のコードスニペットは、C#でCSSセレクターを使用してWebスクレイピングを実行する方法を説明しています。

// HTMLコードを準備する
var code = @"
    <div class='happy'>
        <div>
            <span>Hello</span>
        </div>
    </div>
    <p class='happy'>
        <span>World!</span>
    </p>
";

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

    // 結果の要素のリストを繰り返し処理します
    foreach (Aspose.Html.HTMLElement element in elements)
    {
        System.Console.WriteLine(element.InnerHTML);
        // 出力:こんにちは
        // 出力:世界!
    }
}

無料ライセンスを取得する

無料の一時ライセンスをリクエストして、APIを最大限に評価することができます。

結論

この記事では、C#WebスクレイピングライブラリであるAspose.HTML for .NETについて学習しました。このライブラリには、C#でWebスクレイパーを作成するためのいくつかのメソッドが含まれています。 HTMLナビゲーション、XPathクエリ、および要件を達成するためのCSSセレクターメソッドについて説明します。ただし、懸念事項や質問について話し合う必要がある場合は、フォーラムまでご連絡ください。

関連項目