Web サイトのスクレイピングのために Web::Scraper をインストールする。
■ ■ ■
Web サイトから特定の数値などを取り出すことをウェブスクレイピングという (ウェブスクレイピング - Wikipedia)。Perl では Web::Scraper モジュールを使うと,CSS セレクタや XPath を指定すると情報の抽出ができる (Web::Scraper - search.cpan.org)。これをインストールする。
Vine Linux の場合
動作環境は Vine Linux 6.2, cpan 2.10, Web::Scraper 0.38 である。
cpan を使ってインストールするのが簡単。
# cpan -i Web::Scraper
Web::Scraper が使用するモジュールがいくつかあるが,自動でインストールされないこともあるので,必要ならば手動でインストールしておく。
# cpan -i Carp
# cpan -i Scalar::Util
# cpan -i List::Util
# cpan -i HTML::Tagset
# cpan -i HTML::TreeBuilder::XPath
# cpan -i HTML::Selector::XPath
# cpan -i UNIVERSAL::require
# cpan -i XML::LibXML
さて,Web::Scraper には scraper コマンドがついている。scraper コマンドを使うと,Perl プログラムを作らなくても,直接 Web サイトにアクセスして情報が取得できるかどうかを試すことができる。しかも,取得が確認できたら,必要な Perl のソースコードを出力してくれるという便利機能つき。しかし,scraper コマンドは cpan コマンドではインストールされない。cpan を使うと,ソースが ~/.cpan/build/Web-Scraper-0.38-xxxxxx に展開されるので,そこから取り出してやる必要がある。
# cp ~/.cpan/build/Web-Scraper-0.38-xxxxxx/bin/scraper /usr/local/bin
これで完了である。
Mac OS X の場合
Mac ローカルでもテストできる環境を作っておきたい。
動作環境は Mac OS X El Capitan 10.11.6, MacPorts 2.3.4, Perl 5.22.2, cpan 1.61, Web::Scraper 0.38, bash 3.2.57 である。
$ sudo cpan -i Web::Scraper
...
Running Build install
Installing /opt/local/lib/perl5/site_perl/5.22/Web/Scraper.pm
Installing /opt/local/lib/perl5/site_perl/5.22/Web/Scraper/Filter.pm
Installing /opt/local/lib/perl5/site_perl/5.22/Web/Scraper/LibXML.pm
Installing /opt/local/share/perl5.22/siteman/man3/Web::Scraper.3pm
Installing /opt/local/share/perl5.22/siteman/man3/Web::Scraper::Filter.3pm
Installing /opt/local/share/perl5.22/siteman/man3/Web::Scraper::LibXML.3pm
MIYAGAWA/Web-Scraper-0.38.tar.gz
./Build install -- OK
$ sudo cp ~/.cpan/build/Web-Scraper-0.38-xxxxxx/bin/scraper /opt/local/bin
しかし,scraper を実行しようとすると,エラーと言われる。
$ scraper
Can't locate Web/Scraper.pm in @INC (you may need to install the Web::Scraper module) (@INC contains: /Library/Perl/5.18/darwin-thread-multi-2level /Library/Perl/5.18 /Network/Library/Perl/5.18/darwin-thread-multi-2level /Network/Library/Perl/5.18 /Library/Perl/Updates/5.18.2 /System/Library/Perl/5.18/darwin-thread-multi-2level /System/Library/Perl/5.18 /System/Library/Perl/Extras/5.18/darwin-thread-multi-2level /System/Library/Perl/Extras/5.18 .) at ./scraper line 10.
BEGIN failed--compilation aborted at ./scraper line 10.
これは @INC の中に Perl モジュールのパスが入っていないのが原因である。@INC へのパス追加にはいくつかの方法があるようだが,ここでは PERL5LIB 環境変数を使う。
使っているシェルは bash だとすると,~/.bash_profile で環境変数設定すればよい。
$ vi ~/.bash_profile
export PERL5LIB=/opt/local/lib/perl5/site_perl/5.22
このように書くと,@INC の先頭に /opt/local/lib/perl5/site_perl/5.22 が追加される。これで動作するようになる。
エラーをよく見ると perl 5.18 のライブラリを見に行っているのが気になる。これは,Mac の Perl が /usr/bin/perl にあって,これのバージョンが 5.18 で,MacPorts の Perl が /opt/local/bin/perl にあって,バージョンが 5.22.2 なのが原因である。Bash は /opt/local/bin/perl を呼び出していて,プログラムに書いてあるパスは /usr/bin/perl なので不整合が生じている。今回はこれを気に留めておくだけにして,何らかの問題が生じたらチェックすることにする。
Posted by n at 2016-07-16 02:29 | Edit | Comments (0) | Trackback(0)