Titel einer HTML Seite herausfinden
Nadine
- perl
0 AlexBausW0 Manfred0 Calocybe
0 Kai Diefenbach
Hallo Allerseits,
meine Frage:
Wie bekomm ich aus einer beliebigen HTML-Datei den Titel heraus?
Ich will also das was zwischen <title> und </title> steht in einem Skalar speichern! Man muß dafür reg Ausgrücke verwenden oder?
Bin Perl Anfänger!
Viele Grüße und Danke
Nadine
Hallo Nadine,
Ich will also das was zwischen <title> und </title> steht in einem Skalar speichern! Man muß dafür reg Ausgrücke verwenden oder?
Genau, und zwar suchst Du beliebige Zeichen . zwischen zwei feststehenden Strings.
Ein Vorschlag wäre, falls Deine Html-Datei in einer einzigen Variable steht:
($title) = $content =~ /<title>(.*?)</title>/s;
^.... Mehrzeilige Suche nach der...
^................ kleinstmöglichen Anzahl von...
^................. keinem oder vielen...
^.................. beliebigen Zeichen innerhalb der Klammer...
^......................................... und zuweisen an eine Variablenliste (hier nur eine Variable)
Ich hoffe das hilft Dir weiter
Gruß AlexBausW
hi ho
($title) = $content =~ /<title>(.*?)</title>/s;
erster haken: :-)
<TITLE>Hallo</TITLE>
:-))
also -> /..../si # i = case insensive :-)
theoretisch muesste man noch einige sachen rausfiltern (z.B., obs im head steht, nicht in einem <script/>-Teil steht, udgl.)
cua
n.d.p.
Hallo eNDe ;-),
erster haken: :-)
<TITLE>Hallo</TITLE>
also -> /..../si # i = case insensive :-)
Das habe ich in Anbetracht des ausgesetzten Preises für das 100.000ste Posting absichtlich "vergessen", damit jeder Vielposter die Chance hat, mit einem nicht "Nur wegen des Preises"-Posting (siehe Ausschlußkriterien von S.Muenz) eben dieses abzusondern ;-) Natürlich wollte ich mir auch die Möglichkeit offen lassen, heute Nacht bzw. morgen früh (wenn es nach meinen Hochrechnungen zufolge soweit ist) die entsprechende Vervollkommnung zu posten *g*
theoretisch muesste man noch einige sachen rausfiltern (z.B., obs im head steht, nicht in einem <script/>-Teil steht, udgl.)
Aber es ist wie bei jedem Programm: In 99% der fälle läuft es einwandfrei, und die 1% können wir vernachlässigen ;-)
(Hoffentlich war das Provokant genug, um eine Diskussion anzuzetteln, innerhalb derer sich das 100.000 Posting findet *g* Vielleicht gibt`s für den "Anstifter" ja auch einen Preis ;-)
Gruß AlexBausW
Hallo Nadine,
Ich will also das was zwischen <title> und </title> steht in einem Skalar speichern! Man muß dafür reg Ausgrücke verwenden oder?
Ja mit regex hast Du richtig getippt.
Der folgende Befehl liefert aus $Record den $Title:
($Title) = $Record =~ /<title>(.+)</title>/im;
Regex und den Umgang damit solltest/musst Du Dir unbedingt aneignen, wenn Du mit Perl arbeiten willst - das ist unumgaenglich - und wenn eine Regex einmal nicht so will, wie Du es Dir vorstellst, nicht verzagen - Regex hat so seine Tuecken (selbst bei einfach scheinenden Aufgaben).
Noch ein Tip, damit die Scripts auch halbwegs wartbar bleiben: Mit Regex kann man 'Wunderdinge', als Einzeiler formuliert, vollbringen; aber die Wartung des Script kann dadurch sogut wie unmoeglich werden. Daher lieber ein paar Zeilen und Variablen mehr 'verbraten' und "RegEx-Geniestreiche" vermeiden.
Viel Erfolg
Manfred
Moin!
Noch ein Tip, damit die Scripts auch halbwegs wartbar bleiben: Mit Regex kann man 'Wunderdinge', als Einzeiler formuliert, vollbringen; aber die Wartung des Script kann dadurch sogut wie unmoeglich werden. Daher lieber ein paar Zeilen und Variablen mehr 'verbraten' und "RegEx-Geniestreiche" vermeiden.
Dazu waere zu sagen, dass man diese Geniestreiche durchaus ueber mehrere Zeilen verteilen und kommentieren kann, das geht z.B. so:
$content =~ m
<title> # title start tag
(.*?) # the stuff between
</title> # title end tag
ix;
Das x ganz am Ende des mehrzeiligen Ausdrucks macht's moeglich. Damit werden (white-)spaces und Kommentare ignoriert (will man # trotzdem im regexp verwenden, muss man es mit \ maskieren).
So long
Hallo Nadine,
Hallo Allerseits,
meine Frage:
Wie bekomm ich aus einer beliebigen HTML-Datei den Titel heraus?
Ich will also das was zwischen <title> und </title> steht in einem Skalar speichern! Man muß dafür reg Ausgrücke verwenden oder?
Nicht unbedingt:
#!perl -w
require HTML::HeadParser;
use strict
$p = HTML::HeadParser->new();
$p->parse_file('pfad/zur/datei');
print $p->header('title');
s. perldoc HTML::Parser.
Wenn's bisschen anspruchsvoller wird, sollte man zum parsen von HTML
perldoc HTML::Parser
verwenden.
Viele Grüße und Danke
Nadine
Gruss
Kai
Aehh,
#!perl -w
require HTML::HeadParser;
use strict;
my $p = HTML::HeadParser->new();
$p->parse_file('c:\index.html');
print $p->header('title');
natuerlich, sorry !