2012-03-22 4 views
1

私はperlモジュールWeb :: Scraperを使っていくつかのhtmlタグを解析しようとしていますが、はperlを使っていないと思われます。。誰もが私のコードの間違いを探すことができれば私が...不思議:Web :: Scraperの使用

これは(タグ内の2 URL)を解析するために私のHTMLです:取得しようとし

<more html above here> 
<div class="span-48 last"> 
<div class="span-37"> 
    <div id="zone-extract" class="123"> 
     <h2 class="genres"></h2> 
       <li><a href="**URL_TO_EXTRACT_1**">1</a></li> 
       <li><a class="sel" href="**URL_TO_EXTRACT_2**">2</a></li> 
     <li class="first">Pàg</li> 
    </div> 
</div>  
</div> 
<more stuff from here> 

イム:

ID:1つのリンク:URL_TO_EXTRACT_1

ID:2リンク:このPerlコードでURL_TO_EXTRACT_2

my $scraper = scraper { 
    process ".zone-extract > a[href]", urls => '@href', id => 'TEXT'; 
    result 'urls'; 
}; 
my $links = $scraper->scrape($response); 

これは私は、2つの異なる結果と、無限の試みプロセス組み合わせのいずれかである:空のリターン、またはコード内のすべてのURL(及びIのみゾーン抽出内側リンクが必要)。暴徒の貢献...#ゾーン-エキスの代わりに.zoneエキスで解決

:)以前のエピソードで

+0

:http://stackoverflow.com/a/9821254/46395 – daxim

+4

Isnと'class =" zone-extract "属性を持つ要素に対して 't' .zone-extract'を実行しますか? 'id =" zone-extract "'私はあなたが '#zone-extract'を望むと思うでしょうか? – mob

+0

ありがとうございましたあなたは正しいです、それは今働きます! :P – Courier

答えて

2
#!/usr/bin/env perl 
use strict; 
use warnings; 

use Web::Scraper; 

my $html = q[ 
<div class="span-48 last"> 
<div class="span-37"> 
<div id="zone-extract" class="123"> 
<h2 class="genres"></h2> 
<li><a href="**URL_TO_EXTRACT_1**">1</a></li> 
<li><a class="sel" href="**URL_TO_EXTRACT_2**">2</a></li> 
<li class="first">Pàg</li> 
</div> 
</div>  
</div> 
];  #/(turn off wrong syntax highlighting) 

my $parser = scraper { 
    process '//div[@id="zone-extract"]//a', 'urls[]' => sub { 
     my $url = $_[0]->attr('href') ; 
     return $url; 
    }; 

}; 

my $ref = $parser->scrape(\$html); 

print "$_\n" for @{ $ref->{urls} }; 
関連する問題