这是我的问题,我试图读取HTML文件(index.html),然后搜索所有链接,然后将其放在名为salida.html的第二个文件中,我读了this answer,我读了此答案,我尝试这样做,但是对我来说不起作用。 这是我的perl代码:
use strict;
use warnings;
use 5.010;
use Tie::File;
my $entrada='index.html';
my $salida='salida.html';
open(A,"<$entrada");
my @links;
foreach my $linea (<A>){
print "Renglon => $linea\n" if $linea =~ m/a href/;
#print $B $linea if $linea =~ m/a href/;
push @links, $linea if $linea =~ m/a href/;
}
tie my @resultado, 'Tie::File', 'salida.html' or die "Nelson";
for (@resultado) {
if ($_ =~ m/<main class="contenido">/){
foreach my $found (@links){
$_ .= '<br/>'.$found;
}
last;
}
}
close(A);
我的Perl代码运行没有问题,但是在我的代码中,我试图在salida.html文件的特定部分中写入变量$ links中的链接:
<!DOCTYPE html>
<html lang="es-mx">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Resultados de la busqueda</title>
<link rel="stylesheet" href="style-salida.css">
</head>
<body>
<div class="contenedor">
<header class="header">
<h2>Resultados de la busqueda</h2>
</header>
*<main class="contenido">
</main>*
<footer class="footer">
<h4>
Gerardo Saucedo Arevalo - 15092087 - Topicos selectos de tecnologias web - Búsqueda de enlaces dentro de
una página web
</h4>
</footer>
</div>
</body>
</html>
但是我的代码总是在文件末尾添加行,我只运行了一次该代码,并且效果很好,但是随后我添加了几行,而当我尝试再运行一次时却没有用。 我恢复了文件的工作状态,但此文件不再工作。 我在做什么错了?
答案 0 :(得分:0)
始终使用适当的解析器处理HTML或XML,然后对DOM进行处理。我的解决方案使用HTML::TreeBuilder。由于您的问题不包含index.html
的内容,因此我在解决方案后附加了自己的内容:
#!/usr/bin/perl
use warnings;
use strict;
use HTML::TreeBuilder;
# Extract links from <DATA>
my $root1 = HTML::TreeBuilder->new->parse_file(\*DATA)
or die "HTML: $!\n";
my @links = $root1->look_down(_tag => 'a');
# Process salida.html from STDIN
my $root2 = HTML::TreeBuilder->new;
$root2->ignore_unknown(0);
$root2->parse_file(\*STDIN)
or die "HTML: $!\n";
# insert links in correct section
if (my @nodes = $root2->look_down(class => 'contenido')) {
$nodes[0]->push_content(@links);
}
print $root2->as_HTML(undef, ' '), "\n";
# IMPORTANT: must delete manually
$root2->delete;
$root1->delete;
exit 0;
__DATA__
<!DOCTYPE html>
<html>
<head>
<title>test</title>
</head>
<body>
<div>
<a href="link1.html">Link 1</a>
<a href="link2.html">Link 2</a>
</div>
</body>
</html>
试运行:
$ perl dummy.pl <dummy.html
<!DOCTYPE html>
<html lang="es-mx">
...
<main class="contenido"> <a href="link1.html">Link 1</a><a href="link2.html">Link 2</a></main>
...
</html>