C# でデスクトップアプリに実験
ちょっと思うところがあって ASP.NET MVC4 は置いといて、普通に Windows 用の GUI アプリケーションを試してみた。
自分が以前書いてた頃の C# は 2.0 か 3.0 ぐらいじゃ無いかと思うけど、今の奴も大きな変化は無い感じ。
ま、特別何かを作りたいってな思いがあるわけじゃ無いんで、単純なスクレイピングをするための準備コードを書いてみた。
だいたいインターネット見ればサンプルコード落ちてんだけどね。
private void button1_Click(object sender, EventArgs e) { const string url = "http://たーげっとのURL"; System.Net. WebClient web = new System.Net.WebClient(); web.Encoding = Encoding.UTF8; string html = web.DownloadString(url); HtmlAgilityPack. HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); doc.LoadHtml(html); List<string > hrefTags = new List< string>(); foreach (HtmlNode link in doc.DocumentNode.SelectNodes( "//a[@href]")) { HtmlAttribute att = link.Attributes["href" ]; hrefTags.Add(att.Value); Uri baseUri = new Uri(url, UriKind.Absolute); Uri resolvedUri = new Uri(baseUri, att.Value); try { string html2 = web.DownloadString(resolvedUri.AbsoluteUri); if (html2.IndexOf("栄養" ) != -1) { Console.WriteLine(html2); } } catch (Exception ) { } } Console.WriteLine(hrefTags.Count); }
HtmlAgilityPack ってライブラリを NuGet を使って追加して、ページ内の a タグを集めて「栄養」って文字列が出てきたページをダンプするだけ。
ページのキャラクターコード(エンコーディング)の話とリンク先が相対パスの場合に絶対パスに変換せなアカンあたりがつまずきポイント。
高木浩光氏のサイトに前に出てたけど、図書館のシステムに自動でアクセスしてたら捕まったみたいな話があって、不正アクセス禁止法とかも含めてウェブのスクライピングってちょっと怖いのな。バグってて期せずして DoS 攻撃になって威力業務妨害とか言われたら・・・って感じ。
ま、実験だけなら家の LAN 上にサーバ立てて試せばエエだけの話やなんけどな。
このレベルのアプリケーションなら特になんか勉強せなアカンってなことは無い。
もうちょっと本質的なところか ASP.NET MVC みたいに解るじゃ無くて知っとかなアカンことが多い領域をやる方が先かもな。