• 締切済み

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

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

みんなの回答

  • 4017B
  • ベストアンサー率73% (1305/1776)
回答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にまとめて出力が可能と思えます。

関連するQ&A

  • CSVファイルの出力

    こんにちは。 ただいまアクセスで商品の検索プログラムを作っていまして、入力した商品名に一致する商品コードと商品名をテーブルから抽出し、CSVファイルに出力したいのですが、どういった方法で出力すればいいのでしょうか?

  • CSVデータ

    CSVデータにも、「商品名」とか「紹介文」「商品ID」「カテゴリ」「メーカー名」等、CSVデータを提供している会社や商品によって項目名が色々ありますが、CSVデータを読み込めるソフト等を使用する時に、単純にそのまま読みこめば反映されるのでしょうか? それとも、CSVデータ側か、読み込む側をソフトの仕様に合わせて項目等を編集する必要があるのでしょうか? 編集の必要があるとしたらどこをどう編集するのでしょうか? 教えて頂けますよう御願いします。

  • アクセス csv出力 抽出条件

    データベース(アクセス2003)で作成されたファイルがあります。 このファイルのフィールドは"日付"、"時刻"、"設備"、"数値"のようになっています。(設備名は1~4) フィールドの条件を指定して日付ごと、加えて設備別にcsv出力を行いたいと思います。 クエリを用いて抽出条件に日付、設備名を入力してクエリを実行 そしてcsvにエクスポートという形では時間がかかりすぎるため困っています。(データは1日分が8万点ほどで年によっては設備が4つにわかれています。データは途中が抜けていたりしますが2005年~2008年まであります。) どうにかしてもっと効率的な作業を行えないでしょうか?

  • CSVデータから納品書を作成したいのですが

    注文番号別に納品書を作りたいと思っています。 エクセルで開くと1商品につき1行のCSVファイルがあります。 そのデータを、作成したフォーマットを使って、注文番号毎に印刷がしたいです。 たとえば、 注文番号  商品  単価  数量  注文者名 1234  ああ  30   1  いろはに 1234  いい  40   2  いろはに 1234  うう  50   3  いろはに 2345  ああ  30   1  ほへとち 2345  うう  50   5  ほへとち 3456  いい  40  10  りぬるを というCSVデータの場合、注文番号別に3枚の納品書が印刷されるのが目的です。 使用するCSVデータの内容は毎日異なります。(もちろん項目名等は固定です) ワードの差し込み印刷かと思いましたが、注文番号別に行を認識させて読み込ませる方法がわかりませんでした。 エクセルかワードで実現できれば幸いです。 ただし、CSVデータは一切編集せずに実現させたいと思ってます。 よろしくお願いいたします。

  • 条件抽出 [ACCESS 2000]

    テーブルには6項目/1セットのデータがあります eg 1:製品番号 8桁整数 [テキスト型] 2:品名        [テキスト型] 3:入庫数       [テキスト型] 4:出庫数       [テキスト型] 5:在庫数       [テキスト型] 6:備考        [テキスト型] が在ります。 ここで教えていただきたいのですが 項目1:製品番号(8桁整数)が  (1)下2桁が「00」    の製品番号のデータ1セット(6項目)  (2)5桁目が「3」    の製品番号のデータ1セット(6項目) を抽出したいのです  抽出方法は特に指定は無いのですが出来るならば、 (1)の条件を満たし抽出されたデータ(1セット)を 同じテーブルの上の方に一括して表示したいです 宜しくお願い申し上げます

  • CSVファイルでの出力について

    スキャンスナップで読み込んだデータをCSVファイルで抽出した際、 タイトル欄が?????で表示されます。 こちらの解決策について、どなたかご教示頂けないでしょうか。 ※OKWAVEより補足:「「ScanSnap/fiシリーズ/HHKB」商品について」についての質問です。

  • 条件に一致したデータの検索・抽出について

    エクセルで2つのデータから条件に一致したデータを検索・抽出がしたいのですが、うまく抽出することができないため、質問させていただきます データA |入荷日|商品番号|商品名|数量|金額| |1.1|1111|〇〇〇|10|10| |1.2|2222|◎◎◎|15|15| |1.3|3333|△△△|20|20| |1.4|4444|◆◆◆|10|10| データB |販売日|商品番号|商品名|販売数| |3.1|1111|〇〇〇|   | |3.2|    |AAA|100| |3.3|    |BBB|120| |3.1|2222|◎◎◎|   | |3.3|    |CCC|100| |3.1|3333|△△△|   | |3.1|4444|◆◆◆|   | データBから商品番号の一致したデータの一部を抽出してデータAに追加したいです (一部が難しいようなら1行そのまま抽出でも大丈夫です) 理想は |入荷日|商品番号|商品名|数量|金額|販売数| |1.1|1111|〇〇〇|10|10|   | |   |    |AAA|  |  |100| |   |    |BBB|  |  |120| |1.2|2222|◎◎◎|15|15|   | |   |    |CCC|  |  |100| |1.3|3333|△△△|20|20|   | |1.4|4444|◆◆◆|10|10|   | もしくは、関数を利用して以下の形にできれば、と思います |入荷日|商品番号|商品名|数量|金額|商品名|販売数|商品名|販売数| |1.1|1111|〇〇〇|10|10|AAA|100|BBB|120| |1.2|2222|◎◎◎|15|15|CCC|100|   |   | |1.3|3333|△△△|20|20|   |   |   |   | |1.4|4444|◆◆◆|10|10|   |   |   |   | データAをベースに、データBから重複データのうちすでにデータAにあるものを省き(1件目は重複データなので2件目以降)抽出する 1.データB商品番号重複しています。重複データの1件目はデータAと共通で、2件目以降を抽出したいです 2.データB商品番号の重複はそれぞれ違うため、1件も重複してないものもあれば3件ほど重複しているものもあります 3.データAは入荷日の範囲を指定したデータですが、データBは入荷日項目がないため抽出する必要のない内容・件数のデータもはいっています。その為、データAから抽出するのではなく、データAをベースにデータBから抽出がしたいです。 よろしくお願いします。

  • phpで、可変項目のcsvデータを読み込みたい

    csvでデータを読み込む方法はネットで見つけたのですが、下記の条件を加えた場合どうすればいいか分かりません。 ネットで見つけた方法は、ファイルを1行ごと読み込み、コンマごとに区切って配列にいれる方法です。 しかし、項目が可変の場合、名前を入れたいところに別のデータが入ったりします。 【条件】 csvの項目名は、 A,B,C,D,E,F とする それぞれの項目は、省略可能(どこが省略されるか分からない) そのため、 A,D,E,F など、項目名が少ないCSVファイルもある。 こんな場合は、どのように処理をすればよいでしょうか? 実際は、項目名が50個ほどあります。 今回の例のように、少なければ何とかできそうなのですが・・・ 【補足・データファイル】 "A","B","C","D","E","F",←項目名 "山田","太郎","東京","15","123-221","男",←データ "山田","次郎","東京","13","124-567","男", ・・・・・・・・・↓続く ・・・・・・・・・

    • ベストアンサー
    • PHP
  • EXCELにて同じ項目を持つ2種類のデータのうち、ある項目が合致するデータを抽出する方法は?

    質問タイトルが判りにくくて申し訳ありません。 質問内容は以下の通りです。 例えば、 1.自社が納品先に納品したデータ(項目としては、伝票番号、商品コード、納品数量) 2.納品先側で作成された自社から納品された商品の受領データ(項目は1と同じです) 上記の2つEXCELのデータがあるとします。 この2つのデータを見比べて納品数量の食い違いを発見したいのです。 (自社からは2個納品したはずだが、納品先側では1個しか受領していないといったものです) この2つのデータを同じブック(シート)に貼り付けた上で伝票番号及び商品コードが合致したデータを抽出し、 なおかつ数量が違っているものを最終的に抽出したいのですが、マクロを使用せず、関数のみで抽出できる レベルでしょうか? 詳しい操作方法の説明までは大変でしたら『こんな関数を使えばどうですか?』というような関数の名前だけでも アドバイスしていただければ幸いです。 なお使用ソフトはEXCEL2003です。よろしくお願い致します。

  • 項目毎に新規CSV形式、ファイル名をつけて保存

    お世話になります。 エクレルの項目毎に新規CSVファイルで、ファイル名をつけて保存したいです。 (1)添付図のようなフォーマットを、D列+CSVで保存を行う。 ・山本株式会社.csv ・佐藤有限会社.csv ・株式会社鈴木.csv ・有限会社田中.csv (2)新規ファイル内容 A列:支店番号(元データのE列) B列:支店名(元データのF列) C列:売上(元データのG列) マクロを使って上記作業は可能でしょうか? どうぞよろしくお願いいたします。