Home > C# > 目的別 > Web関連 > WebClient

クエリ文字列を渡して、Webサイトの情報を取得する

新規作成日 2017-10-27
最終更新日

Webサイトの中には、検索サイトのように、ページの中にテキストボックを配置し、ページの閲覧者がテキストボックスにテキストを入力し、ボタンをクリックすることで特定の情報を提供するページを表示する形式のページがあります。

Webサイトでは、検索サイトのように、URLの後ろに「?」を付けて、その後にテキストボックス内の文字列を追加して、情報が存在するページに移行する仕組みがあります。これをパラメーターやクエリ文字列と呼びます。

このようなWebページをC#で取得するには、QueryStringプロパティを使用します。

C#では、このクエリ文字列をWebClientクラスのQueryStringプロパティに格納することで、使って、Webサイトのページを指定し、その情報をダウンロードすることができます。

WebClient.QueryStringプロパティ

使用例を多少変更したコードです。検索文字を入力すると、検索サイトbingで検索を行い、検索結果を「searchresult.htm」に保存します。ファイルは、プロジェクトのbinフォルダ内のDebugに保存されます。

using System;
using System.Collections.Specialized;
using System.Net;

namespace GetWebsite05
{
    class Program
    {
        static void Main(string[] args)
        {
                 string uriString = "https://www.bing.com/search";
            try
            {
                // Enter the word(s), separated by space character to search for in 
                // 検索する空白文字で区切られた単語を入力してください
                Console.Write("検索する空白文字で区切られた単語を入力してください" + uriString + ": ");
                // Read user input phrase to search for at uriString.
                // uriStringで検索するユーザー入力フレーズを読み込みます。
                string searchPhrase = Console.ReadLine();
 
                // Create a new NameValueCollection instance to hold the QueryString parameters and values.
                // QueryStringパラメータと値を格納する、新しいNameValueCollectionインスタンスを作成します
                NameValueCollection myQueryStringCollection = new NameValueCollection();

                if (searchPhrase.Length > 1)
                    // Assign the user-defined search phrase.
                    // ユーザー定義の検索フレーズを割り当てます。
                    myQueryStringCollection.Add("q", searchPhrase);
                else
                    // If error, default to search for 'Microsoft'.
                    // エラーの場合は、既定で「Microsoft」を検索します。
                    myQueryStringCollection.Add("q", "Microsoft");

                // Assign auxilliary parameters required for the search.
                // 検索のために必要とされる補助パラメータを割り当てます。
                Console.WriteLine("Searching " + uriString + " .......");

                using (WebClient myWebClient = new WebClient())
                {
                    // Create a new WebClient instance.
                    // WebClientインスタンスを新規作成します。

                    // Attach QueryString to the WebClient.
                    // QueryStringをWebClientに添付します。
                    myWebClient.QueryString = myQueryStringCollection;
                    // Download the search results Web page into 'searchresult.htm' for inspection.
                    //検査のために、「searchresult.htm」に検索結果のWebページをダウンロードします。
                    myWebClient.DownloadFile(uriString, "searchresult.htm");
                }
                // "\nDownload of " + uriString + " was successful. Please see 'searchresult.htm' for results."
                Console.WriteLine(uriString + " のダウンロードは、成功しました。結果については、「searchresult.htm」を参照ください。");
            }
            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は、Yahoo!ファイナスの株式ページのURLです。クエリ文字列を使用して、株価コードを指定して、必要な情報を呼び出します。

https://stocks.finance.yahoo.co.jp/stocks/history/?code=4689.T

URLには、「?」の後に、「code=4689.T」のクエリ文字列があります。

このWebサイトの情報を取得するコードは以下のとおりです。取得した結果は、文字列としてコンソールに表示されます。

using System;
using System.Collections.Specialized;
using System.Net;
using System.Text;


namespace GetWebsite06
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                // 読み込むページのURL ヤフーファイナンスの株式-時系列
                string url = @"https://stocks.finance.yahoo.co.jp/stocks/history/";
                // 株価コード「4689」は、ヤフー株
                string StockCode = "4689.T";
                // 読み込んだWebページのコードを格納する変数
                string html;

                // QueryStringパラメータと値を格納する、新しいNameValueCollectionインスタンスを作成します
                NameValueCollection myQueryStringCollection = new NameValueCollection();

                // クエリ文字を設定する
                myQueryStringCollection.Add("code", StockCode);

                using (WebClient wc = new WebClient())
                {
                    // WebClientインスタンスを作成します

                    // ユーザーエージェント文字列をHeaders プロパティに追加する 
                    //wc.Headers.Add("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0");

                    // QueryStringをWebClientに添付します。
                    wc.QueryString = myQueryStringCollection;

                    wc.Encoding = Encoding.UTF8;
                    html = wc.DownloadString(url);
                }
                // 取得したWebページのコードをコンソールに出力する
                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();
        }
    }
}
このエントリーをはてなブックマークに追加

Home PC C# Illustration

Copyright (C) 2011 Horio Kazuhiko(kukekko) All Rights Reserved.
kukekko@gmail.com
ご連絡の際は、お問い合わせページのURLの明記をお願いします。
「掲載内容は私自身の見解であり、所属する組織を代表するものではありません。」