Perl で Web ページをスクレイピングして、必要な情報を取得するための覚書です。
この手のサンプルは沢山あるので今更ですけども自分用のメモとして残しておきます。
スポンサーリンク
スクレイピングスクリプトのサンプルコード
Perl モジュールに、LWP::UserAgent と HTML::TreeBuilder を利用します。
依存モジュールも多く手動インストールは面倒くさいので cpan 等を使ってインストールすることをオススメします。
以下のよなスクリプトを書いて自分のブログでテストをしてみます。
ブログトップページに表示されるエントリータイトルを取得して表示するスクリプトです。
#!/usr/bin/perl use strict; use warnings; use LWP::UserAgent; use HTML::TreeBuilder; my $url = 'https://worklog.be/'; my $ua = 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)'; my $timeout = '10'; my $lwp = LWP::UserAgent->new( agent => $ua, timeout => $timeout ); ## Cookie を保存する場合 #my $cookie = time(); #$lwp->cookie_jar({ file =>$cookie, autosave=>1 }); ## コンテンツの取得 my $res = $lwp->get( $url ); ## コンテンツの取得成功時 if ( $res->is_success ) { ## TreeBuilder でコンテンツを解析 my $tree = HTML::TreeBuilder->new; $tree->parse( $res->content ); $tree->eof(); ## 解析データの取得処理 ## id に content が付いた h1 要素を探す foreach ( $tree->look_down('id', 'content')->find('h1') ) { print $_->as_text . "\n"; } ## 解析が終わったらデータをクリア $tree = $tree->delete; ## コンテンツの取得失敗時 } else { print "get error\n"; } exit;
実行結果は以下です。
# perl scraping.pl HAProxyをコマンドラインから操作する HAProxyの運用状況とチューニングの覚書 CentOS6にHAProxy1.5をインストール WordPressの「最近の投稿」にアイキャッチ画像を付ける Perlでマルチプロセスなデーモン WordPressのソーシャルボタン用スクリプトを最適化 jpegtranでJPEG画像を最適化してみる PngcrushでPNG画像を最適化してみる kickstartでCentOS6の自動インストール WordPressの画像バイト数を削って高速化のまとめ
URL リンクを表示する場合はこんな感じになります。
. . . ## id に content が付いた h1 要素を探す foreach ( $tree->look_down('id', 'content')->find('h1') ) { ## a 要素に含まれる href 属性を探し表示する print $_->find('a')->attr('href') . "\n"; } . . .
こちらの実行結果は以下です。
# perl scraping.plHAProxyをコマンドラインから操作するhttps://worklog.be/archives/2260 . . .
こんな具合に簡単にスクレイピングができます。
Web::Scraper というモジュールも便利なようなのでこっちも今度試してみたいと思います。
参考にしたページ