WebページのHTMLやWebのコンテンツを取得する - WebClient を利用 - C#

C#のアプリからWebのHTMLを取得するコードを紹介します。

概要

アプリからWebのHTMLやコンテンツを取得するには、WebClientを用いると簡単に実現できます。
補足
レスポンスヘッダやリファラCookie等を用いた行動な制御が必要な場合はHttpWebRequestを用います。HttpWebRequestを用いたWebファイルの取得はこちらの記事を参照してください。

プログラムj玲

WindowsFormアプリを作成します。

UI

下図のUIを作成します。ButtonとTextBoxを1つずつ配置します。TextBoxはMultiLinesプロパティをtrueに設定します。

コード

下記のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Net;

namespace HttpConnectionDemo
{
  public partial class FormHttpWebClient : Form
  {
    public FormHttpWebClient()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      WebClient wc = new WebClient();
      try {
        string text = wc.DownloadString("http://www.ipentec.com");
        textBox1.Text += text;
      }
      catch (WebException exc) {
        textBox1.Text += exc.Message;
      }
    }
  }
}

解説

下記のコードで httpでファイルを取得するためのWebClientクラスのインスタンスを作成します。
WebClient wc = new WebClient();

先のコードで作成したWebClientインスタンスのDownloadString()メソッドを呼び出しWebサイトからコンテンツ(HTML)を取得します。DownloadString()メソッドの第一引数にはアクセス先のURLを与えます。取得したコンテンツはDownloadString()メソッドの戻り値として取得できます。
string text = wc.DownloadString("http://www.ipentec.com");

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。[Get]ボタンをクリックします。


[Get]ボタンをクリックするとWebサイトにアクセスし、HTMLを取得します。取得したHTMLの内容がテキストボックスに表示されます。


スクロールしてコンテンツの内容を確認します。文字化けしていることが確認できます。これはUTF-8でエンコーディングされているHTMLをアプリ側でUnicodeとして扱っているためです。


次節で文字化けしないためのエンコーディング指定について紹介します。

WebClientのエンコーディングの指定 - WebClientで取得した文字列の文字化けを防ぐ

先のコードでは取得したHTMLファイルのテキスト場文字化けしました。これはHTMLファイルがUTF-8でエンコードされているのに対し、C#内部では文字列をUnicodeとして扱っているためです。正しく表示させるためには、WebClientでダウンロードする文字列のEncodingを指定します。

コード

button1_clickのコードを以下に変更します。
private void button1_Click(object sender, EventArgs e)
{
  WebClient wc = new WebClient();
  try {
    wc.Encoding = Encoding.UTF8;  //追加
    string text = wc.DownloadString("http://www.ipentec.com");
    textBox1.Text += text;
  }
  catch (WebException exc) {
    textBox1.Text += exc.Message;
  }
}

解説

下記のコードを追加します。このコードによりダウンロードするHTMLファイルはUTF-8でエンコードされていることをWebClientに設定します。ファイルがダウンロードされるとWebClientはテキストをUTF-8からUnicodeへ変換します。
wc.Encoding = Encoding.UTF8; 

実行結果

アプリケーションを実行し、[Get]ボタンをクリックします。文字化けされずに表示されました。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2014-03-10
iPentec all rights reserverd.