Web上で必要な情報だけを取り出せると、さまざまなデータ解析が可能だ。取り出すためのポイントは定型化されている個所を見つけること。あとは記事内で紹介するスクリプトで処理してみよう。
このコンテンツは、オンライン・ムックPlus「まとめサイト2.0」の一部です。関連する記事は、こちらでご覧になれます。
今回は、RSSをパースして含まれているブログ投稿タイトルと、そのリンク先のページ内容をたどり、ページ内に含まれる一部分を切り出すスクレイピングの基礎を解説していく。記事内では、実際にオルタナティブ・ブログに含まれるHTML内容を挙げていく。
なお、この記事は主にWebサーバ上のシェルで特定のコマンドを使うことができる読者が対象となるが、最近ではレンタルサーバでシェルを使うことができる廉価なプランも多い。このため、「今までは触ったことがなかったけれど、より魅力的なサイトを作り上げることができるならばチャレンジしてみよう……」。そのような動機もありだろう。
また今回の記事内容では、RSS内で各投稿のタイトルをすべてマッチング処理を行い同じ投稿タイトルを判別、そして「コメントの数」が多い順に並べるというスクリプトの作成となる。これは汎用性のあるスクリプトになるため、さまざまな内容のRSSで応用することができるのもポイントだ。前回に続く内容となるが、ここまでの内容で特定情報のみを抽出する基礎部分が出来上がる。
このようにして作り出したスクリプトの処理を自動化し、定期的に情報取得することで付加価値を高めたサイトを作りだす。これがオンライン・ムックPlus「まとめサイト2.0」の最終目的である。
まずは記事のURLを取得するための、RSSの解析から始めよう。RSSはXML形式のデータであり、XML処理モジュールを使って解析可能だ。
しかしながら、RSSには幾つかのバージョンがあり、すべてに対応するのは難しい。そこで、汎用的なXMLモジュールではなく、RSS処理専用のモジュールのほうが使いやすい。ここでは、CPANに登録されているXML::RSSを使い、実装していくことにする。
XML::RSSモジュールは、オープンソースとして公開されているスクリプトであり、「RSSの生成」と「RSSの解析」どちらの処理も可能なものだ。ここでは、RSSの解析方法についてのみ説明する。
XML::RSSモジュールを解析するには、単純に、parseメソッドを呼び出すだけでよい。例えば、前回作成したgetWebContent関数(前回のリスト1)を使い、次のようにして、$rssdata変数に、RSSデータを格納しているとしよう。
my $url =
'http://blogs.itmedia.co.jp/index.rdf';
my ($rssdata, $lastmodified) =
getWebContent($url,undef);
この時、XML::RSSモジュールを使って次のようにparseメソッドを呼び出すと、RSSがパースされ、結果が得られる。
use XML::RSS;
my $rss = new XML::RSS;
$rss->parse($rssdata);
結果は、ハッシュとして参照できる。例えば、RSS 1.0の場合、次ページに挙げるように構成されている。
Copyright © ITmedia, Inc. All Rights Reserved.