デジタル/シゴト/技術

スタジオ・ポット
ポットのサイト内を検索 [検索方法]
▲ゴト技top| 第11章 123456789
[第11章●そろそろ正規表現はいかがですか]
9… 実習2:閣僚名簿を作成する
[2004.02.26登録][2004.03.09更新]

石田豊
ishida@pot.co.jp

今回はWeb上にあるデータを加工して、自分の必要とするカタチに整形するという流れでいきたいと思います。

しかし、こういう流れの実例は作りにくいんですよね。どこのサイトのどのデータを使っても、法的にも倫理的にもいろいろ問題があるでしょうし。そこで、加工しても文句をいわれそうにないトコを選んでみました。小泉内閣の閣僚名簿。いえ、なにもそういう分野に関心があったり、ましてや応援しているわけでもないんですけど、ま、「無難な実例」ということでご寛恕のほどを……。

ストーリーとしてはこう。今の閣僚の名前を文章中に列記しなくちゃならんというニーズがあった、と。こういう感じ。

内閣総理大臣 小泉純一郎
総務大臣 麻生太郎
法務大臣 野沢太三
(以下、このように……)

で、このデータの一番カタい取材先はどこかといえば、やはり首相官邸だろうということで、そのWebページにアクセスした、と。行ってみると、案の定、閣僚の名簿があった、と。

小泉内閣の閣僚名簿のページ(別窓で開きます)

首相官邸のサイトにあった閣僚名簿


これを元に、上のようなフォーマットのリストを作ろう、と。ま、方途はいくつか考えられます。

(1) リストを見ながら手入力する
これはあまりに原始的ですなあ。面倒でもあります。パス。

(2) 必要な部分を少しずつ小出しにエディタにコピペする
つまり「内閣総理大臣」をコピペ、続いて「小泉 純一郎」をコピペという具合。(1)とそうかわらない。

(3) ページを「ソース」形式で保存し、エクセルで開き直して加工する
これはなかなかナイスな方法です。エクセルで読むと、このような感じになります。

HTMLソースをExcelで読み込んでみる


この表の上の方の不要な部分の行を削除し(そうしないと以降の作業ができない)、C、D列も削除。そののちそれをエディタにコピペすることで、残る作業はとっても少なくなります。Webの表はエクセルで読んでみる、というのはテクニックとして非常に効果的です(個人的にも常用しています)。

(4) ページ上で全てを選択、エクセルの新規書類にコピペ
これは(3)よりいっそう優れた方法です。ペーストされたエクセル書類は次の図のようになります。Webの表からデータをパクって加工する場合、シンプルな表なら、これがいちばん早い。ただこの例の場合は、この後、多少の作業(生年月日とかふりがなとかのセルを取り去るなど)が必要です。

(5) ページ上で全てを選択、エディタにコピペ。正規表現で加工
経験的に言って、すこぶるラクチンな場合と、かえって後処理が面倒になる場合があります。この場合は少々後者って感じ。(6)と比較すると後処理が発生したときに、(6)はトリガー(引き金)になる部分が多いのに対し、この方法はそれがないので、正規表現を書くのに往生することが、ままあるのです。

(6) ページをソースで保存し、エディタで開いて正規表現で加工
これをやってみたいと思って今回は書いているんですけどね。(4)ないし(3)ではうまくいかない場合、およびマイクロソフトの製品は使いたくないぞと思っている依怙地な性格の方の場合は、この方法がよいかと思います。

まず、ページをソース形式で保存します。保存メニューで「HTMLソース」を選んで保存すればいいのです。

保存したページをエディタで開きます。タグまみれになったテキストが表示されます。このタグがトリガーに有効なのです。

ほしい表(内閣総理大臣から井上喜一まで)以外の部分を削除します。いらない部分があると作業がわかりにくくなります。よその会社のリストラには不快を感じることの多い私ですが、データのリストラは断固推進すべきと思っています。自分でマネージすると、リストラの鬼になっちゃうもんなのかもしれません。ビシバシ削除。

表の上では1行(1人)になっているものでも、ソースでは複数行になっています。HTMLの表って、そんなもんです。複数行であると、なにかと不便なので、大臣1人1行に加工します。まず、改行(K2Editorでは\n、miでは\r)をナンニモナシに置換し、次に、「</TR>」を「</TR>改行」に置換します。これで大臣1行になりました。ちなみに<TR></TR>というのは表の「行」を表現するためのタグです(表の「セル」を表現するのは<TD></TD>)。

このソースの構造をじっくり見ます。つまりパターンを探し出すのです。なんとか大臣という「肩書き」の部分は<B>タグに囲まれていること、大臣の名前は<FONT SIZE= 1>タグの後に続いていることがわかります。欲しいのはその二つです。

<TR><TD><B>([^<]+)</B>.+SIZE=\+1>([^<]+)<.+」(+は半角)→「$1□□$2」という正規表現置換を行います。

行頭の「<TR><TD><B>」につづいて「<」以外の文字がいくつか続き(これをグループ化してるので、検索欄でこれを$1として参照できます)、「</B>」タグが来て、その後ろに任意の文字が任意の個数続いて(ここは不安なら?を付けて最短一致にしてもいいでしょう)「 SIZE=+1>」という文字列(+はメタキャラクタなのでエスケープしています)が来る。次の「<」までが大臣名なので、グループ化。で、後ろは改行までなにが来てもヒットするように「.+」。

これでドン。

結果が次の図です。あれ、ちゃんとなってないやんか。

3人分が取り残されてしまったが


3人分が整形されずに元のまま残ってしまいました。原因をチェックします。ふたつの理由があることがわかります。

ひとつめ。亀井大臣のところでは他大臣の行では「SIZE=+1>」となっているところが「SIZE="+1">」と記述されています。HTMLのルールとしてはこっちの方が正しいのですが、それでもこれじゃ閣内不統一です。何やってんだ。セイフは。

これは正規表現「SIZE=\+1>」の部分を「SIZE="?\+1"?>」と書き直すことで、対応がつきますが、実際には手で直しちゃうのが早いでしょう。

福田官房長官、小野国家公安委員会長は内閣府特命担当大臣も兼務しており、その部分がBタグに含まれていたため、先の正規表現ではヒットしなかったわけです。これは最初の解析の見落としと言えましょう。でも平気。これも手で直しちゃいます。

この3人の行の不要部分をちょこちょこと削除すると、求める閣僚リストのできあがりです。確認として人数があっているか数えておけば、まんず、間違いなし。

たかだか15人のリストですから、このやり方は牛刀でもって云々の類に見えてしまうかもしれません。が、(正規表現に少しなれると)所要時間的には、この方法が一番早い。3分程度でしょうか。

この記事は
面白かったですか?

お読みになっての印象を5段階評価のボタンを選び「投票」ボタンをクリックしてください。

つまらなかった           おもしろかった    

投票の集計

投票[ 4 ]人、平均面白度[ 4.3 ]

※「投票」は24時間以内に反映されます※

Kさんより
ご意見いただきました

[2004.03.09]

空白ではなく

ちょっと前に石田様の正規表現の解説を読ませて頂きとても
勉強になって感謝のメールをおくった者です。

あれ以来、HTMLのソースを直したりするときなど
かなりびびりながらも自分なりに活用できるようになってきました。
下手なことをすると一括置換などで壊滅的なことになるので
ほんとにおっかなびっくりではありますが。

正規表現のコーナー、増えてたので早速実習してみました。
案の定、SIZE="+1"の部分や福田さんのあたりで漏れてしまいました。

これも考慮して自分で考えてたのと組み合わせたのが↓
^<TR><TD><B>([^<]+)</B>.+SIZE=\"?\+1\"?>([^<]+)<.+$
(これでもまだ漏れちゃいますけど)

ところで、ちょっと疑問があったのでメールを出しました。
以下の部分

>「<TR><TD><B>([^<]+)</B>. SIZE=\+1>([^<]+)<.+」(+は半角)→「$1□□$
2」という正規表現置換を行います。

と、ありますが
</B>のあとは「.半角に続いてスペース」になってますが「.+」ではないでしょうか


あと、SIZE="+1"のエスケープであれば
>これは正規表現「SIZE=\+1>」の部分を「SIZE=\+"?1"?>」と書き直すことで、
>対応がつきますが、実際には手で直しちゃうのが早いでしょう。

SIZE=\+"?1"?>
ではなく、
SIZE="?\+1"?>
ではないかと、思ったんですが。
(前述の自分の考えたやつでは「"」をエスケープしてるけどエスケープ不要みたい
ですね。)

石田様のわかりやすい解説をしっかり読み進めてきた人なら
大丈夫だとは思いますがせっかくの分かりやすい解説がここで「??」となって
脱落してしまうひとが出るかもしれないのはもったいないことだと思ってメールを出
した次第です。

もし、当方の勘違いとかだったらほんと、すいません。先にあやまっときます。

引き続き連載を楽しみにしております。それでは。

____

おっしゃる通りです。このページを自動生成するためにつかっている自作の道具があるのですが、それは、なんの因果か半角の+を入れるとHTML上では空白に置き換わっちゃいます。
あとのほうのご指摘は、まったくその通り。ケアレスミスでございます。こっちは言い訳のしようがなし。

訂正しておきました。ありがとうございました。(石田)

ご意見をお聞かせください

  
メールアドレスはWeb上では公開されません





  

デジタル/シゴト/技術topへもどる page top
▲ゴト技top| 第11章 123456789

ポット出版ず・ぼん全文記事石田豊が使い倒すARENAメール術・補遺ちんまん単語DB
デジタル時代の出版メディア・考書店員・高倉美恵パレード写真「伝説のオカマ」は差別か
黒子の部屋真実・篠田博之の部屋篠田博之のコーナー風俗嬢意識調査ゲル自慢S-MAP
ポットの気文ポットの日誌バリアフリーな芝居と映画MOJもじくみ仮名

▲home▲


このサイトはどなたでも自由にリンクしていただいてかまいません。
このサイトに掲載されている文章・写真・イラストの著作権は、それぞれの著作者にあります。
ポットメンバーのもの、上記以外のものの著作権は株式会社スタジオ・ポットにあります。
お問い合せはこちら