【ハウツー】

ゼロからはじめる正規表現 秀丸編 - HTMLファイルから特定の情報だけを収集する

    阿久津良和  [2009/04/09]

    普段何気なく閲覧しているWebページは、言うまでもなくHTMLを基軸としたマークアップ言語で構成されています。ユーザーが情報収集を行なう上で、Webページ上からではなく、直接HTMLファイルから情報収集を行なう際にも、正規表現による文字列置換や絞り込みが効果的。そこで今回は秀丸を用いたHTMLからの情報収集テクニックをご紹介します。

    コメントを削除する

    HTMLファイルを秀丸で開くとわかるように、HTMLの可読性を高めるためにコメントが挿入されていることに気づくはず。HTMLのコメントは「<!」ではじまり、コメント本文は「--」から「--」の間に挿入。「>」で閉じるというルールが定められています。ちなみにHTMLのコメントは、一見すると大なり小なり括弧を用いていますので、他のタグと同じように思いがちですが、コメントは宣言するものであり、タグには含まれません(図01)

    図01 本サイトのHTMLを秀丸で表示した例。タグや値、コメントが自動的に色分けされています

    本題に戻り、コメント宣言のルールを踏まえて正規表現を考えてみましょう。まず「<!--」ではじまるので前述の文字列が挿入されます。次にコメントを想定しますと、任意の文字列が続くことになりますので、"任意の一文字が1回以上続き、直前のパターンが0回もしくは1回登場"する場面を正規表現で表わすと「.+?」が必要。そして最後に、コメント宣言を閉じる「-->」を挿入することで、「<!--.+?-->」という正規表現が完成しました。

    正規表現

    検索文字列:<!--.+?-->
    置換文字列:※なし
    

    先の正規表現を検索文字列とし、置換文字列を"なし"にすれば、HTML内からコメント宣言を取り除くことができます。また、秀丸の場合は検索対象を強調表示できますので、完成もしくは入手したHTMLの可読性をより高める際に用いても利便性が向上しますので、ぜひお試しください(図02~04)。

    図02 検索ダイアログを開き、「検索」に「<!--.+?-->」と入力して[上検索][下検索]いずれかのボタンをクリックすれば、コメント宣言部分のみ強調表示されます

    図03 コメント宣言を削除する場合は--置換ダイアログを開き、「検索」に「<!--.+?-->」と入力。「置換」が空の状態で[全置換]ボタンをクリックします

    図04 これでHTML上のコメント宣言がすべて削除されました

    HTMLタグを削除する

    Web上で見かけたデータを自分用の資料として管理するため、HTMLタグを消し去りたい場面あることでしょう。例えば抜き出したデータをテキストファイルに書き込んだり、自分専用のWikiサイトに貼り付けたりと、活用場面は無限大です。

    先ほどはコメント宣言を削除するため「<!--」としましたが、HTMLタグは基本的に大なり小なり括弧で囲まれたものを対象とすれば良いので「<.+?>」とすれば、すべてのHTMLタグが対象となります(図05)。

    図05 検索ダイアログを開き、「検索」に「<.+?>」と入力して[上検索][下検索]いずれかのボタンをクリックすれば、HTMLタグがすべて強調表示されます

    正規表現

    検索文字列:<.+?>
    置換文字列:※なし
    

    あとは先ほどと同じように、置換文字列を"なし"にすれば、HTMLタグの大部分を削除することが可能です。JavaScriptなどが含まれる場合は一部残ってしまいますが、その点はご容赦ください(図06~07)。

    図06 置換ダイアログを開き、「検索」に「<.+?>」と入力。「置換」が空の状態で[全置換]ボタンをクリックします

    図07 これでHTMLタグの大部分が削除され、文書などを自分用に再利用しやすくなりました

    記事と思われるリンクタグだけを抽出する

    本サイトのHTMLのように大量の記事(リンク)が含まれていますと、Webページ上からではなくHTMLから直接記事を抽出したい場面に出会うことがあります。もちろん数本の記事ならば、記事見出しやURLを直接コピー&ペーストした方が素早く操作できますが、大量の記事(リンク)があるとそうもいきません。

    リンクを作成する「a」タグをピックアップする正規表現は、「<a .+?/a>」と単純ですが、既存のHTMLファイルからaタグ以外の削除を置換操作だけで済ませるのは骨の折れる作業となります。また、SEDやAWKに代表されるストリームエディタのように、入力したファイルに対して正規表現を組み合わせ、テキスト加工を行なうような機能を標準で持ち合わせていない秀丸では、マクロを記述しなければなりません。

    そこでお薦めしたいのがgrep機能です。同機能はテキストファイルから、正規表現に一致する行を検索するUNIXのコマンドから生まれたもので、秀丸では複数のファイルや現在開いているファイルに対して検索および出力を行なうことが可能。この機能を用いて先の正規表現「<a .+?/a>」を検索すれば、「a」タグがついた行だけを抽出することができます。この際、ファイルの先頭行にカーソルを移動させてからgrep機能を実行してください(図08~09)。

    図08 [検索]メニューから[grepの実行]を選択しますと表示されるダイアログの「検索する文字列」に「<a .+?/a>」と入力。「検索するファイル」のドロップダウンリストから「(現在の内容)」を選択します。[正規表現]にチェックが入っているのを確認してから[OK]ボタンをクリックしてください

    図09 これで「a」タグを持つ行のみが抽出されました

    正規表現

    検索文字列:<a .+?/a>
    

    しかしgrep機能の検索結果にはファイルを参照しやすくするためのファイル名が行頭に挿入されてしまいます(未保存のファイルにHTMLコードをコピー&ペーストした場合、行番号のみ挿入されます)。この部分があるとHTML表示する際に邪魔な存在となりますので、正規表現「.+?\): 」を使用し、置換機能を用いて取り除きましょう。

    最後にgrep検索結果の先頭行に「<html><body>」、最終行に「</body></html>」を挿入し、任意のファイル名で保存すれば、シンプルな表示結果となります。これを元にご自分の資料として再利用してください(図10~12)。

    図10 置換ダイアログを開き、「検索」に<.+?\):>と入力。「置換」が空の状態で[全置換]ボタンをクリックしてください。これでgrep実行時に挿入されるファイル名や行番号が削除されます

    図11 あとは先頭行および最終行にHTMLファイルであることを示すタグを挿入し、任意のファイル名をつけたHTMLファイル形式で保存しましょう

    図12 画面はHTMLをInternet Explorerで開いたところ。ご覧のようにシンプルな構成になりました

    正規表現

    検索文字列:.+?\):
    置換文字列:※なし
    

    阿久津良和(Cactus)

    関連したタグ

    新着記事

    特設サイトの情報

      人気記事

      一覧

      新着記事

      特別企画

      マイナビニュースマガジン