WebClient クラスのDownload***メソッドは、インターネットからファイルや画像などのリソースを読み込み、すべてのデータをバイト配列に格納するまでの処理をメソッドが行ってくれます。 そのため、短いコードで、インターネット上の情報を取得することができます。
C#でインターネットの情報を取得してい場合のほとんどは、Webページから必要な情報を入手し、それをアプリケーションの中で利用することです。 Webページから必要な情報を集める作業をウェブスクレイピング、あるいは、単にスクレイピングと呼びます。そのためには、Webページからページのコードを取得する必要があります。
DownloadStringメソッドを使用する
次のコードは、指定したURLのコードをコンソールに表示します。
using System;
using System.Net;
using System.Text;
namespace GetWebsite01
{
class Program
{
static void Main(string[] args)
{
try
{
string html;
// 読み込むページのURL
string url = @"https://vdlz.xyz/";
using (var wc = new WebClient())
{
wc.Encoding = Encoding.UTF8;
html = wc.DownloadString(url);
}
Console.WriteLine(html);
}
catch(Exception e)
{
// Let the user know what went wrong.
// ユーザーに、何が問題になったのかを知らせます。
// The file could not be read:
Console.WriteLine("指定されたサイトを読み取れませんでした:");
Console.WriteLine(e.Message);
}
// Keep the console window open in debug mode.
// デバッグモードで、コンソール・ウインドウを開いた状態に維持します。
System.Console.WriteLine("何かキーを押すと終了します。");
System.Console.ReadKey();
}
}
}
実行結果
URLで指定したサイトのコードが表示されます。
このコードで、指定したサイトのコードが取得できるようになりました。取得したテキストの中から、正規表現などを使用し必要な情報を取得すると、プログラムで取得した情報を活用することができます。
Webページのコードを取得し、そのコードから情報を集める目的で、アプリケーションから、Webページを取得する場合には、この方法を用いると便利です。
ユーザー・エージェント・ヘッダを送信する
ユーザー・エージェント・ヘッダは、サーバー側が、ユーザーがどのブラウザやOSを利用しているか確認するための仕組みです。サーバー側で、ユーザー・エージェント・ヘッダを確認し、送信するコードを変更している場合は、ユーザー・エージェント・ヘッダを送信しないと、データが取得できないことがあるそうです。 ユーザー・エージェント・ヘッダを追加するには、複雑な操作は必要ありません。ヘッダプロパティに、ユーザーエージェントを示す文字列を追加します。
先程のコードに、1行追加しただけです。
using System;
using System.Net;
using System.Text;
namespace GetWebsite01
{
class Program
{
static void Main(string[] args)
{
try
{
string html;
// 読み込むページのURL
string url = @"https://vdlz.xyz/";
using (var wc = new WebClient())
{
// ユーザーエージェント文字列をHeaders プロパティに追加する
wc.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
wc.Encoding = Encoding.UTF8;
html = wc.DownloadString(url);
}
Console.WriteLine(html);
}
catch(Exception e)
{
// Let the user know what went wrong.
// ユーザーに、何が問題になったのかを知らせます。
// The file could not be read:
Console.WriteLine("指定されたサイトを読み取れませんでした:");
Console.WriteLine(e.Message);
}
// Keep the console window open in debug mode.
// デバッグモードで、コンソール・ウインドウを開いた状態に維持します。
System.Console.WriteLine("何かキーを押すと終了します。");
System.Console.ReadKey();
}
}
}
ユーザーエージェントを示す文字列は、ブラウザことに異なります。現在使用しているブラウザのユーザーエージェントを確認するには、ユーザーエージェント確認するサイトにアクセスします。
使っているブラウザのユーザーエージェントを確認できるサイト
User-Agentとは、クライアントはサーバーにリクエストを送る際に、サーバーに連絡する情報のことです。
HTTPではUser-Agentヘッダーが定義されている。 クライアントはサーバーにリクエストを送る際に、ユーザーエージェントの情報をUser-Agentヘッダーとして送信します。 User-Agentヘッダーには、アプリケーション名、バージョン、ホストオペレーティングシステムや言語といった情報が含まれます。
サーバーは、その情報を参考に、ユーザーが、使用しているブラウザに合わせた情報を提供することができます。
現在、使用しているブラウザの、User-Agentを確認するためには、User-Agentを確認するためのサービスを利用することで確認することができます。