検索
特集

2008年、Webは文字列解析で変わっていくまとめサイト2.0(3/8 ページ)

オルタナティブ・ブログを例に挙げて“まとめサイト”を作るための手法を紹介してきたこの連載。最終回は、文字列解析の自動化からキーワードを抽出するための方法を紹介しよう。

PC用表示 関連情報
Share
Tweet
LINE
Hatena

WWW::Mechanizeによるコンテンツの取得

 WWW::Mechanizeは、第2週目で説明したLWP::UserAgentモジュールのサブクラスとして構成されている。

 そのためLWP::UserAgentモジュールのすべてのメソッドを利用できる。つまり、getメソッドの引数に取得したいURLを設定すると、そのURLのコンテンツを取得できる。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 取得が成功したかどうかは、successメソッドで調べることができる。また取得したコンテンツがHTMLであるかどうかは、is_htmlメソッドで調査できる。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 実際のHTMLコンテンツは、contentメソッドで取得できる。このcontentメソッドは、どのような文字コードで書かれているのか分からない。

 本連載では、ここまでEncode::Guessを使って自動判定をしてきたが、「自動巡回」という面では、さまざまなコンテンツが混じるということから、「Content-Typeヘッダ」を見てエンコードしたほうがよいだろう。そのコード記述は次のようになる。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

WWW::Mechanizeでリンクを辿る

 コンテンツを取得するだけならば、LWP::UserAgentモジュールを使うのと何ら変わらない。

 WWW::Mechanizeの特徴は、コンテンツ中に埋め込まれたリンクやHTMLフィールドを操作して、リンク先をたどったり、フォームをサブミットできたりする点にある。今回は自動巡回が目的なのでフォームのサブミットについては省略し、リンクをたどる方法についてのみ説明する。

 リンク先をたどるためのメソッドは、幾つか用意されているが、代表的なのは、find_all_linksメソッドだ。find_all_linksメソッドは括弧内に条件を指定すると、その条件に合致するリンクを示すWWW::Mechanize::Linkオブジェクトを返す。

 次のようにforeachでループすれば、コンテンツに含まれる、それぞれのリンクを取り出せる。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 条件には、表1のようなオプションが利用できる。例えば、

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

とすれば、URLが「http://blogs.itmedia.co.jp/」からはじまるリンクだけを取り出せるのだ。

表1■find_all_linksのオプション

オプション 意味
text リンク文字に特定文字列と合致する
text_regex リンク文字が特定の正規表現とマッチする
url 記載されているURL(相対リンクと絶対リンクのどちらの場合もありうる)が特定の文字列と合致する
url_regex 記載されているURL(相対リンクと絶対リンクのどちらの場合もあり得る)が特定の正規表現とマッチする
url_abs 記載されているURLを絶対リンクに変換したものが特定の文字列と合致する
url_abs_regex 記載されているURLを絶対リンクに変換したものが特定の文字列と合致する
name name属性の値が特定文字列と合致する
name_regex name属性の値が特定の正規表現とマッチする
id id属性の値が特定文字列と合致する
id_regex id属性の値が特定の正規表現とマッチする
class class属性の値が特定文字列と合致する
class_regex class属性の値が特定の正規表現とマッチする
tag リンクのタグ(例えば「a」や「area」「frame」)を指定する
tag_regex リンクのタグ(例えば「a」や「area」「frame」)を正規表現で指定する

 WWW::Mechanize::Linkオブジェクトのurlメソッドは、リンクのURLを示す。リンク先をたどるには、このURLに対してgetメソッドを呼び出せばよい。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 リンク先をたどった後には、backメソッドを呼び出すことで、元のコンテンツに戻ることもできる。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 Webを巡回していくには、再帰呼び出しを使ってそれぞれのリンクをたどって行けばよい。実際に、再帰呼び出しを使って、Webを巡回する例を次ページのリスト1に示す。

 なお、リスト1を実際に試すときには、再帰するレベルに注意しよう。再帰的にコンテンツをたどれば、対象となるサイトにかなりの負荷をかけることになるためだ。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る