HTMLから、どのようなデータを抜き出さなければならないのかが分かったところで、Web::Scraperを使って、実際にスクレイピングしてみよう。
Web::Scraperは、「定型的な使い方の書式」さえ理解すれば、すぐにスクレイピング処理ができる便利なモジュールだ。この書式は、あれこれ説明するよりも、実際に動くソースを見てもらったほうが早い。
まずはWeb::Scraperで、週間ランキングから、「ランキング期間」だけを取り出す例を見てみよう(それぞれのランキング順位を取得する方法は、やや複雑なので、後述する)。ランキング期間の取得条件は、すでに説明したように次の通りだ。
この条件を満たすものをスクレイピングするのが、リスト1だ。
use strict;
use utf8;
use URI;
use Web::Scraper;
use YAML;
my $url =
'http://blogs.itmedia.co.jp/portal2/pastranking.html';
my $scrape = scraper {
process 'div#postranking > div.rankingdata',
'term[]' => 'text';
result 'term';
};
my $result = $scrape->scrape(URI->new($url));
print YAML::Dump($result);
リスト1のプログラムを実行すると、その結果は、次のようになる。
- 12/3〜12/9
- 11/26〜12/2
- 11/19〜11/25
- 11/12〜11/18
- 11/05〜11/11
- 10/29〜11/04
- 10/22〜10/28
〜以下略〜
リスト1では、変数の値に入っているデータをダンプするため、YAMLモジュールを用いているが、これは必須ではない。実際のデータは、リファレンスとなっており、次のようにして値を取り出すことができる。
print $result->[0];
print $result->[1];
ちなみに、「YAML」は人間が読みやすいようにインデントを使って表現したデータ構造書式だ。詳細については、http://www.yaml.org/を参照してほしい。
Web::Scraperの基本的な使い方は、次のようになる。
use URI;
use Web::Scraper;
my $scrape = scraper {
process 抜き出したい条件, 何をどこに設定するか
…必要なだけprocessを並べる…
result 上記processで設定した値のリスト
};
my $result = $scrape->URI->new(コンテンツのURL));
上記に示したように、「use Web::Scraper;」とすると、「scraperブロック」を定義できるようになる。scraperブロックでは、以下の2つを設定する。
1)抜き出す条件を決めるprocess行(複数可)
2)最終的な結果を設定するresult行
この2つの行の設定方法を、順に見ていこう。
Copyright © ITmedia, Inc. All Rights Reserved.