hi Bianca,
vielen dank für deine schnelle Antwort. Will das untenstehende Script - das aus einem Ordner HTML-Files rausholt arbeiten lassen.
Die Sache wurde schon mal - vor wenigen Tagen - in einem anderen Thread diskutiert. Aber ich wollte jetzt wirklich nochmals ausdrücklich zu den Möglichkeiten fragen, mir eventuelle Fehler auch anzeigen zu lassen.
Also :...wenn ich das auf OpenSuse machen will dann vielleicht so
Basisordner > user > perl >
- Da drinne liegt der ordner mit den zu parsenden html-files - ich habe ihn "html.files" genannt.
- da hinein leg ich auch ds untengenannte Perl-Script
Und der Einfachheit halber will ich auch in diesen Ordner das zu erzeugenden Script reinlegen...
Also das ganze soll auf OpenSuse 11.3 laufen... Aber ich bin mir mit den Pfaden noch nicht ganz sicher. Im untenstehenden Script muss ich die Pfade richtig angeben, wo sich meine school.html befindet und das Gleiche gilt für die Datei, die ich erzeugen möchte.
Also die Pfade mit den Angaben zu
a. den zu verarbeitenden HTML-Files... (die
b. der Datei, die ich erzeugen möchte.
Denke mal dass das erste schon einigemaßen passen koennte.
Aber da mit dem Pfad der DATEI die ich erzeugen will bin ich noch nicht ganz fertig.... Das kann so noch nicht stehen bleiben oder!?
Bianca - ich hab mal deine Anregungen aufgenommen - und in die Datei aufgenommen...: Aber
die Pfade sind glaub ich noch nicht ganz richtig - oder!?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/usr/bin/perl
use strict;
use warnings;
use diagnostics;
use HTML::TokeParser;
# my $file = 'school.html';
my @html_files = File::Find::Rule->file->name( '*.html' )->in( $html_dir );
my $p = HTML::TokeParser->new($file) or die "Can't open: $!";
my %school;
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');
}
}
print qq/$school{'name'}\n/;
print qq/$school{'location'}\n/;
print qq/$school{'type'}\n/;
foreach (@{$school{'address'}}) {
print "$_\n";
}
print qq/\nDescription: $school{'description'}\n/;
sub clean_address {
my $text = shift;
my @lines = split "\n", $text;
foreach (@lines) {
s/^\s+//;
s/\s+$//;
}
return \@lines;
}
Bianca, was meinst du!?
Last edited: 2010-10-02 00:24:13 +0200 (CEST)