C# + Html Agility Pack でできること:HTML解析の威力
C#でHTMLを解析する:Html Agility Packの使い方
このチュートリアルでは、Html Agility Packを使ってHTMLを解析する基本的な方法を解説します。
準備
以下の準備が必要です。
- Visual StudioなどのC#開発環境
- Html Agility Pack NuGetパッケージ
- Visual Studioでソリューションを開きます。
- ソリューションエクスプローラーでプロジェクトを右クリックし、「NuGetパッケージの管理」を選択します。
- 検索ボックスに「Html Agility Pack」と入力し、検索結果から「HtmlAgilityPack」を選択します。
- 「インストール」ボタンをクリックして、パッケージをインストールします。
基本的な操作
HTMLの読み込み
// HtmlAgilityPack.dllへの参照を追加する必要があります
using HtmlAgilityPack;
// HTMLファイルを読み込む
HtmlDocument doc = new HtmlDocument();
doc.Load("index.html");
要素の取得
// HTML要素を取得する
HtmlNode node = doc.DocumentNode.SelectSingleNode("//div[@class='main-content']");
// 要素のテキストを取得する
string text = node.InnerText;
// 子要素を取得する
foreach (HtmlNode child in node.ChildNodes)
{
// 子要素の処理
}
属性の取得
// 属性を取得する
string href = node.Attributes["href"].Value;
XPathの利用
// XPathを使って要素を取得する
HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//a[@href='https://www.example.com/']");
// 各要素の処理
foreach (HtmlNode node in nodes)
{
// 処理
}
その他
Html Agility Packは、上記以外にも多くの機能を提供しています。 詳細については、公式ドキュメントを参照してください。
まとめ
Html Agility Packは、C#でHTMLを解析するための強力なツールです。 このチュートリアルを参考に、ぜひHtml Agility Packを使ってHTML解析に挑戦してみてください。
// C# + Html Agility Pack で基本的なことを少し触ってみる - Qiita
// https://qiita.com/tabizou/items/076139d61304418175be
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using HtmlAgilityPack;
namespace HtmlAgilityPackSample
{
class Program
{
static void Main(string[] args)
{
// HTMLファイルを読み込む
HtmlDocument doc = new HtmlDocument();
doc.Load("index.html");
// タイトルを取得する
string title = doc.DocumentNode.SelectSingleNode("//title").InnerText;
Console.WriteLine("タイトル:" + title);
// 記事のリストを取得する
HtmlNodeCollection nodes = doc.DocumentNode.SelectNodes("//article");
// 記事の各要素を処理する
foreach (HtmlNode node in nodes)
{
// タイトルを取得
string articleTitle = node.SelectSingleNode(".//h2").InnerText;
// 概要を取得
string summary = node.SelectSingleNode(".//p").InnerText;
// 出力
Console.WriteLine("-----------------------");
Console.WriteLine("記事タイトル:" + articleTitle);
Console.WriteLine("概要:" + summary);
}
}
}
}
このコードは、index.html
というファイルを読み込み、以下の処理を実行します。
- タイトルを取得する
- 記事のリストを取得する
- 記事の各要素について、タイトルと概要を取得する
コードを実行すると、以下のような出力が得られます。
タイトル:サンプルページ
-----------------------
記事タイトル:記事 1
概要:これは記事 1 の概要です。
-----------------------
記事タイトル:記事 2
概要:これは記事 2 の概要です。
上記のサンプルコードは、Html Agility Packの基本的な使い方を説明するものです。
より複雑な処理を行う場合は、公式ドキュメントや他のチュートリアルを参照してください。
C#でHTMLを解析する:その他の方法
System.Xml.Linq
.NET Frameworkに標準搭載されているXMLライブラリです。 HTMLはXMLと似ているため、System.Xml.Linq
を使って解析することができます。
メリット
- 軽量で高速
- .NET Frameworkに標準搭載されているため、別途ライブラリをインストールする必要がない
- HTML特有の機能をサポートしていない
- 複雑な解析を行う場合は、コードが冗長になる
AngleSharp
高速で機能豊富なHTMLパーサーライブラリです。
- 高速で、最新のHTML5にも対応
- CSSセレクタを使って要素を簡単に取得できる
- LINQを使って要素を処理できる
- Html Agility Packと比べて、ライブラリのサイズが大きい
- 学習曲線が少し高い
その他のライブラリ
上記以外にも、様々なC#用HTMLパーサーライブラリがあります。
それぞれのライブラリには、それぞれメリットとデメリットがあります。 自分の目的に合ったライブラリを選択することが重要です。
まとめ
C#でHTMLを解析するには、様々な方法があります。 それぞれの方法の特徴を理解し、自分の目的に合った方法を選択することが重要です。
- Html Agility Pack: 軽量で使いやすい。基本的な解析に適している。
- System.Xml.Linq: 軽量で高速。.NET Frameworkに標準搭載されている。
- AngleSharp: 高速で機能豊富。最新のHTML5にも対応。
- その他: それぞれのライブラリに特徴がある。
どの方法を選択する場合でも、公式ドキュメントやチュートリアルを参照して、使い方を理解することが重要です。
c# html html-agility-pack