Thread I/O Operations: Pfade übertragen auf einen HTML-Parser (17 answers)
Opened by lin at 2010-10-03 13:29

lin
 2010-10-07 00:03
#141761 #141761
User since
2010-09-26
35 Artikel
BenutzerIn
[default_avatar]
Hallo Topeg, guten Abend!


schoen von dir zu hoeren! - bin etwas unsicher, ob ich in diesem Thread weiterschreiben soll. Einen neuen Thread will ich erst morgen aufmachen... Den zu tippen ist etwas aufwändig. Dann versuch ich am Donnerstagabend mal einen neuen Thread...

Aber, um auf dein Frage zu kommen: Du hast natürlich in vielen Punkten Recht; in den praktisch-technischen - bei den PERL-Fragen in den logischen sonst auch. Hier ein Gedanken zu einem technischer Punkt

Quote
Ergänzen würde ich hier noch: homepage (Link auf die Homepage der Schule)


Das mit der DB scheint mir das allekleinste Problem. Ich habe schon eine grobe (sehr gut verwendbare DB-Struktur, die im Grunde nur noch leicht abgewandelt werden muss - vgl. und siehe diesen Link hier zu einem guten Beispiel - - gut verwendbar

Für die Arbeit im Moment bedeutet das, dass ich nur (!!!) die CSV-Strukur brauche. Es ist nicht mehr nötig im Moment.


Wichtig sind vielmehr die Fragen wie viele Felder es werden sollen - siehe dazu mehr unten: Dann gibts noch eine interessante Frage: Die URL ist speziell: Die ist im Grunde verschlüsselt (siehe unten).

Frage: Von Treebuilder hab ich auch schon gehoert. Auch davon dass TreeBuilder sehr leistungsfähig sein soll. Auch von HTML-TreeBuilder-LibXML hab ich schon gehoert. Hab den mal vor einigen Tagen von CPAN geholt. Also was mir jetz einfällt ich denn TreeBuilder mit demselben Code einbinden!? Ich muss ihn leicht abwahldeln - aber dann müsste er gehen
- denk ich mal!

Ein interessantes Detail ist verbunden mit der Webadresse, dem URL
http://schulweb.de/de/schulsuche/einzelergebnis.ht...

Bei diesem Detailergebnis ist der URL (siehe unten) in der Postleitzahl abgeleitet...:

Quote
Heidelberger Fremdsprachen-Institut, Akademie für Sprachen, Wirtschaft und Touristik
Schulart: Berufsbildungseinrichtung
Adresse: 69120 Heidelberg, Helmholtzstrasse 8
Telefon: +49 (0)-6221 6442-0, Fax: +49 (0)-6221 6442-42
SchulWeb-Nummer: 6912001
Sekretariat: Frau Maureen Batt

(Ende des Zitats)

Interessant hierbei DER URL ist wie folgt zusammenbebaut: Aus: Schulweb.de/[Schulwebnummer] hier also 6912001 ->
http://schulweb.de/6912001 - > http://www.hib-academy.de/

Die Dekodierung der wahren URL - kann man ggf. einfach später machen - auch wenn die Daten schon in der DB drinne sind.Denn dann kann man die Sache eben - nach dem zusammenbaue ausführen - und kommt dann
Von der SchulWeb-Nummer: 6912001 auf Schulweb.de/[Schulwebnummer] und zur: http://www.hib-academy.de/
Frage: Was meinst du? - das muss man beim Parsen nicht machen. Das wär sehr aufwändig.

Also - ich denk dass ich mal beim Parsen auf die wichtigsten Daten achte... 5 Zeilen hat jeder DAtensatz - nämlich diese:

Quote
Name: HIS - Heidelberg.
Schulart:
Adresse: wie etwa hier in einer Zeile: (69120 Heidelberg, Helmholtzstrasse 8) Siehe unten!!
Telefon: +49 (0)-6221 6442-0, Fax: +49 (0)-6221 6442-42 - alles in einer Zeile drinne!
SchulWeb-Nummer: 6912001 - siehe oben {muss ich extra dekodieren]
Im SchulWeb seit: 16.10.2001

Diese Zeilen haben alle!!


Hier der voll Datensatz - verglichen mit einem zweiten - der noch mehr Informationen hat: Zeile 6 bis neu sind im zweiten - dem unteren Datensatz noch zusätzlich drinne: 6 bis einschließlich 8 sind interessant - und
vor allem Zeile zehn Die Beschreibung (/description im HTML-Ansicht) sind interessant. Am Ende jeder Seite - das ist wichtig für den Parser - kommt - "im SchulWeb seit... - " Dies ist das Ende des Jobs für den Parser.
Das stimmt für alle 10519 Ergebnisse:

Ich denk dass ich die Zeilen 1 bis 5 ganz einfch immer drinne hab - die sind auch schon fertig im Programm berücksichtigt. Für die Zeilen 6 bis 9 hab ich mir überlegt muss ich das Script einfach nur etwas abändern:

Code (perl): (dl )
1
2
3
     # find the description
     $tag = $p->get_tag('p');
     $school{'description'} = $p->get_text('/p');


ich sollte da wohl noch ergänzen....

Quote
fm_projekte
ta_left einzel_text (description) -wobei das schon dabei ist... das ist schon berücksichtigt
logo_schulzeitung


ta_left einzel_text (Mitglied im Schulweb seit)....

Email:
Schulleitung: Peter Born
Webmaster:
mailto: stehr@igh-hd.de
<div class="fm_projekte"



Hier der Vergleich zweier ganz konkreter Datensätze!



Datensatz eins
1 Name: H.I.S. Heidelberg International School, 69123 Heidelberg
2 Schulart: Berufsbildungseinrichtung
3 Adresse: 69120 Heidelberg, Helmholtzstrasse 8
4 Telefon: +49 (0)-6221 6442-0, Fax: +49 (0)-6221 6442-42
5 SchulWeb-Nummer: 6912001
6 Sekretariat: Frau Maureen Batt

Mitwirkung an Projekten:
* SAN-Einstiegsprojekt
* ODS
Im SchulWeb seit: 16.10.2001


Datensatz zwei
1 Name: Internationale Gesamtschule Heidelberg
2 Schulart: Gesamtschule
3 Adresse: 69126 Heidelberg, Baden-Badener Str. 14
4 Telefon: 0 62 21 / 310-0, Fax: 0 62 21 / 310-210
5 SchulWeb-Nummer: 6912601
6 Email: sekretariat@igh-hd.de
7 Schulleitung: OSTD Peter Born
8 Webmaster: Günter Stehr

Mitwirkung an Projekten:
* ODS
* SAN-Modellprojekt
* UNESCO
* SAN-Einstiegsprojekt

Description:
Die Internationale Gesamtschule Heidelberg (IGH) lebt von dem Gedanken der Internationalität und der Friedenserziehung. Die pädagogische Konzeption beinhaltet weiter ein verstärktes Fremdsprachenangebot, ein naturwissenschaftliches Profil und die feste Verankerung des Umweltgedankens in der Schule. Die IGH wird ab Sekundarstufe I als Ganztagesschule an vier Tagen der Woche betrieben. Pflichtunterricht und Ganztagesangebote finden in der Zeit von 7:45 Uhr bis 16:00 Uhr statt. In der Mittagspause werden durch die schuleigene Küche drei Menüs angeboten. Zur IGH gehören - außer den Vorschulkindern - 1800 Schülerinnen und Schüler in verschiedenen Stufen. Sie werden von 160 Lehrerinnen und Lehrer aller Schularten gemeinsam unterrichtet.

Im SchulWeb seit: 16.10.2001


Im Blick auf die Struktur der Datensätze sieht man : Im Grunde ist jeder Datensatz eingerahmt von:

a. Name der Schule
b. Im SchulWeb seit...


Diese beiden Einträge sind immer (!!!) dabei! Es gibt immer 5 Einträge.

Diese fünf Datensätze gibt es in wirklich jedem Datensatz - ich muss das beim Parsen nur berücksichtigen. Es kommt also beim Parsen darauf an, auch die Felder 6 bis 10 erstmal einfach auch mit anzulegen auf der DB - dann kann m.E. nicht so viel passieren.


Für den zu parsenden Code muss ich dann da noch was ergänzen:

Code (perl): (dl )
1
2
3
     # find the description
     $tag = $p->get_tag('p');
     $school{'description'} = $p->get_text('/p');


Hmm - im Moment denke ich dass ich da wohl noch ergänzen muss:....

Quote
fm_projekte
ta_left einzel_text (description) -wobei das schon dabei ist... das ist schon berücksichtigt
logo_schulzeitung



Werde mich morgen mal dranmachen. Melde mich aber auf jeden Fall wieder...


Euer Lin

PS _ werde mich morgen auf jeden Fall hier wieder melden!

und jetzt fall ich erstmal ins Bett ;-)

BTW - wegen des CSV-Separators das hier ist super: Text::CSV::Separator den werde ich auf jeden Fall anwenden!



http://search.cpan.org/~enell/Text-CSV-Separator-0...



use Text::CSV::Separator qw(get_separator);
Code (perl): (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
    my @char_list = get_separator(
                                    path    => $csv_path,
                                    exclude => $array1_ref, # optional
                                    include => $array2_ref, # optional
                                    echo    => 1,           # optional
                                 );
    
    my $separator;
    if (@char_list) {
        if (@char_list == 1) {           # successful detection
            $separator = $char_list[0];
        } else {                         # several candidates passed the tests
            # Some code here
    } else {                             # no candidate passed the tests
        # Some code here
    }
    
    
    # "I'm Feeling Lucky" alternative interface
    # Don't forget to include the 'lucky' parameter
    
    my $separator = get_separator(
                                    path    => $csv_path,
                                    lucky   => 1, 
                                    exclude => $array1_ref, # optional
                                    include => $array2_ref, # optional
                                    echo    => 1,           # optional
                                 );


DESCRIPTION
Quote
This module provides a fast detection of the field separator character (also called field delimiter) of a CSV file, or more generally, of a character separated text file (also called delimited text file), and returns it ready to use in a CSV parser (e.g., Text::CSV_XS, Tie::CSV_File, or Text::CSV::Simple). This may be useful to the vulnerable -and often ignored- population of programmers who need to process automatically CSV files from different sources. The default set of candidates contains the following characters: ',' ';' ':' '|' '\t'

Last edited: 2010-10-07 08:26:44 +0200 (CEST)

View full thread I/O Operations: Pfade übertragen auf einen HTML-Parser