Привет user2186465 Добро пожаловать в Stack обмен: -)
Когда вы назначаете и печатаете вывод из HTML::TreeBuilder::XPath
метода findnodes->()
, по умолчанию он по-разному обрабатывает/выполняет рендеринг узел <div>
и возвращает содержимое в виде текста. Наряду с этим он возвращает объект XML::XPathEngine::NodeSet
(который использует HTML::TreeBuilder::XPath
) и массив со ссылкой на объект HTML::Tree
, который имеет то, что вы хотите. Вы должны назначить этот опорный элемент массива к вашим $rank
переменным, иначе вы просто получите текст:
my $rank = $t->findnodes('//div[@class="productSpecs specSection"]')->[0];
(NB: это появляется где-то в документации в качестве примера, но не выдающийся) , Как только у вас есть объект HTML::Element
, вы можете использовать один из его методов с помощью инструкции печати, чтобы получить содержимое.
Без ->[0]
вы получаете визуализированный текст, а print $rank
просто показывает, что; но с ->[0]
вы получаете доступ к объекту и его методам, поэтому print $rank->as_HTML
может отображать необработанный HTML-контент с узла (->as_XML
также работает). HTML::TreeBuilder::XPath
также имеет удобный способ as_XML_indented
, чтобы облегчить чтение. Таким образом:
use strict;
use LWP::Simple;
use HTML::TreeBuilder::XPath qw();
my $url="http://www.flipkart.com/samsung-b310e-guru-music-2/p/itmdz9am8xehucbx";
my $content = get($url);
my $t = HTML::TreeBuilder::XPath->new;
$t->parse($content);
my $rank = $t->findnodes('//div[@class="productSpecs specSection"]')->[0];
print $rank->as_XML_indented ;
должно делать то, что вы хотите.
НТН
Я дает текст ... но мне нужно это с HTML ... Как я могу получить HTML внутри элемента сНа? – user2186465
+1 хороший ловушка :-) Я продолжил свой ответ в своем и попытался объяснить, почему появился только рендер, но не полный HTML. –