読者です 読者をやめる 読者になる 読者になる

akimachoのはてなブログ

ICTとデザインのためのブログ

Perlでスクレイピングしてみる - Web::Scraper

Perl CPAN プログラム

はじめに

今回は、手軽にスクレイピングを行うWeb::Scraperを紹介したいと思います。

Web::Scraperについて

スクレイピングとは、一言でいえば「Webページからほしい情報を取ってくる」ことです。

詳しくは、Wikipediaを参照。

ウェブスクレイピング - Wikipedia

さて今回紹介するPerlCPANモジュールWeb::Scraperは、HTMLのタグやセレクタを使ってスクレイピングを行うツールです。

作者は、ポッドキャストRebuildやPlackなどでお馴染みのMiyagawaさんです。

また、

https://metacpan.org/pod/Web:

によればWeb::Scraperは、RubyGemsのScrapiにインスパイアされたものみたいです

使いかた

基本的な使いかた

以下のような流れになります。

  1. scraperとprocessで取得する情報の構造を指定する
  2. scrapeで指定したURLから情報を取得する

まずscraperでWeb::Scraperインスタンスを作成します。

その際にscraperに引数としてブロック{}を与えます。

ブロック内では、processを使い

  • 取得するデータのタグやセレクタ
  • 取得するデータを格納するハッシュのキーと値

を設定します。

以下のコードは、Wikipedediaのページからtitleを取得するプログラムのコードです。

use strict;
use warnings;
# まず、Web::ScraperとURIを読み込みます
use Web::Scraper;
use URI;
use Encode qw/encode_utf8/;
# Web::Scraperインスタンスを作成します
# パラメタとして、ブロック{}内において
# processでタグやセレクタを指定し、
# ハッシュのキーと値を設定します
my $scraper = scraper {
        # 例のコードでは、キーとして'title'を、値として
        # headタグ内のtitleタグの中身(テキスト)をハッシュに格納します
        # titleは一意的なのでいらないのですが一応
    process('head title', 'title' => 'TEXT');
};
my $url = URI->new('https://ja.wikipedia.org/');
# 指定したURLに対して、スクレイピングを行います
my $res = $scraper->scrape($url);
# scrape()の戻り値はハッシュリファレンスです
# 
print encode_utf8($res->{title}) . "\n";
# => Wikipedia

おわりに

Web::Scraperを使って、お手軽にスクレイピングする方法を紹介してみました。

追記

Web::Queryというモジュールも紹介してみましたので、良かったらぜひ。

akimacho.hatenablog.com

参考

http://search.cpan.org/~miyagawa/Web-Scraper-0.38/lib/Web/Scraper.pm

perl-users.jp