Unter Schirmherrschaft von
Factory Seven Media & Consulting
running-cool.de
   X   

[Krankheiten von A bis Z]

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

   X   

[Medikamente von A bis Z]

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

   X   

[Diagnostik & Laborwerte von A bis Z]

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

   X   

[Therapieverfahren von A bis Z]

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

   X   

[Gesundheitsthemen von A bis Z]

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

   X   

[Symptome von A bis Z]

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

   X   
Suche

Perl: Extraktion von Werte und Zeichen aus einer HTML-Datei die zwischen HTML-Tags stehen

In Perl gibt es mehrere Möglichkeiten, Werte zwischen einem öffnenden und schließenden HTML-Tag aus einer HTML-Datei zu extrahieren. Eine Möglichkeit ist die Verwendung von regulären Ausdrücken und der HTML::Parser-Module.

Reguläre Ausdrücken zum parsen von HTML-Seiten

Hier ist ein Beispielprogramm, das den Text zwischen-Tags aus einer HTML-Datei extrahiert:

Listing 1: Extraktion des Title-Tags


use strict;
use warnings;

my $filename = 'example.html';

open(my $fh, '<', $filename) or die "Could not open file '$filename' $!";

my $content = join '', <$fh>;

if ($content =~ /<title>(.*?)<\/title>/is) {
print $1 . "\n";
} else {
print "Title tag not found\n";
}


In diesem Beispiel wird eine HTML-Datei example.html geöffnet und der gesamte Inhalt in einer Zeichenkette $content gespeichert. Dann wird ein regulärer Ausdruck verwendet, um den Text zwischen-Tags zu extrahieren. Der Ausdruck /is am Ende des regulären Ausdrucks aktiviert den "case-insensitive"-Modus (i) und den "dot-matches-all"-Modus (s), was bedeutet, dass der Punkt (.) auch Zeilenumbrüche überspringt.

Wenn das-Tag gefunden wird, wird der extrahierte Text ($1) ausgegeben. Wenn das-Tag nicht gefunden wird, wird "Title tag not found" ausgegeben.

Dieses Beispiel kann angepasst werden, um andere Tags zu extrahieren oder unterschiedliche Attribute zu verwenden. Allerdings ist es wichtig zu beachten, dass reguläre Ausdrücke nicht immer die beste Methode sind, um HTML zu analysieren. Wenn die HTML-Datei komplexer wird oder unvorhersehbare Strukturen aufweist, ist es möglicherweise besser, einen Parser zu verwenden.

HTML::Parser zum parsen von HTML-Seiten

HTML::Parser gehört nicht zum Perl-Standardpaket. Es handelt sich um ein Modul, das separat installiert werden muss.

Allerdings ist es in der Regel auf den meisten Perl-Installationen verfügbar, da es sehr häufig verwendet wird und als ein wichtiges Modul für die Verarbeitung von HTML gilt. In vielen Fällen ist es bereits als Teil eines Perl-Distributions-Pakets oder als Teil des Betriebssystem-Paketsystems installiert.

Wenn es nicht bereits installiert ist, kann es mit Hilfe von CPAN (Comprehensive Perl Archive Network) installiert werden, einem Online-Archiv von Perl-Modulen, die leicht installiert und aktualisiert werden können.

Listing 2: Beispielprogramm, das alle <a>-Tags aus einer HTML-Datei extrahiert:


use strict;
use warnings;
use HTML::Parser;

my $filename = 'example.html';

open(my $fh, '<', $filename) or die "Could not open file '$filename' $!";

my @links;

my $p = HTML::Parser->new(
start_h => [\&start, "tagname,attr"],
);

$p->parse_file($fh);

sub start {
my ($tagname, $attr) = @_;
if ($tagname eq 'a') {
push @links, $attr->{href};
}
}

print join("\n", @links) . "\n";


In diesem Beispiel wird eine HTML-Datei example.html geöffnet und an den HTML::Parser übergeben. Die start_h-Funktion wird jedes Mal aufgerufen, wenn ein neues Tag beginnt. Wenn das Tag ein -Tag ist, wird der href-Wert des attr-Hashs extrahiert und zur @links-Liste hinzugefügt. Am Ende werden alle Links in @links ausgegeben. Dieses Beispiel kann angepasst werden, um andere Tags zu extrahieren oder unterschiedliche Attribute zu verwenden.

Was kann das Modul  HTML::Parse

Das Modul HTML::Parser ist ein leistungsfähiger Parser, der es ermöglicht, HTML-Code effektiv zu verarbeiten. Hier sind einige der Hauptfunktionen, die mit diesem Modul möglich sind:

  • Extrahieren von Tags und Attributen: Das Modul ermöglicht es, bestimmte HTML-Tags und die zugehörigen Attribute zu extrahieren und zu analysieren.
  • Modifizieren von HTML: Das Modul ermöglicht es, den HTML-Code zu modifizieren, bevor er ausgegeben wird. So kann z.B. der Text zwischen Tags geändert oder Tags hinzugefügt oder entfernt werden.
  • Überprüfen von HTML: Das Modul kann verwendet werden, um zu überprüfen, ob der HTML-Code gültig ist und den Standards entspricht.
  • Einfache Bedienung: Das Modul ist sehr einfach zu bedienen und erfordert nur minimale Kenntnisse der Perl-Programmierung. Unterstützung von Callbacks:
  • Das Modul unterstützt Callbacks, die bei bestimmten Ereignissen im Parsing-Prozess aufgerufen werden. Dies ermöglicht es, benutzerdefinierte Funktionen zu schreiben, die bei bestimmten Ereignissen im Parsing-Prozess ausgeführt werden sollen.

Diese Funktionen machen das HTML::Parser-Modul zu einem leistungsfähigen Werkzeug für die Verarbeitung von HTML-Code in Perl.

Entfernen von Tags aus einer HTML-Datei

Das folgende Skript liest eine HTML-Datei ein und entfernt alle script-Tags aus dem Dokument:

Listing 3: Entfernen von script-Tags


use HTML::Parser;

my $file = "example.html";
my $output_file = "output.html";
my $skip_script = 0;
my $data = '';

my $p = HTML::Parser->new(
api_version => 3,
start_h => [\&start, "tagname"],
end_h => [\&end, "tagname"],
text_h => [\&text, "dtext"],
default_h => [\&default, "text"],
);

$p->parse_file($file);

sub start {
my ($tagname) = @_;

if ($tagname eq "script") {
$skip_script = 1;
}
}

sub end {
my ($tagname) = @_;

if ($tagname eq "script") {
$skip_script = 0;
}
}

sub text {
my ($text) = @_;

if (!$skip_script) {
$data .= $text;
}
}

sub default {
my ($text) = @_;

if (!$skip_script) {
$data .= $text;
}
}

open my $fh, '>', $output_file or die "Cannot open $output_file: $!";
print $fh $data;
close $fh;

print "Script tags removed from $file and saved to $output_file.\n";


Extraktion von Inhalt zwischen zwei HTML-Tags

Um den Inhalt zwischen zwei HTML-Tags mit Perl und dem Modul HTML::Parser zu extrahieren, kann das text_h-Ereignis des Parsers verwendet werden. Das Ereignis wird ausgelöst, wenn der Parser Textdaten zwischen HTML-Tags findet.

Listing 4: Beispiel, das den Inhalt zwischen einem öffnenden und einem schließenden p-Tag in einer HTML-Datei extrahiert:


 use HTML::Parser;

my $file = "example.html";
my $output_file = "output.txt";
my $p_tag = 0;
my $data = '';

my $p = HTML::Parser->new(
api_version => 3,
start_h => [\&start, "tagname"],
end_h => [\&end, "tagname"],
text_h => [\&text, "dtext"],
);

$p->parse_file($file);

sub start {
my ($tagname) = @_;

if ($tagname eq "p") {
$p_tag = 1;
}
}

sub end {
my ($tagname) = @_;

if ($tagname eq "p") {
$p_tag = 0;
}
}

sub text {
my ($text) = @_;

if ($p_tag) {
$data .= $text;
}
}

open my $fh, '>', $output_file or die "Cannot open $output_file: $!";
print $fh $data;
close $fh;

print "Content between <p> tags extracted from $file and saved to $output_file.\n";


 Dieses Skript liest die HTML-Datei example.html ein und extrahiert den Text zwischen den p-Tags. Der extrahierte Text wird dann in eine Textdatei output.txt geschrieben.

Es können die Variablen $file und $p_tag anpassen werden, um den Inhalt zwischen anderen HTML-Tags zu extrahieren.

Inhaltsverzeichnis Top
Wir benutzen Cookies

Wir nutzen Cookies auf unserer Website. Einige von ihnen sind essenziell für den Betrieb der Seite, während andere uns helfen, diese Website und die Nutzererfahrung zu verbessern (Tracking Cookies). Sie können selbst entscheiden, ob Sie die Cookies zulassen möchten. Bitte beachten Sie, dass bei einer Ablehnung womöglich nicht mehr alle Funktionalitäten der Seite zur Verfügung stehen.