Nadine: Titel einer HTML Seite herausfinden

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

  1. 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

    1. 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.

      1. 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

  2. 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

    1. 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

  3. 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

    1. 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 !