HTML-Parser: Store the results of the job in MySQL-Database

Hello dear Experts

this code runs and parses html pages. I want to store the results in mysql database.

is this possible…

#!/usr/bin/perl

use strict;            # alles muss definiert sein
use warnings;          # wenn etwas nicht so ganz richtig ist warnen
use diagnostics;       # wenn etwas nicht passt ist warnen
use File::Find::Rule;  # finde Dateien/Verzeichnisse anhand von Regeln
use HTML::TokeParser;  # parse HTML-Dateien zum leichten auslesen von Daten

# Array in der alle Schulen mit ihren Daten gespeichert werden sollen
my @schools;

# Das Verzeichnis im dem gesucht werden soll
my $search_dir='.'; # ist das aktuelle Arbeitsverzeichnis

# die Datei in die alles gespeichert werden soll
my $out_file='./output.xml';

# Suche nach bestimmten Dateinamen
my @files= File::Find::Rule->file()            # suche eine Datei
                ->name('einzelergebnis*.html') # die mit "einzelergebnis" (alles klein geschieben!) beginnt und mit ".html" endet
                ->in($search_dir);              # suche in dem Verzeichnis


#gehe alle gefundenen Dateien durch
for my $file (@files)
{
  # Ausgabe, damit man weiß waw passiert.
  print "Bearbeite nun datei: $file!
";

  # Speichrort für die Schuldaten in dieser Datei
  my %school;

  # starte seine neue Parser-Instanz mit der Datei als Quelle
  my $p = HTML::TokeParser->new($file) or die "Can't open $file: ($!)";

  #solange ein Tag von Typ 'div' gefunden wird
  while (my $tag = $p->get_tag('div', '/html'))
  {
    # first move to the right div that contains the information
    last if $tag->[0] eq '/html';
    next unless exists $tag->[1]{'id'} and $tag->[1]{'id'} eq 'inhalt_large';

    $p->get_tag('h1');
    $school{'location'} = $p->get_text('/h1');

    while (my $tag = $p->get_tag('div'))
    {
      last if exists $tag->[1]{'id'} and $tag->[1]{'id'} eq 'fusszeile';

      # get the school name from the heading
      next unless exists $tag->[1]{'class'} and $tag->[1]{'class'} eq 'fm_linkeSpalte';
      $p->get_tag('h2');
      $school{'name'} = $p->get_text('/h2');

      # verify format for school type
      $tag = $p->get_tag('span');
      unless (exists $tag->[1]{'class'} and $tag->[1]{'class'} eq 'schulart_text')
      {
        warn "unexpected format: parsing stopped";
        last;
      }

      $school{'type'} = $p->get_text('/span');

      # verify format for address
      $tag = $p->get_tag('p');
      unless (exists $tag->[1]{'class'} and $tag->[1]{'class'} eq 'einzel_text')
      {
        warn "unexpected format: parsing stopped";
        last;
      }
      $school{'address'} = clean_address($p->get_text('/p'));

      # find the description
      $tag = $p->get_tag('p');
      $school{'description'} = $p->get_text('/p');
    }
  }

  # speichere eine refenz auf den Hash mit den Daten der aktuellen Schule im Array mit allen Schulen
  push(@schools,\%school);
}

# Ausgabe in eine Datei als einfaches "XML" formatiert:
open(my $fh, '>', $out_file) or die("Error open $out_file ($!)
");
print $fh "<schools>
";
for my $school (@schools)
{
  print $fh "  <school>
";
  print $fh "    <name>$school->{name}</name>
";
  print $fh "    <location>$school->{location}</location>
";
  print $fh "    <type>$school->{type}<type>
";
  print $fh "    <address>
";
  for my $address (@{$school->{address}})
  {
    print $fh "      <entry>$address</entry>
";
  }
  print $fh "    </address>
";
  print $fh "    <description>$school->{description}</description>
";
  print $fh "  </school>
";
}
print $fh "</schools>
";
close($fh);


##########################################################################

# Funktion um die Adressen von unnötigen Zeichen zu befreihen
# und als Array jede Zeile zurück zu liefern
sub clean_address
{
  my $text = shift;
  my @lines = split "
", $text;
  for (@lines)
  {
    s/^s+//;
    s/s+$//;
  }
  return \@lines;
}

i can give you more ideas - and if you need to have more exlpanation - just ask

Any and all help is greatly appreciated

regards
dilbertone:)

Use the Perl DBI class. Do man DBI for the API.