1

私は、私のためにいくつかの壁紙をダウンロードした古いスクリプトを改善しています。1 つのカテゴリに含まれる壁紙のページ数を知る必要があります。各リンクには、テキストとしてページ番号が含まれています。つまり、次のようになります。

<a href="/planes-desktop-wallpapers/page/8">8</a>
<a href="/planes-desktop-wallpapers/page/9">9</a>
<a href="/planes-desktop-wallpapers/page/10">10</a>

したがって、10 という数字を取得する必要がありますが、正規表現にあまり精通していません。この場合、ページ数を取得するにはどうすればよいでしょうか。

事前にt​​nx!

4

2 に答える 2

5

HTML正規表現を使用して解析したくない場合。この場合、正規表現を使用すると、遅かれ早かれデータが改ざんされます。モジュールを使用してこれを行う方がはるかに優れています。

この例では、 と を使用HTML::TreeBuilderしてList::Utilいます。各カテゴリの最高値が必要な場合、これを行う別の方法は、TreeBuilder::XPath を使用して特定のセクションのすべてをクエリすることです。

use strict;
use warnings;
use HTML::TreeBuilder;
use List::Util qw( max );

my $data
   = '<a href="/planes-desktop-wallpapers/page/8">8</a>\n'
   . '<a href="/planes-desktop-wallpapers/page/9">9</a>\n'
   . '<a href="/planes-desktop-wallpapers/page/10">10</a>'
   ;

my $tr = HTML::TreeBuilder->new_from_content($data); 

my @vals =
     map { [ $_->attr('href'), $_->content_list ] } 
     max ( $tr->look_down( _tag => 'a') );

use Data::Dumper;
print Dumper \@vals;

__OUTPUT__
$VAR1 = [
          [
            '/planes-desktop-wallpapers/page/10',
            '10'
          ]
        ];

代わりにテキスト(数値)だけが必要な場合は、次のようにします。

my @vals = map { $_->content_list } max ( $tr->look_down( _tag => 'a') );
于 2013-07-06T06:12:44.893 に答える