Estoy escribiendo un script básico que simplemente extrae todos los enlaces de una página web. Está escrito en Perl y hace uso de los módulos WWW :: Mechanize y HTML :: Treebuilder :: Xpath, que he instalado a través de CPAN.HTML Treebuilder XPath para extraer enlaces
Sé que se puede hacer fácilmente utilizando solo WWW :: Mechanize, pero también me gustaría aprender a hacerlo con XPath.
Por lo tanto, el script analizará toda la página web, y comprobará el atributo href para cada etiqueta de anclaje, extraerá el enlace, lo imprimirá en la consola/lo escribirá en un archivo. Tenga en cuenta que en el script a continuación, no he usado el uso estricto, ya que solo estoy escribiendo esto para aclarar y comprender el concepto de usar XPath para atravesar el árbol HTML.
aquí es el guión:
#! /usr/bin/perl
use WWW::Mechanize;
use HTML::TreeBuilder::XPath;
use warnings;
$url="https://example.com";
$mech=WWW::Mechanize->new();
$mech->get($url);
$tree=HTML::TreeBuilder::XPath->new();
$tree->parse($mech->content);
$nodes=$tree->findnodes(q{'//a'}); # line is modified later.
foreach $node($nodes)
{
print $node->attr('href');
}
y da un error:
Can't locate object method "attr" via package "XML::XPathEngine::Literal" at pagegetter.pl line 23.
He modificado la secuencia de comandos de la siguiente manera:
$nodes=$tree->findnodes(q{'//a/@href'});
while($node=$nodes->shift)
{
print $node->attr('href');
}
error:
Can't locate object method "shift" via package "XML::XPathEngine::Literal"
No estoy seguro, cómo imprimir el valor del atributo href.
$ nodes debe contener la lista de todos los atributos de href? Creo que no almacena el valor, sino que apunta a él.
Intenté buscar y leer ejemplos, sin embargo, no estoy seguro de cómo hacerlo.
Gracias.
Usted debe * siempre * 'usar strict', sin importar cuán trivial sea su programa. Podría decirse que es más importante que 'uses advertencias 'que hayas elegido usar. – Borodin