<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)を使うという手があります。
> 手動で解析するしか無いのでしょうか
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
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
> 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