4

我正在尝试使用 mechanize 从 metacriti* 网站上抓取一些数据,但我没有得到任何输出

这是我的带有 url 示例的代码:

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 似乎很好,因为我在另一个工作脚本中使用相同的语法,我真的不知道这个有什么问题......

另外,由于这只是开始,也许您可​​以建议我另一种简单的方法来抓取/解析网站...如果有更好的方法:)

先感谢您

4

1 回答 1

4

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在这种情况下。

于 2013-10-09T13:46:29.110 回答