C#では、多くの関連するクラスが用意されているので、目的にあったクラスやライブラリの存在と使い方を知っていれば、すくないコードで、高機能なアプリケーションを作成できます。
Wedサイトに関連するアプリケーションを作成する場合、すでに存在するクラスやクラスライブラリの存在や使い方を知っていることがポイントになります。
この異なる目的を実現する手段が、混ざった状態で同じように表現されていることが多いので、情報を集める際、混乱しないように注意しましょう。
C#で、インターネット関連技術を使用するには、サーバー上で動作するアプリケーション開発を目的に提供されているASP.netやASP.net.Coreの方が、向いていると思います。
しかし、.net環境も十分んみ使いこなせていない状況で、.netに加えて、新たな開発プラットホームの情報を集めるのは、結構大きな意識的な障壁があります。
.net環境で利用できるWeb関連クラスについてまとめてみようと思います。
C#で作成する、Webサイトに関連するプログラム
C#で作成する、Webサイトに関連するプログラムには、以下のようなものがあります。
- htmlを表示するWebブラウザ
- Webサイトからデータを取得する(Webスクレイピング)
- ftpで、サーバーとデータのやり取りを行う
- Eメールを送受信する
これらの用途に加えて、WPF以降のxamlでUIを表記する開発環境では、ブラウザ上で、UIに描くページ・アプリケーションを作成する際にも関連するかもしれません。
- ページ・アプリケーション
Webサイトのデータを取得する
Webサイトのデータは、html(Hyper Text Markup Language) とDOM (Document Object Model) の二種類あると考える必要があります。
- 静的サイト(html)
- 動的サイト(DOM)
動的サイトから情報を取得するには、パーサーと呼ばれるスクレイピング・ライブラリを使う方法が一般的なようですが、使い方について知る方法が探しにくいという問題があります。また、スクレイピングとは、Webサイトからデータを取得する操作のことを言います。
C#で使えるWebサイトを表示するクラス
Webブラウザは、頻繁に進化しているため、Webサイトを表示するクラスも、それに応じて、新しいクラスが提供されるため、Webサイトを表示するクラスは複数存在します。
一番あたらしいクラスは、Windows Community Toolkit v3.0に含まれているWebViewコントロール です。
- WebViewコントロール (Windows Community Toolkit v3.0に含まれている)
- HttpClientクラス(System.Net.Http名前空間).NET Framework 4.5以降
動的サイトにリクエストを送信し、結果として得られるドキュメントを取得することができます。もちろん、静的サイトを取得することもできます。
- WebRequest クラス(System.Net名前空間)
プリミティブな(原始的で細かな操作が必要な)クラス。動的サイトへのアクセスも可能だが、コードが多く複雑になる傾向があるらしい。
- WebClientクラス(System.Net名前空間)※新規開発への使用は非推奨
理解しやすいが、静的サイトしか扱えない(このクラスで動的サイトを扱う方法は知らない)。
- WebBrowserクラス
WebBrowserクラスは、プログラム中で、Webサイトを表示することができます。そのため、Formに対応したもの、WPFに対応したものの2種類が存在し、別の名前空間の別のコントロールであることに注意が必要です。htmlデータをブラウザのように表示することができます。
- (System.Windows.Controls名前空間(WPF)) .NET Framework 3.5 sp1以降
現行のWebサイトでは、Javascriptが使われているとエラーが発生するので、使用は避けたが方が無難です。
- (System.Windows.Forms名前空間(Form)) .NET Framework 2.0以降
動的に生成されたWebページのドキュメントが取得できるため、使用されることがあります(おそらく、32bit環境のみ)。現在では、HttpClientクラスやパーサーを使用したほうが良いと思います。
- (System.Windows.Controls名前空間(WPF)) .NET Framework 3.5 sp1以降
C#から使えるパーサー
C#から使えるパーサーには、以下のものがあります。(他にもあると思います)
AngleSharpドキュメントの和訳
Webブラウザを操作する
C#側でWebサイトからデータを取得する方法の他に、C#をWebブラウザを操作する方法があります。以前は、複数のライブラリが存在しましたが、この記事を書いている時点では、Seleniumが有力なようです。
VBAを使って、Internet Explorerを操作する(
VBAを使って、Internet Explorer(開発終了)を操作する方法についての書籍が存在します。
HTMLをxamlに変換するツール
htmlで記述されたページをxamlに変換して、WPF上でホームページを表示する考えのもとに考えられた変換プログラムです。
Visual Studioには、HTML(Webフォーム)エディタが、存在するので、かなり的確にHTMLをxamlに変換するツールキットが存在するとが推測されます。しかし、公開されているのか、どこにあるかは知りません。
静的サイトのHTMLテキストから、必要な文字列を取り出す正規表現を検討するときに便利なプログラム
正規表現を使用すると、HTMLテキストから、目的の文字列を効率的に取り出すことができます。
しかし、使用する正規表現文字列は、自分で考え、想定通りに動作するか、確認する必要があります。
その作業をするためのサンプルアプリケーションです。
URLを指定して静的サイトのHTMLテキストを取得し(動的サイトには対応していません)、正規表現文字列を使って必要な文字列取り出すアプリケーションを作成します。 HTMLてキストから、必要な文字列を取り出すための正規表現文字列を探し出す際に活用することができます。デフォルトでは、aタグ全体を取り出します。
URLを指定して静的サイトのHTMLテキストを取得し(動的サイトには対応していません)、正規表現文字列を使って必要な文字列取り出すアプリケーションを作成します。 HTMLてキストから、必要な文字列を取り出すための正規表現文字列を探し出す際に活用することができます。このアプリケーションでは、完全一致に加えて、部分一致も使用できます。デフォルトでは、aタグ全体(完全一致)、aタグのhref属性(部分一致)を取り出します。