work.log

元エンジニアの備忘録的ブログ

PerlのWebページスクレイピング覚書

投稿:

Perl で Web ページをスクレイピングして、必要な情報を取得するための覚書です。

この手のサンプルは沢山あるので今更ですけども自分用のメモとして残しておきます。

スクレイピングスクリプトのサンプルコード

Perl モジュールに、LWP::UserAgentHTML::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.pl

https://worklog.be/archives/2300
https://worklog.be/archives/2260
.
.
.

こんな具合に簡単にスクレイピングができます。

Web::Scraper というモジュールも便利なようなのでこっちも今度試してみたいと思います。

参考にしたページ

簡単!たった13行のコードでHTML取得&解析をするPerlスクリプト

おすすめのVPSサーバ

  • OSが選べる
  • VPS同士でLANが組める
  • 複数台構成向き

このブログで使っています。

  • 転送量が多いサービスに
  • 借りてるのは3年間一度もdown無し!

よく見られている記事

  • 本日
  • 週間
  • 月間