要从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标签,它就可以工作。但不是解决方案。
答案 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::DOM(Mojolicious的一部分),它允许您使用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 );