Perl には LWP::UserAgent と言って、ネット上にあるコンテンツへアクセスすることが可能になるモジュールが存在します。今回はこれの活用例を見ていきましょう。
cpanm をインストール済みの方は、次のコマンドをターミナルに入力してインストールしてください。
cpanm LWP::UserAgent
Ubuntu を使っていて、インストールができない場合は
https://qiita.com/tsig/items/cbfb7918c8d4bc56fb87
の記事を参考にするといいでしょう!
html を取ってくる💪
まずは html を取ってくるようなコードを書いてみましょう。
#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use feature qw/say/;
use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
my $response = $ua->get('http://example.com/');
die $response->status_line if !$response->is_success;
say $response->decoded_content;
http://example.com へアクセスして、成功すれば html を表示して、失敗すればその http のステータスコードを表示するといったコードです。
$response->content
というのもありますが、基本的に $response->decoded_content
を使うようにすると後から考えることが少なくて済みそうです。
とっても簡単!!
html をスクレイピングしてみましょう🐶
スクレイピングならおまかせの相棒を紹介します。HTML::TreeBuilder です。
先ほどのコードにちょこっと加えましょう。
#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use feature qw/say/;
use LWP::UserAgent;
use HTML::TreeBuilder 5 -weak;
my $ua = LWP::UserAgent->new;
my $response = $ua->get('http://example.com/');
die $response->status_line if !$response->is_success;
my $html = $response->decoded_content;
my $tree = HTML::TreeBuilder->new;
$tree->parse($html);
$tree->eof;
say $tree->look_down(_tag => 'h1')->as_text;
use HTML::TreeBuilder 5 -weak;
はおまじないだと思ってください。これを書くことで $tree->delete()
の過程が不要になります。詳しくはここ(英語)を参照してください。
実行結果は以下のように表示されるはずです!
Example Domain
13行のコードで、Yahoo!Japanのトピックス一覧を取得する!にも使い方が書いてますが、基本的に use HTML::TreeBuilder 5 -weak;
を使うようにして $tree->delete()
を書かないといったやり方のほうがシンプルになるのでオススメです!!
ファイルをダウンロードする👇
#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use feature qw/say/;
use LWP::UserAgent;
use HTML::TreeBuilder 5 -weak;
my $ua = LWP::UserAgent->new;
my $file = 'example.com.html';
my $response = $ua->get('http://example.com/', ':content_file' => $file);
die $response->status_line if !$response->is_success;
say "Download success";
正解した場合、実行結果は
Download success
と表示されて ls
を入力すると example.com.html
と表示されるはずです。
cat example.com.html
とするとコンテンツが表示されるはずです!
今日はここまでです!
お疲れ様でした!!