読者です 読者をやめる 読者になる 読者になる

mamimpの研究帳

個人的にまとめたいものを記事にしています。

Html Agility Packを使ってスクレイピング(VB.NET)

【環境】

VB.NET(Visual Studio Community 2017)

HtmlAgilityPack

【目標】Yahoo!ファイナンスの米ドル/円の「売値113.681、買値113.684」という箇所をプログラムで取得して表示する。

f:id:mamimp:20170510131206j:plain

まずプロジェクトメニューからNuGetパッケージの管理をクリック

f:id:mamimp:20170510124818j:plain

参照をクリックして「HtmlAgilityPack」で検索

f:id:mamimp:20170510130845j:plain

HtmlAgilityPackをクリック

f:id:mamimp:20170510130858j:plain

インストールをクリック

f:id:mamimp:20170510130910j:plain

OKをクリック

f:id:mamimp:20170510130918j:plain

インストールが終わるとreadme.txtが開くので、閉じる。

f:id:mamimp:20170510130940j:plain

コードを記述する。

Public Class Form1
  Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim url As String = "https://finance.yahoo.co.jp/"
    Dim wc As System.Net.WebClient = New System.Net.WebClient
    Dim st As System.IO.Stream = wc.OpenRead(url)
    Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding("UTF-8")
    Dim sr As System.IO.StreamReader = New System.IO.StreamReader(st, enc)
    Dim html As String = sr.ReadToEnd
    sr.Close()
    st.Close()

    Dim doc As HtmlAgilityPack.HtmlDocument = New HtmlAgilityPack.HtmlDocument
    doc.LoadHtml(html)

    Dim nodes1 As HtmlAgilityPack.HtmlNodeCollection =
      doc.DocumentNode.SelectNodes("/html[1]/body[1]/div[2]/div[2]/div[2]/div[1]/div[12]/div[1]/div[1]/div[1]/div[1]/div[1]")
    Dim nodes2 As HtmlAgilityPack.HtmlNodeCollection =
      doc.DocumentNode.SelectNodes("/html[1]/body[1]/div[2]/div[2]/div[2]/div[1]/div[12]/div[1]/div[1]/div[1]/div[2]/div[1]")
    TextBox1.Text = "売値: " & nodes1(0).InnerText & Environment.NewLine &
                    "買値: " & nodes2(0).InnerText & Environment.NewLine
  End Sub
End Class

f:id:mamimp:20170510130953j:plain

ボタンを押すと米ドル/円の売値と買値を取得するプログラムが完成

f:id:mamimp:20170510131020j:plain

===================================================================

ところで

doc.DocumentNode.SelectNodesの引数指定にはHAP explorerが役に立つ。

HAP explorer ダウンロード

HAP explorerの使い方

FileメニューからOpen Uri..をクリック

f:id:mamimp:20170510135037j:plain

URLを入力してOpenをクリック

f:id:mamimp:20170510135127j:plain

DocumentElementノードを開いていき、目的の情報を探す。

f:id:mamimp:20170510135207j:plain

さきほどのdoc.DocumentNode.SelectNodesの引数にXpathの値をコピペで指定すれば、その下のValueの値を取得することができるようになる。

f:id:mamimp:20170510135317j:plain

以上