<table>タグの解析

タグの編集
投稿者 TP230  (社会人) 投稿日時 2016/11/12 18:13:22
複数のテーブルがあるhtmlを読み込んでそれぞれのテーブルをDataTable等に落としこむには手動で解析するしか無いのでしょうか
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2016/11/15 11:12:53
Excel の Web クエリを使うという手もありそうです。
https://support.office.com/ja-jp/article/Web-%E3%83%9A%E3%83%BC%E3%82%B8%E3%81%8B%E3%82%89%E5%A4%96%E9%83%A8%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B-708f2249-9569-4ff9-a8a4-7ee5f1b1cfba


> 複数のテーブルがあるhtmlを読み込んで

table 内に別の table が入れ子になっていた場合や、
行方向にマージされたテーブルについては、
どのように取得したいのでしょうか?

DataTable 型のフィールドや Relations を使えば
DataSet/DataTable での多層テーブルも表現できますが、
行や列のマージまでは表現しきれませんよね。


> それぞれのテーブルをDataTable等に落としこむには

たとえば、Microsoft.Ace.OLEDB.12.0 プロバイダの
ISAM エンジン(HTML Import)を使うという手があります。

Dim ds As New DataSet()

Dim url = "http://rucio.cloudapp.net/NewComment.aspx?ThreadId=30186"
'Dim url = "http://monitoring.tokyo-eiken.go.jp/monitoring/hourly_data.html" 
My.Computer.Network.DownloadFile(url, "C:\temp\test.html"""""True, 100, True)

Dim charSet As Integer = 65001
Dim connectionString = "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=C:\temp\test.html;Extended Properties=""HTML Import;IMEX=1;HDR=NO;CharacterSet=" & CStr(charSet) & ";"""

Using conn As New System.Data.OleDb.OleDbConnection(connectionString)
    conn.Open()

    Dim q = conn.GetSchema("Tables").AsEnumerable()
    Dim tblList = q.Select(Function(r) r.Field(Of String)("TABLE_NAME"))

    For Each tableName In tblList
        Dim sql = "SELECT * FROM [" & tableName & "]"
        Using adapter As New System.Data.OleDb.OleDbDataAdapter(sql, conn)
            adapter.Fill(ds, tableName)
        End Using
    Next
    conn.Close()
End Using



> 手動で解析するしか無いのでしょうか

HTML 解析ツールをお探しなら、有名どころで Html Agility Pack とか。
http://stackoverflow.com/questions/10513529/getting-data-from-html-table-into-a-datatable
http://www.atmarkit.co.jp/ait/articles/1501/27/news140.html
http://vb.xn--netde-rm4dun6em173aog4b.com/321.htm
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2016/11/15 11:25:55
補足:

> Dim charSet As Integer = 65001

先のサンプルの 65001 は、UTF-8 な HTML ファイルであることを示します。
HTML ファイルの charset にあわせた値を指定してください。

http://www.dspt.net/html_tag/001_data/017.html
http://www.atmarkit.co.jp/ait/articles/0304/11/news004.html