2013-10-09 64 views
4

我試圖使用從機械化刮metacriti一些數據*網站,但我沒有得到任何輸出perl的DOM機械化的XPath

這裏是我的代碼示例網址:

my $metaURL = "http://www.metacriti*.com/game/pc/dota-2"; 

my $mech = WWW::Mechanize->new(); 
$mech->get($metaURL) or die "unable to get $metaURL"; 

my $tree = HTML::TreeBuilder::XPath->new; 
$tree->parse($mech->content); 

my @nodes = $tree->findnodes(q{//*[@id="main"]//a[contains(./@href, "user-reviews")]/span[@class="score_value"]}); 

print $_->string_value, "\n" foreach(@nodes); # text 

@nodes陣列似乎是空的,我的XPath似乎很好,因爲我在另一個工作腳本中使用相同的語法,我真的無法弄清楚這個有什麼問題...

此外,因爲這只是開始,也許你可以建議我另一個簡單的方法來刮/解析網站ES ......如果有任何更好的:)

預先感謝您

+2

['Mojo :: DOM'](https://metacpan.org/module/Mojo::DOM) – Zaid

+0

@Zaid,非常好的lib ...非常感謝<3 – Enissay

+0

不客氣。 – Zaid

回答

3

的HTML似乎是真的不好,如果搜索$tree->findnodes('//div[@id="main"]')->[0]->as_HTML你得到一個非常裸露的div:

<div class="col main_col" id="main"><div itemscope="itemscope" itemtype="http://schema.org/SoftwareApplication"></div></div> 

這確實不包含任何a,這解釋了你得到的結果。

我試着用tidy來漂亮地打印HTML,但是它在文件上被咬了。

如果您忘記了div並使用q{//a[contains(./@href, "user-reviews")]/span[@class="score_value"]}您將得到一個結果,但在這種情況下,您將得到一個結果7.9