SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

C#たんと学ぶ/わりと硬派なソフトウェア開発講座

C#たんと学ぶ/わりと硬派なソフトウェア開発講座
第1.5回「頼れ!Visual Studio」

C#たんと学ぶ わりと硬派なソフトウェア開発講座(2)


文字コード

 さて、現状のプログラムには1つ問題が残っています。実際に実行してみると、取得してきたページのソースコードが文字化けしています。

 文字コードを正しく認識できていないのが原因ですね。xbox.comのページで文字コードを確認してみると、UTF-8になっています。

 そこで、今度は「WebClient 文字コード」でBingってみてください。「WebClientクラスのEncodingプロパティで文字コードの指定が必要らしい」ということが分かるかと思います。

 このことを踏まえて、早速プログラムを修正してみましょう。

 これで、以下のように、正しくソースコードが表示されるようになりました。

情報抽出

C#たん真顔
C#たん
HTMLのソースコードを拾ってこれたことですし、今度はゲームのタイトル情報を抽出してみましょう。
文字列のパターンマッチングという処理になります。
C++たん真顔
C++たん
正規表現を使うのかしら?
C#たん考える
ですね。でも、いい加減、正規表現って呼び方どうにかして欲しいですよね。Bingってみると「正規言語を表現するのに十分な文法」だとかなんとか出てきますけども、そういわれてパターンマッチングを想像できる人がどれだけいるんでしょうね。
vbたん穏やか
VBたん
しかも、今となっては正規言語の範囲超えてるものねー。“正規”表現と言いつつ、色々拡張されちゃってて。

抽出対象

 さて、その正規表現の話の前に、情報抽出の対象となるxbox.comのHTMLソースコードを見てみましょう。IEのソースコード表示機能を使ってみてみると、以下のようになっています。

 ゲームのタイトルに関する部分を抜き出すと、以下のような感じです。

<a href="/ja-JP/Product/%E3%82%A2%E3%82%A4%E3%83%89%E3%83%AB%E3%83%9E%E3%82%B9%E3%82%BF%E3%83%BC%EF%BC%92/66acd000-77fe-1000-9115-d8024e4d0817">アイドルマスター2</a>

 これを抽出するためのパターンを考えると、以下のようなものになります。

正規表現

 やっぱりまずはBingりましょう(ググるのでも可)。「C# 文字列検索」とかで検索してもらうと、「正規表現」って言葉がちらほら見てとれるかと思います。そしてそこには、「Regexクラスを使え」と書かれているはずです。

 正規表現自体は今回の主題ではないので、ここではいくつか参考記事を挙げるだけにとどめておきましょう。

 先ほどの、ゲームのタイトルを抽出するためのパターンも、ここでは結果だけ書いてしまいましょう。以下のようになります。

/ja-JP/Pro[^"]*"\>(?<title>.*)\</a

 ぱっと見は何か意味の解らない文字の羅列になっていますが、以下のように解釈してください。

 ここで、正規表現に関連して、便利なサイトを1つ紹介しておきましょう。

 このサイトでは、その場でリアルタイムに結果を見ながら正規表現を書いていくことができ、作った正規表現の共有も可能です。

 このサイトで例えば、「検索文字列」のところに先ほど示したパターンを、「入力テキスト」のところにxbox.comのゲーム一覧ページのソースコードを入れてみてください。以下のような結果が得られるはずです。

 スクリーンショット中の右下の部分に抽出したタイトル一覧が表示されています。

情報抽出プログラムの作成

 正規表現について一通り説明したところで、プログラムに反映させてみましょうか。

 こちらもいくつか補足説明を入れていきましょう。

文字列

 正規表現は文字列中に書く必要があって、@"" でくくった上で、" は "" と2つ重ねて書く必要があります。元々、

/ja-JP/Pro[^"]*"\>(?<title>.*)\</a

 だったものは、C#コード中に埋め込む際には以下のようになります。

@"/ja-JP/Pro[^""]*""\>(?<title>.*)\</a"

コードスニペット

 一覧の1つ1つに対して処理をするにはforeach文を使います。foreachという単語だけ入力した後、Tabキーを押せば、Visual Studioがひな形を作ってくれます。

 このようなひな形生成機能をコードスニペット(code snippet)と呼びます。IntelliSenseとの組み合わせが非常に強力です(foreachという単語すらすべて打つ必要がなく、foreくらいまで打てばIntelliSenseが補完してくれます)。

次のページ
最終結果

この記事は参考になりましたか?

C#たんと学ぶ/わりと硬派なソフトウェア開発講座連載記事一覧

もっと読む

この記事の著者

C#たん ソフトウェア開発講座 制作委員会(シーシャープタン)

ソフトウェアに求められる要求の高度化とともに大きくなる開発者への負担を、開発ツールやフレームワーク、時には萌え力を頼りに軽減できないか考えるプロジェクト。C#たんは単なるマスコットかと思いきや、割と毒舌。自分のことは棚に上げて、「萌えればいいってもんじゃないですよ?」が信条。twitter: @cs...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/5696 2011/06/30 11:19

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー