Thread I/O Operations: Pfade übertragen auf einen HTML-Parser
(17 answers)
Opened by lin at 2010-10-03 13:29
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 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 (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 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 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 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 Last edited: 2010-10-07 08:26:44 +0200 (CEST) |