愛媛県では県主導の「えひめFreeWi-Fi」という無料WiFiサービスが提供されています。
提供されている場所は以下のページに載っているのですが、ただのリストなので非常にわかりづらいです。
というわけで、第一歩としてこのデータを抜き出してみたいと思います。
Html Agility Pack
C#で使えるHTMLパーサといえば、Html Agility Pack がありますが、これを使ったやり方は酢酸先生のブログを見もらったらいいと思います。
- C#でHtml Agility Packを使ってウェブサイトのタイトルを取得する - 酢ろぐ!
- C#でHtml Agility Packを使ってYahoo!ファイナンスの現在の株価を取得する - 酢ろぐ!
- C#でHtml Agility Packを使って豊橋技科大の休講情報を取得する - 酢ろぐ!
- C#でHtml Agility Packを使って秀和システムの新刊情報を取得する - 酢ろぐ!
SGMLReader
今回はSGMLReaderを使ってみたいと思います。
サンプル
static void Main(string[] args) { var urlString = "http://www.pref.ehime.jp/h12600/wifi/osirase260822.html"; XDocument xml; using (var sgml = new SgmlReader() { Href = urlString, IgnoreDtd = true }) { xml = XDocument.Load(sgml); } var ns = xml.Root.Name.Namespace; var spots = xml.Descendants(ns + "table") .Last() .Descendants(ns + "tr") .Skip(1) // タイトルをスキップ .Select(e => e.Elements(ns + "td").ToList()) .Select(x => new { Place = x[1].Value, Address = x[2].Value, ServiceProvider = x[3].Value }); foreach (var spot in spots) { Console.WriteLine("施設/箇所名:{0} 住所:{1} サービス提供事業者:{2}", spot.Place, spot.Address, spot.ServiceProvider); } }
最初の using の部分で SgmlReader を使って XDocument を取得し、後は Html to Xml でごにょごにょしてます。
ね、簡単でしょう?*1
参考にさせてもらった記事
SgmlReader 自体は酢酸先生から教えてもらいました。
そこから蜜葉たんのブログを経由して、
neueさんのブログで何となくわかった気になった感じです。
*1:Html to Xml ほとんど使ったことないので実はよくわかってない…