Thread perl im debug-modus fahren (18 answers)
Opened by lin at 2010-10-01 20:18

lin
 2010-10-02 00:07
#141628 #141628
User since
2010-09-26
35 Artikel
BenutzerIn
[default_avatar]
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!?


Code: (dl )
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)

View full thread perl im debug-modus fahren