2013-10-09 3 views
4

Я пытаюсь скрести некоторые данные из metacriti * сайт, используя механизировать, но я не получаю никакого выводаPerl дом механизировать XPath

Вот мой код с примером 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 кажется хорошим, и поскольку я использую тот же синтаксис в другом рабочем скрипте, я действительно не мог понять, что не так с этим ...

Также, поскольку это только начало, возможно вы можете предложить мне еще один простой способ очистить/разобрать websit эс ... Если есть лучше один :)

Спасибо заранее

+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 в этом случае.