Yadgar: Automatische Datenextraktion aus Wikipedia-Seiten - PHP oder Javascript?

Hi(gh)!

Ich habe folgendes Problem:

Im Rahmen meines GREENBOOK-Projektes, der Datenbank für elektronische Orgeln mit angeschlossenem Marktspiegel, will ich (um die gesammelten Verkaufsanzeigen räumlich zuordnen zu können) sämtliche deutschen Städte und Gemeinden (ORT) als MySQL-Stammdaten vorhalten, und zwar mit Namen, Postleitzahlen (ORT_PLZ) und Einwohnerzahlen (ORT_EINWOHNER), letztere auf die Erfassungsjahre ab 2018 bezogen.

Da die Beziehung zwischen Städten/Gemeinden und Postleitzahlen eine m:n-, die Beziehung zwischen Städten/Gemeinden und Einwohnerzahlen wegen der fortlaufenden Erfassungsjahre eine 1:n-Beziehung ist, verwende ich drei Tabellen:

ORT:  
id (SMALLINT, AUTO_INCREMENT, UNSIGNED, PRIMARY)  
name (VARCHAR(40))  
kreis_id (SMALLINT, verweist auf Stammdatentabelle KREIS)  
regbez_id (TINYINT, verweist auf Stammdatentabelle REGBEZ)  
land_id (TINYINT, verweist auf Stammdatentabelle LAND)

UNIQUE-Index über name, kreis_id, regbez_id und land_id.

ORT_PLZ:  
id (MEDIUMINT, AUTO_INCREMENT, UNSIGNED, PRIMARY)  
ort_id (SMALLINT)  
plz (VARCHAR(5))

UNIQUE-Index über ort_id und plz.

ORT_EINWOHNER:  
id (MEDIUMINT, AUTO_INCREMENT, UNSIGNED, PRIMARY)  
ort_id (SMALLINT)  
einwohnerzahl (MEDIUMINT)
jahr (YEAR)

UNIQUE-Index über ort_id, einwohnerzahl und jahr.

Um die händische Eingabe sämtlicher rund 12000 Ortsnamen werde ich nicht herumkommen... die Extraktion von Postleitzahlen und Einwohnerzahlen aus Wikipedia-Artikeln sollte sich aber automatisieren lassen.

Das Skript würde ausgehend von der Namensliste in ORT automatisch jeweils die entsprechende deutschsprachige Wikipedia-Seite laden und daraus dann (alle Wikipedia-Seiten zu deutschen Gemeinden haben eine zweispaltige "Basisdaten"-Tabelle mit u. a. den Einträgen "PLZ" und "Einwohnerzahl") die relevanten Daten auslesen.

Die Frage: mache ich das mit PHP oder doch besser mit Javascript? In PHP kenne ich mich besser aus...

Bis bald im Khyberspace!

Yadgar

  1. Hallo Yadgar,

    Was ist hiermit?

    Klapp mal unten auf der Seite die (+) auf, da scheint einiges an Download zu stecken. Aktueller als das geht's nicht, und besser als Wiki-Scraping ist es auf jeden Fall.

    Rolf

    --
    sumpsi - posui - clusi
    1. Hi(gh)!

      Was ist hiermit?

      Klapp mal unten auf der Seite die (+) auf, da scheint einiges an Download zu stecken. Aktueller als das geht's nicht, und besser als Wiki-Scraping ist es auf jeden Fall.

      Kommt für mich leider nicht in Frage, da nur die PLZ des jeweiligen Verwaltungssitz der Gemeinde, nicht alle PLZn der Gemeinde enthalten sind!

      Bis bald im Khyberspace!

      Yadgar

      1. Klapp mal unten auf der Seite die (+) auf, da scheint einiges an Download zu stecken. Aktueller als das geht's nicht, und besser als Wiki-Scraping ist es auf jeden Fall.

        Kommt für mich leider nicht in Frage, da nur die PLZ des jeweiligen Verwaltungssitz der Gemeinde, nicht alle PLZn der Gemeinde enthalten sind!

        Dann reichere doch einfach die Daten von https://www.destatis.de/ mit denen von opengeodb an…

        Das kann sogar Excel.

  2. Um die händische Eingabe sämtlicher rund 12000 Ortsnamen werde ich nicht herumkommen... die Extraktion von Postleitzahlen und Einwohnerzahlen aus Wikipedia-Artikeln sollte sich aber automatisieren lassen.

    Das Skript würde ausgehend von der Namensliste in ORT automatisch jeweils die entsprechende deutschsprachige Wikipedia-Seite laden und daraus dann (alle Wikipedia-Seiten zu deutschen Gemeinden haben eine zweispaltige "Basisdaten"-Tabelle mit u. a. den Einträgen "PLZ" und "Einwohnerzahl") die relevanten Daten auslesen.

    Wikipedia wäre nicht der erste Ort, wo ich diese Daten in freier Form suchen würde und wenn dann sicher via einer API oder aus einer Offline-Kopie und nicht aus den Seiten extrahiert. Bessere Datenquellen wären vermutlich Openstreetmap und Wikidata.

  3. Hi,

    Im Rahmen meines GREENBOOK-Projektes, der Datenbank für elektronische Orgeln mit angeschlossenem Marktspiegel, will ich (um die gesammelten Verkaufsanzeigen räumlich zuordnen zu können) sämtliche deutschen Städte und Gemeinden (ORT) als MySQL-Stammdaten vorhalten, und zwar mit Namen, Postleitzahlen (ORT_PLZ) und Einwohnerzahlen (ORT_EINWOHNER), letztere auf die Erfassungsjahre ab 2018 bezogen.

    Da die Beziehung zwischen Städten/Gemeinden und Postleitzahlen eine m:n-, die Beziehung zwischen Städten/Gemeinden und Einwohnerzahlen wegen der fortlaufenden Erfassungsjahre eine 1:n-Beziehung ist, verwende ich drei Tabellen:

    berücksichtigst Du auch die zeitliche Komponente? Durch Eingemeindungen, Braunkohletagebau usw. verschwinden Gemeinden, neue entstehen, vorhandene Orte wechseln die Postleitzahl usw.

    Um die händische Eingabe sämtlicher rund 12000 Ortsnamen

    14887 (Stand: November 2019), bei Berücksichtigung der PLZs für "Zustellung" und "Zustellung und Postfach"

    cu,
    Andreas a/k/a MudGuard

    1. Hi,

      berücksichtigst Du auch die zeitliche Komponente? Durch Eingemeindungen, Braunkohletagebau usw. verschwinden Gemeinden, neue entstehen, vorhandene Orte wechseln die Postleitzahl usw.

      Ja, es gibt außerdem noch die beiden 1:n-Tabellen ORT_VORGAENGER und ORT_NACHFOLGER!

      Bis bald im Khyberspace!

      Yadgar

  4. Was wäre mit OpenGeoDB > Dumps ?

    Ich weiss aber gerade nicht, wie aktuell die Daten sind und ob sie zu deinem Vorhaben passen. Müsstest du mal gucken.

    Um die händische Eingabe sämtlicher rund 12000 Ortsnamen werde ich nicht herumkommen...

    Doch auf jeden Fall! Das würde ja ewig dauern :) Was auch immer du für Daten verwendest, im ungünstigsten Fall müsstest du halt ein Script schreiben, welches die Daten parst und in die DB importiert. Mit PHP wäre das bestimmt kein großes Problem.

    Man sollte auch bedenken, dass die Daten gelegentlich wieder abgeglichen werden müssen.