Webスクレイピングは、Webクロール、Webハーベスティング、またはデータスクレイピングとも呼ばれ、Webサイトからデータを抽出するために使用されます。 Webスクレイパーは、Webページからデータを抽出するために、CSSセレクター、XPath、またはこれらの両方などのさまざまなデータセレクターを使用します。これらのセレクターは両方とも、Webから情報を収集および分析するのに効率的です。この記事では、C#でWebスクレイパーを作成する方法、特にHTMLナビゲーション、XPathクエリ、CSSセレクターに関する情報について説明します。
- C#Webスクレイピングライブラリの構成
- C#でのHTMLナビゲーションによるWebスクレイピング
- C#でXPathクエリを使用したWebスクレイピング
- C#のCSSセレクターを使用したWebスクレイピング
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セレクターメソッドについて説明します。ただし、懸念事項や質問について話し合う必要がある場合は、フォーラムまでご連絡ください。