NuGetでHtml Agility Packを追加。
例(VB.NETコード)
Sub Main() Console.WriteLine("HttpClientクラスで取得したWebページを解析する(Html Agility Pack)") ' 時間計測用のタイマー Dim timer = New System.Diagnostics.Stopwatch() timer.Start() ' .NET TIPSの日付順インデックスのURL(シフトJISのページ) Dim webUri As Uri = New Uri("http://www.atmarkit.co.jp/ait/subtop/features/dotnet/index_date.html") ……省略…… Dim htmlText As String = ……省略(Webページの内容を文字列として取得)…… Console.WriteLine("HTML取得完了: {0:0.000}秒", timer.Elapsed.TotalSeconds) If (htmlText IsNot Nothing) Then ' HtmlDocumentオブジェクトを構築する Dim htmlDoc = New HtmlAgilityPack.HtmlDocument() htmlDoc.LoadHtml(htmlText) Console.WriteLine("HtmlDocument構築完了: {0:0.000}秒", timer.Elapsed.TotalSeconds) ' 目的の<a>要素を全て取り出して(XPath)、 ' そのhref属性とInnerTextを持つ匿名型オブジェクトのコレクションを作る(LINQ) Dim articles _ = htmlDoc.DocumentNode _ .SelectNodes("//div[@class=""da-tips-index-target""]/div[not(@class)]/a") _ .Select(Function(a) New With _ { .Url = a.Attributes("href").Value.Trim(), .Title = a.InnerText.Trim() }) Console.WriteLine("タイトル取り出し完了: {0:0.000}秒", timer.Elapsed.TotalSeconds) Console.WriteLine() ' 先頭10件を表示する Console.WriteLine("記事タイトル先頭10件(全{0}記事中)", articles.Count()) For Each a In articles.Take(10) Console.WriteLine(a.Title) Console.WriteLine(" - {0}", a.Url) Next End If #If DEBUG Then Console.ReadKey() #End If End Sub