使用Perl从页面HTML中提取链接

时间:2017-05-03 22:55:15

标签: html perl

要从HTML页面中提取链接,请使用以下代码:

#!/usr/bin/perl

use warnings;
use strict;
use XML::LibXML;

open( SITE, "< index.html" );

my $html = <SITE>; # load the HTML file

my $content = 'XML::LibXML'->load_html(string => "index.html", recover => 1);

my @del = qw( Contact Tables );
my $condition = join ' or ', map "text()='$_'", @del;

for my $anch ($content->findnodes("//a[$condition]/..")) {
$anch->parentNode->removeChild($anch);
}
open (NOTEPAD, ">> index.html"); 

print NOTEPAD "$content"; 

close(NOTEPAD);

我的问题是使用$ file变量来读取HTML页面的内容,它不起作用。

如果我在$ file变量中使用HTML标签,它就可以工作。但不是解决方案。

3 个答案:

答案 0 :(得分:2)

您可use WWW::Mechanize;完成任务。

my $mech  = WWW::Mechanize->new();

$mech->get( $url );     #url to extract links
my @links = $mech->links();
foreach my $link (@links) {
     my $curr_url = $link->url_abs; 
}

有关此模块的完整文档,请参阅WWW::Mechaniize

答案 1 :(得分:1)

您可以使用Mojo::DOMMojolicious的一部分),它允许您使用CSS选择器,我认为这是一种更好的方法;

use Mojo::DOM;
use Mojo::File qw( path );

my $dom = Mojo::DOM->new( path('index.html')->slurp );

foreach ( $dom->find('a')->each ) {
    # Do something with $_
}

my $html = $dom->to_string;

答案 2 :(得分:0)

您的程序打开文件index.html,将一行读入$html,然后尝试解析字符串index.html,就像它是HTML数据一样

忘记打开和阅读文件;您可以XML::LibXML为您完成所有这些操作,

my $content =  XML::LibXML->load_html( location => 'index.html', recover => 1 );