PowerShell/HTMLのtableタグをスクレイピング
の編集
Top
/
PowerShell
/
HTMLのtableタグをスクレイピング
[
トップ
] [
編集
|
差分
|
履歴
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
(no template pages)
#navi(../) * PowerShellでHTMLのtableタグをスクレイピング・解析する・XmlDocument [#h49e353e] tableタグで作成された表を解析しcsvなどにしたい場合はありませんか?~ 本資料では、単純なHTMLを用意しHTMLファイルのスクレイピングをしてみます。 #htmlinsert(win_ads_top.html) #contents * 使用したWindowsとPowerShell [#oe2a378c] -Windows #ref(ver.png) #br -PowerShell PS C:\> $PSVersionTable.PSVersion Major Minor Build Revision ----- ----- ----- -------- 5 1 18362 145 * 関連記事 [#h2312120] curlやwgetのようにURLを指定して情報を取得する場合は、以下の記事を参考にしてください。 -[[PowerShellでwgetやcurlのようにウェブページを取得する>PowerShell/wgetやcurlのようにウェブページを取得する]]~ JSON形式の場合は以下の記事を参考にしてください。 -[[PowerShellでハッシュからJSON,JSONからPSCustomObjectに変換する方法>PowerShell/ハッシュからJSON,JSONからPSCustomObjectに変換する方法]]~ JSON形式については、仮想通貨取引所が公開しているパブリックAPIに対しPowerShellで情報を取得するサンプルも公開しています。~ -[[仮想通貨(暗号通貨)メモ>https://cryptocurrency.just4fun.biz/]] * [xml]を使用してtableタグ内の情報をスクレイピングする [#ma2d9342] 以下のHTMLファイルを用意しました。 #ref(10.png) ''sample.html'' &ref(sample.zip); <html> <head> <title>sample</title> </head> <body> sample table <table> <tr> <th>No</th><th>value1</th><th>value2</th> </tr> <tr> <td>1</td><td>11</td><td>12</td> </tr> <tr> <td>2</td><td>21</td><td>22</td> </tr> <tr> <td>3</td><td>31</td><td>32</td> </tr> </table> </body> </html> htmlファイルをSystem.Xml.XmlDocumentオブジェクトとして読み込むためには、以下の構文になります。 $obj = [xml](Get-Content ファイル名) 上記の通り、htmlファイルをXmlDocumentオブジェクトに読み込み操作することになります。 * HTMLファイルをXmlDocumentオブジェクトに読み込み操作する [#m76829e8] 以下は、用意したsample.htmlをDドライブ直下に置いてPowerShellにて操作した実行例となります。 + htmlファイルを読み込みます。 PS D:\> $obj = [xml](Get-Content D:\sample.html) #br + 読み込んだ情報($objに格納)を表示するとhtmlタグがあることが確認できます。 PS D:\> $obj html ---- html #br + htmlタグを指定し表示しています。headとbodyがあることが確認できます。 PS D:\> $obj.html head body ---- ---- head body #br + bodyタグを指定すると、テキストとtableタグがあることが確認できます。 PS D:\> $obj.html.body #text table ----- ----- ... table #br + textの内容を取ってみます。~ HTML内のテキストを取得することができました。 PS D:\> $obj.html.body.'#text' sample table #br + tableタグを指定すると、trが4つ存在しているのが確認できます。 PS D:\> $obj.html.body.table tr -- {tr, tr, tr, tr} PS D:\> $obj.html.body.table.tr.count 4 #br + 実際にtr分ループしtr内の要素を表示してみます。~ 以下のスクリプトをコピー&ペーストしEnterキーを押して実行してみてください。 $table = $obj.html.body.table $tr_count = $table.tr.Count for ($i=0; $i -lt $tr_count; $i++) { if ($i -eq 0) { $table.tr[$i].th } else { $table.tr[$i].td } } #ref(11.png) #br + csv文字列としてとして出力してみます。 $table = $obj.html.body.table $tr_count = $table.tr.Count for ($i=0; $i -lt $tr_count; $i++) { if ($i -eq 0) { $t = $table.tr[$i].th } else { $t = $table.tr[$i].td } $t[0] + "," + $t[1] + "," + $t[2] } #ref(12.png) 以上、XmlDocumentオブジェクトを使って、HTMLをスクレイピングするサンプルでした。 #htmlinsert(win_ads_btm.html)
タイムスタンプを変更しない
#navi(../) * PowerShellでHTMLのtableタグをスクレイピング・解析する・XmlDocument [#h49e353e] tableタグで作成された表を解析しcsvなどにしたい場合はありませんか?~ 本資料では、単純なHTMLを用意しHTMLファイルのスクレイピングをしてみます。 #htmlinsert(win_ads_top.html) #contents * 使用したWindowsとPowerShell [#oe2a378c] -Windows #ref(ver.png) #br -PowerShell PS C:\> $PSVersionTable.PSVersion Major Minor Build Revision ----- ----- ----- -------- 5 1 18362 145 * 関連記事 [#h2312120] curlやwgetのようにURLを指定して情報を取得する場合は、以下の記事を参考にしてください。 -[[PowerShellでwgetやcurlのようにウェブページを取得する>PowerShell/wgetやcurlのようにウェブページを取得する]]~ JSON形式の場合は以下の記事を参考にしてください。 -[[PowerShellでハッシュからJSON,JSONからPSCustomObjectに変換する方法>PowerShell/ハッシュからJSON,JSONからPSCustomObjectに変換する方法]]~ JSON形式については、仮想通貨取引所が公開しているパブリックAPIに対しPowerShellで情報を取得するサンプルも公開しています。~ -[[仮想通貨(暗号通貨)メモ>https://cryptocurrency.just4fun.biz/]] * [xml]を使用してtableタグ内の情報をスクレイピングする [#ma2d9342] 以下のHTMLファイルを用意しました。 #ref(10.png) ''sample.html'' &ref(sample.zip); <html> <head> <title>sample</title> </head> <body> sample table <table> <tr> <th>No</th><th>value1</th><th>value2</th> </tr> <tr> <td>1</td><td>11</td><td>12</td> </tr> <tr> <td>2</td><td>21</td><td>22</td> </tr> <tr> <td>3</td><td>31</td><td>32</td> </tr> </table> </body> </html> htmlファイルをSystem.Xml.XmlDocumentオブジェクトとして読み込むためには、以下の構文になります。 $obj = [xml](Get-Content ファイル名) 上記の通り、htmlファイルをXmlDocumentオブジェクトに読み込み操作することになります。 * HTMLファイルをXmlDocumentオブジェクトに読み込み操作する [#m76829e8] 以下は、用意したsample.htmlをDドライブ直下に置いてPowerShellにて操作した実行例となります。 + htmlファイルを読み込みます。 PS D:\> $obj = [xml](Get-Content D:\sample.html) #br + 読み込んだ情報($objに格納)を表示するとhtmlタグがあることが確認できます。 PS D:\> $obj html ---- html #br + htmlタグを指定し表示しています。headとbodyがあることが確認できます。 PS D:\> $obj.html head body ---- ---- head body #br + bodyタグを指定すると、テキストとtableタグがあることが確認できます。 PS D:\> $obj.html.body #text table ----- ----- ... table #br + textの内容を取ってみます。~ HTML内のテキストを取得することができました。 PS D:\> $obj.html.body.'#text' sample table #br + tableタグを指定すると、trが4つ存在しているのが確認できます。 PS D:\> $obj.html.body.table tr -- {tr, tr, tr, tr} PS D:\> $obj.html.body.table.tr.count 4 #br + 実際にtr分ループしtr内の要素を表示してみます。~ 以下のスクリプトをコピー&ペーストしEnterキーを押して実行してみてください。 $table = $obj.html.body.table $tr_count = $table.tr.Count for ($i=0; $i -lt $tr_count; $i++) { if ($i -eq 0) { $table.tr[$i].th } else { $table.tr[$i].td } } #ref(11.png) #br + csv文字列としてとして出力してみます。 $table = $obj.html.body.table $tr_count = $table.tr.Count for ($i=0; $i -lt $tr_count; $i++) { if ($i -eq 0) { $t = $table.tr[$i].th } else { $t = $table.tr[$i].td } $t[0] + "," + $t[1] + "," + $t[2] } #ref(12.png) 以上、XmlDocumentオブジェクトを使って、HTMLをスクレイピングするサンプルでした。 #htmlinsert(win_ads_btm.html)
テキスト整形のルールを表示する
添付ファイル:
sample.zip
569件
[
詳細
]
ver.png
713件
[
詳細
]
12.png
722件
[
詳細
]
11.png
746件
[
詳細
]
10.png
748件
[
詳細
]