Traueranzeigen Suche

  • Hallo Zusammen,

    folgende Problemstellung:

    Es soll aus einer Liste von Namen und Geb. Datum Übereinstimmungen mit diesen Anzeigen, https://trauer.rheinpfalz.de/traueranzeigen/letzte-ausgabe/1, gesucht werden.

    Meine Grundidee:

    Alle Namen und Geb. Datum in eine ini Datei schreiben um sie dann besser auslesen zu können.

    Alle Seiten der Traueranzeigen als HTML Code lokal speichern und dann nach den Namen suchen und anschließend auf Geb. Datum prüfen.

    Problem hierbei ist, dass die Seitenanzahlen immer varrieren.

    Was haltet ihr von der Grundidee?

    Gibt es bessere Vorschläge?

    Grüße
    Paul01

  • Hallo Paul01 !

    Warum eine .ini-Datei ? Hier kann man nur Key=Value Paare eintragen.

    Schreibe die Daten doch lieber in eine normale Textdatei, wobei jede Zeile die Daten, getrennt durch Delimiter, enthält.

    Mit _FileReadToArray und _FileWriteFromArray lassen sich die Daten leichter verwalten. Zudem kannst Du mehrere Werte pro Zeile nutzen.

    Mit _ArrayDisplay ist auch eine einfache Anzeige möglich.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Warum eine .ini-Datei ? Hier kann man nur Key=Value Paare eintragen.

    Fiel im sicher als erstes Speicherformat ein. Ist natürlich keine so gute Wahl.

    Alle Seiten der Traueranzeigen als HTML Code lokal speichern

    Bloß nicht, du solltest den HTML-Code nicht abspeichern wenn du ihn nicht brauchst.

    Was hast du denn für Fertigkeiten? Willst du das mit der IE.au3 UDF machen, oder einfach nur mit InetRead, oder WinHttp?

    Am besten du lädst die Seite und parst die Informationen raus, da kriegst du alle benötigten Informationen wie Name, Seitenzahlen etc.

  • Guten Morgen,

    erstmal danke für die Antworten.

    Ja, ini ist mir als erstes eingefallen.. Hab noch nie etwas mit einlesen gemacht, daher war das so meine grobe Idee.

    @Musashi dann werde ich das so wie du vorgeschlagen hast mit einer normalen Txt versuchen. Sollte ich es nicht hinbekommen, melde ich mich nochmal.

    @alpines

    Warum sollte man sich den HTML Code nicht runterladen? Ist nicht schön aber ist mir halt so in den Sinn gekommen..

    Ansonsten kann ich das doch dann mit InetRead machen oder? So wie ich die Funktion verstehe ließt sie eine Homepage in einen String welchen ich dann im Anschluss auf meine Namen und Geb. Datum prüfen kann oder?

  • Warum sollte man sich den HTML Code nicht runterladen? Ist nicht schön aber ist mir halt so in den Sinn gekommen..

    Du solltest den Code ruhig runterladen, aber dein Beitrag (so habe ich ihn verstanden) hatte es so ausgedrückt, dass du diesen Code speichern möchtest und das ist nicht gut.

    Wenn der Webserver keine Probleme machen sollte und du nur HTTP Pakete mit GET statt POST abschickst sollte InetRead ausreichen, ansonsten brauchst du was anderes.

    Alle Seiten der Traueranzeigen als HTML Code lokal speichern

    Das hört sich so an als ob du alle Seiten speichern wolltest.

  • Ja stimmt, wollte die lokal speichern und danach wieder löschen..

    Gut, dann sollte das mit InetRead funktionieren, setze ich mich heute Abend mal dran. Bzw erstmal an das einlesen der Namen und Gebdaten.

    Bin ich ja mal gespannt, danke euch schonmal :) Werde mich bestimmt nochmal melden :b

  • Ich habe dir hier mal einen kleinen Ansatz da gelassen, viel Erfolg!

    Spoiler anzeigen

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Ich habe dir hier mal einen kleinen Ansatz da gelassen, viel Erfolg!

    Spoiler anzeigen

    Den Ansatz versteh ich jz schon hinten und vorne nicht mehr... :D

    Wie kommst du auf diese URL? Wenn ich die von heute anzeigen möchte habe ich folgede URL:

    https://trauer.rheinpfalz.de/traueranzeigen/_/_/_/_/1/1

    Also du gehst dann mit Regex rein aber was genau du da machst, versteh ich nicht..

  • Hallo Paul01 !

    Neben der Hilfe selbst, gibt es einige schöne Tutorials zum Thema 'Reguläre Ausdrücke' u.A. von BugFix (siehe seine Signatur) oder SEuBo .

    StringRegExp Tutorial / Reguläre Ausdrücke in AutoIt

    Man sollte an dieser Stelle aber auch erwähnen, dass 'Reguläre Ausdrücke' , insbesondere für Gelegenheitsuser, recht starker Tobak sein können. Sie sind mächtig, elegant und kompakt, aber nicht zwingend intuitiv ;).

    Es wäre also keine 'Schande', falls Du stattdessen auf Stringoperationen zurückgreifen würdest. Der Code wird damit zwar länger, aber wichtig ist, vor allen anderen Dingen, dass Du ihn selbst nachvollziehen kannst (auch noch in 6 Monaten) !

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Man sollte an dieser Stelle aber auch erwähnen, dass 'Reguläre Ausdrücke' , insbesondere für Gelegenheitsuser, recht starker Tobak sein können. Sie sind mächtig, elegant und kompakt, aber nicht zwingend intuitiv .


    Es wäre also keine 'Schande', falls Du stattdessen auf Stringoperationen zurückgreifen würdest. Der Code wird damit zwar länger, aber wichtig ist, vor allen anderen Dingen, dass Du ihn selbst nachvollziehen kannst (auch noch in 6 Monaten) !

    Prinzipiell hat Musashi natürlich recht.

    Hier in diesem Fall müsste man eigentlich noch nicht die Tuts durcharbeiten. Da man sich hier noch im seichten Wasser befindet. Ich habe die Hilfe genannt, weil dort die Beispiele auf Pseudo-Quelltexte angewendet werden. Da erschöpft sich das nacharbeiten fast auf Copy&Paste und man kann direkt auf der gleichen Seite sehen, was die Klammern usw. sollen.

    Wenn das Probleme macht, gäbe es aber noch die _StringBetween Funktion, mit der das Skript u.U. überhaupt nicht länger wird.

    Grüße autoiter

  • Den Ansatz versteh ich jz schon hinten und vorne nicht mehr... :D

    Wie kommst du auf diese URL? Wenn ich die von heute anzeigen möchte habe ich folgede URL:

    https://trauer.rheinpfalz.de/traueranzeigen/_/_/_/_/1/1

    Also du gehst dann mit Regex rein aber was genau du da machst, versteh ich nicht..

    Ahja, die URL. Nun, long story short:

    Wenn man die Suche auf deiner in Beitrag 1 angegebenen URL nimmt, ohne etwas einzugeben, dann landet man bei eben genannter URL. Probiere es einfach mal selbst aus :)

    Um jetzt raus zu finden, wie man die Seiten durch gehen kann, schaut man einfach den Unterschied von 2 Seiten in der URL an.

    Code
    https://trauer.rheinpfalz.de/traueranzeigen/_/_/_/0/0/1
    https://trauer.rheinpfalz.de/traueranzeigen/_/_/_/0/0/2

    Das scheint also der Zähler zu sein, mit dem man die Seiten der Todesanzeigen durch iterieren kann. "Leider" bauen sie ihre Traueranzeigen nicht von Hinten nach Vorne auf, sonst wäre eine Aktualisierung einfacher, wenn man nach einer Weile den Datensatz updaten will.

    Den Rest mit dem RegEx haben dir die beiden Anderen schon beantwortet.

    Es gibt sehr viele Leute, die glauben. Aber aus Aberglauben.
    - Blaise Pascal

  • Alles klar Jungs, danke euch.

    Zitat

    Das scheint also der Zähler zu sein, mit dem man die Seiten der Todesanzeigen durch iterieren kann. "Leider" bauen sie ihre Traueranzeigen nicht von Hinten nach Vorne auf, sonst wäre eine Aktualisierung einfacher, wenn man nach einer Weile den Datensatz updaten will.

    Ist zum Glück eh nicht wichtig. Das Programm wird einmal am Tag ausgeführt und soll einfach schauen ob wer aus meiner Liste in deren Tagesliste auftaucht :)

  • Ich brauche die Seite: https://trauer.rheinpfalz.de/traueranzeigen/letzte-ausgabe/1

    @Xorianator

    Hab mir gerade nochmal deinen Lösungsansatz angeschaut.

    Ich bekomm bei der ersten Seite nur 4 Ergebnise obwohl es eig 5 sind. Bei allen folgenden Seiten sind es dann 5.. Weißt du warum?

    Und könnte mir jemand den Regex so anpassen das ich nur den vollen Namen & Geburtsdatum bekomme. Auch das Geb. Name soll weg bleiben?

    Also in dem Format:

    Irene Kern|26.08.1930

    11 Mal editiert, zuletzt von Paul01 (6. Oktober 2017 um 12:55)

  • Hallo Paul01 !

    Wie ich sehe, hast Du deinen Beitrag vor kurzem editiert. Warum brauchst Du jetzt nur noch ../letzte-ausgabe/1 ?

    Vorher hattest Du, soweit ich mich erinnere, gefragt, wie man die Seiten , also ../letzte-ausgabe/1 bis ../letzte-ausgabe/n hochzählen kann.

    Einfach nur stumpf den Counter erhöhen bis InetRead das @error Flag setzt, geht hier leider nicht. Ist der Counter > n , dann kommt eine allgemeine Seite, kein Fehler !

    Du könntest aber z.B. nach class="activePagerItem suchen. Das sind die Laufleisten für die vorhandenen Seiten (oben und unten identisch).

    Wenn Du diese Zeile auswertest, erhältst Du die höchste existierende Seitenzahl.

    Ich bekomm bei der ersten Seite nur 4 Ergebnise obwohl es eig 5 sind.

    Ich bin leider gerade etwas knapp mit Zeit, daher nur einige Stichwortsätze :

    - Der Quelltext der ersten Seite enthält auch 5 Beiträge

    - bei einer Anzeige werden aber keine Datumsangaben gemacht (bei Todesanzeigen nicht unüblich)

    - ein Name enthält Umlaute -> ggf. mal die Zeichencodierung prüfen

    Edit :

    Vielleicht könnte Tuxedo hier weiterhelfen - er beschäftigt sich in seinem Projekt ja ausgiebig mit der Auswertung von Webseiten ^^

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

    Einmal editiert, zuletzt von Musashi (6. Oktober 2017 um 13:33) aus folgendem Grund: Erweiterung

  • Dann hab ich mich falsch ausgedrückt, ich brauche:

    ../letzte-ausgabe/n

    Das habe ich auch einwandfrei hin bekommen.

    Ich speichere jz einfach immer auch die Liste der Todesanzeigen und lösche diese am Ende.

    Ist für ich zum Verständnis einfach das beste :)

    Mein Problem ist jz, ich bekomme immer nur zwei Treffer angezeigt.. Irgendwas stimmt da mit meinen Schleifen nicht so wirlich.

    Zudem habe ich noch das Problem, wie oben geschrieben, dass teilweise in der Rheinpfalz noch Geb. dabei steht mit dem ehemaligen Namen. Da ich die Information nicht habe, wäre es klasse wenn mir jemand den Regex umstellen könnte.

    Brauch ausschließlich

    Vorname Nachname|Geburtsdatum

    Nur die zwei bzw drei Informationen. Wäre echt klasse.

    Anbei mein bisheriges Programm. Seid nicht zu hart.. :D


    @Musashi

    PS: Danke für deine Anmerkung:

    Zitat


    - bei einer Anzeige werden aber keine Datumsangaben gemacht (bei Todesanzeigen nicht unüblich)

  • Hallo Paul01 !

    Die "todesanzeigeliste.txt" ist weitgehend ok.

    Es gibt auf der Webseite 47 Anzeigen, davon fehlen Dir drei. Wie bereits vermutet, gibt es genau bei diesen drei Anzeigen Besonderheiten bzgl. der Datumsfeldern, d.h. : Geburts- und/oder Todesdatum fehlen !

    Damit wird der Teil labelSearchItem">\* (.*?) - &WCF_AMPERSAND† (.*?)< des RegEx nicht erfüllt.

    Lässt sich sicher anpassen, aber ich muss jetzt zum Skat. Falls keine Antwort kommt, schaue ich morgen ggf. mal rein.

    Um die Func pruefeUebereinstimmunge ausführen zu können, fehlt die "rentnerliste.txt". Diese Datei hast Du nicht mitgeliefert, und sie wird im Programm auch nicht angelegt (siehe FileOpen("rentnerliste.txt", 0) --> 0 = im Lesemodus öffnen).

    Insgesamt hätte ich den Code anders aufgebaut, aber wir sollen ja nicht 'so hart' sein :P

    Zudem habe ich noch das Problem, wie oben geschrieben, dass teilweise in der Rheinpfalz noch Geb. dabei steht mit dem ehemaligen Namen. Da ich die Information nicht habe, wäre es klasse wenn mir jemand den Regex umstellen könnte.

    Das würde ich nicht über den RegEx lösen.

    Hier ist es, meiner Meinung nach, sinnvoller, den jeweiligen Namensstring (in deinem Beispiel also $Matches[$i]) zu filtern.

    Suche im String nach geb. und nehme den linken Teilstring.

    Beispiel :

    Local $sName= "Petra Meyer geb. Schmidt"

    Local $iPosGeb = StringInStr($sName, " geb. ", 0, -1)

    If $iPosGeb > 0 Then $sName = StringLeft($sName, $iPosGeb - 1)

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

    2 Mal editiert, zuletzt von Musashi (8. Oktober 2017 um 11:20) aus folgendem Grund: Tippfehler

  • Hallo Paul01 !

    Ich habe Dir ein Skript erstellt, dass eine Liste mit NAME|GEBURTSDATUM|TODESDATUM ausgibt. Der geb. Teil des Namens wird entfernt.

    Das Problem bei deiner Version lag an dem Teil des RegEx, welcher die Datumseinträge auswertet, also (hinter labelSearchItem) :

    Code
    Local $Matches = StringRegExp($IES, '(?s)#828172">Traueranzeige (.*?)<.*?labelSearchItem">\* (.*?) - &dagger; (.*?)<', 3)

    (Nebenbei : Offenbar wandelt der Forumseditor beim erneuten Editieren einige Zeichen um, z.B. in &WCF_AMPERSAND† - na ja, egal)

    Bei den Datumsangaben gibt es vier mögliche Varianten :

    V1. Geburtsdatum UND Todesdatum vorhanden -> NAME|* 06.12.1919 - † 30.09.2017

    V2. nur Geburtsdatum vorhanden -> NAME|* 30.09.2017

    V3. nur Todesdatum vorhanden -> NAME|† 30.09.2017

    V4. keine Angaben vorhanden -> NAME|

    Der bisherige RegEx greift nur bei V1. , aber nicht bei V2. bis V4. Daraus resultieren dann auch die fehlenden Einträge.

    Ich habe den Auswertungsweg wie folgt umgebaut (siehe Skript) :

    Ich lese den gesamten Datumsbereich als ein Element in das Array, werte diesen Teil dann aber mittels Stringfunktionen aus.

    Du kannst das Skript so ja mal durchlaufen lassen. Den Aufbau und die Variablenbezeichner habe ich nach meinem Geschmack etwas modifiziert ;).

    Der Teil mit der Rentnerliste ist in diesem Testprogramm nicht enthalten, da Diese fehlt. Das kannst Du aber sicher selbst ergänzen.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Hallo @Musashi,

    da kommt wenigstens ein gescheides Ergebnis raus :b

    Bei meinem vorherigen Ansatz kam heute iwie nur Müll raus bzw noch etwas Html Code..

    Jz muss ich das nur noch gescheid verglichen bekommen, danke dir schonmal !

    EDIT:

    Habs jetzt fertig so wie ichs brauche.

    Danke an alle die mir geholen haben :)

    Einmal editiert, zuletzt von Paul01 (9. Oktober 2017 um 09:20)