• 締切済み

大量のhtmlを項目だけ抽出して1つのCSVに出力したいです

初めて投稿させていただきます。 大量のショップデータのhtmlがあります。 ショップのデータが消滅したため、過去作成したバックアップのhtmlの商品データしかありません。 数千ある商品を特定の項目だけ抽出してCSVにまとめれればと思いここに質問してみました。 具体的には htmlの中身は -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ <html><head> 以下略 (この辺は商品によってバラバラ) <div> ■商品番号:●●●● ■商品名:●●●●●● ■容量:●●●●●● ■備考:●●●●● </div> -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ のようになっており、各商品によってソースはバラバラですが、確実に同じな項目が■商品名:●●●●●●や■容量:●●●●●●などの部分が全て統一されております。 なのでここの商品名や容量、備考の部分だけを抽出し 数千あるhtmlファイルから下記のようなCSVにて出力することは不可能でしょうか? 商品番号,商品名,容量,備考 また極力早い手段でこのようなCSVにまとめる方法はないでしょか? お手数ですがアドバイスの方よろしくお願い致します。

みんなの回答

  • 4017B
  • ベストアンサー率73% (1336/1814)
回答No.2

とりあえず正規表現が使える環境で。 まず「置換処理(1)」を全体に実行し、次に「置換処理(2)」を全体に実行。 これでデータとしてある程度整形されますので。 後は単純に全てのHTMLをTEXTとして解釈させ、単純に結合させていくとか? >文字列置換処理(1) $line =~ s/■商品番号:([^\n]+)\n■商品名:([^\n]+)\n■容量:([^\n]+)\n■備考:([^\n]+)\n/}}}DATA{{{$1,$2,$3,$4}}}END{{{\n/g; >文字列置換処理(2) $line !~ s/\}\}\}DATA\{\{\{(.+)?\}\}\}END\{\{\{\n//g; とにかく何らかの高機能なテキストエディタ(秀丸など)が必要です。 検索かけてみれば、正規表現が使えるフリーの文字列置換ソフトなどあったはずです。自宅サーバー等でダイレクトにPerlが使えるのなら、そっちの方が早いかもしれません。

  • lv4u
  • ベストアンサー率27% (1862/6715)
回答No.1

>>数千あるhtmlファイルから下記のようなCSVにて出力することは不可能でしょうか? 商品番号,商品名,容量,備考 プログラム言語のPerlを使えば、かなり少ない行数で、CSVを出力するプログラムができそうです。 (できたファイルの内容を検証する必要はありますが・・・) 考え方として簡単に書くと、 1)プログラムの中で、順番に、全てのhtmlファイルを読む 2)ファイルの中で、「■商品番号:」の文字列があれば、後ろを変数に保存。残りも同様に処理。 3)「■備考:」がみつかったら、保存した4つの内容を1行としてCSVに出力 4)全てのhtmlを読み終えたら、CSVファイルをクローズ こういう処理を行えば、1つのCSVにまとめて出力が可能と思えます。