LSN-Online Datenbank

Technische Dokumentation zur Nutzung der LSN-Online Regionaldatenbank des Landesamts für Statistik Niedersachsen.

Hinweis: Die LSN-Online bietet keine dokumentierte öffentliche API. Diese Dokumentation basiert auf Reverse-Engineering der Web-Oberfläche.

Übersicht

URL www1.nls.niedersachsen.de/statistik
Technologie Classic ASP (Active Server Pages)
Datenpunkte ~90 Millionen
Tabellen Über 1.000
Granularität Bis Gemeindeebene
Zeitreihen Teilweise ab 1983
Kosten Kostenfrei

Architektur

Frame-basierte Struktur

Die Website verwendet eine verschachtelte Frame-Architektur:

default.asp                 # Einstiegsseite mit Login-Form
├── html/
│   ├── oben_link.htm       # Kopfzeile
│   ├── haupt_wrapper.asp   # Wrapper-Frame
│   │   └── haupt_neu.asp   # Hauptnavigation mit dTree
│   ├── param_haupt.asp     # Parameter-Auswahl-Formulare
│   └── mustertabelle.asp   # Tabellen-Generator
└── pool/[TABLE_ID]/        # Generierte Ergebnis-Dateien
    └── [TABLE_ID]_[HASH].asp/.zip

Session-Management

Die Datenbank verwendet Session-Cookies für die Zustandsverwaltung:

  1. Initiale Anfrage an default.asp
  2. POST mit LOGIN1=WEITER startet Session
  3. Cookie AL_SESS-S wird gesetzt
  4. Keep-Alive via ticker.asp (alle 60 Sekunden)

API-Endpunkte

1. Session starten

POST https://www1.nls.niedersachsen.de/statistik/default.asp
Content-Type: application/x-www-form-urlencoded

LOGIN1=WEITER

Setzt Session-Cookie und leitet zur Hauptseite weiter.

2. Menü-Navigation

GET https://www1.nls.niedersachsen.de/statistik/html/haupt_neu.asp?MENU=[ID]

Menü-IDs:

  • 17 - EVAS Systematik (Standard)
  • 7 - Statistische Erhebung
  • 11 - Leben & Arbeiten
  • 12 - Staat & Gesellschaft
  • 13 - Wirtschaft & Preise
  • 21 - Umwelt & Mobilität
  • 19 - Regionalmonitoring

3. Parameter-Formular abrufen

GET https://www1.nls.niedersachsen.de/statistik/html/param_haupt.asp
?DT=[TABLE_ID]
&IFR=1
&LN=[EBENE]
&RANGE0=[VON]
&RANGE1=[BIS]

Parameter:

  • DT - Tabellen-ID (z.B. K9200001, Z9200001)
  • IFR - IFrame-Modus (immer 1)
  • LN - Ebene (1=Land, 2=Region, 3=Kreis, 4=Samtgemeinde, 5=Mitgliedsgemeinde)
  • RANGE0/RANGE1 - Gebietsfilter (z.B. 254026 für Nordstemmen)

4. Daten abrufen

POST https://www1.nls.niedersachsen.de/statistik/html/mustertabelle.asp
Content-Type: application/x-www-form-urlencoded

DT=[TABLE_ID]
&ZUFALL=[SESSION_TOKEN]
&UG=[REGION_ID]
&LN=[EBENE]
&LN2=[SUB_EBENE]
&ZEIT=[ZEITRAUM]  # nur für K-Tabellen

Gibt HTML mit Meta-Refresh zur Ergebnisseite zurück.

Tabellen-ID Schema

Präfix-Bedeutung

Präfix Bedeutung Beispiel
K Einzeljahr-Tabelle K9200001
Z Zeitreihen-Tabelle Z9200001
M Mehrere Merkmale M9200001

Themenbereich-Codes

Code Thema
92xxxxx Realsteuervergleich
94xxxxx Kommunale Einzahlungen/Auszahlungen
96xxxxx Schulden der Kommunen

Relevante Tabellen für Kommunalfinanzen

Tabellen-ID Beschreibung Ebene
K9200001 Steuereinnahmen (Einzeljahr) Gemeinde
Z9200001 Steuereinnahmen (Zeitreihe ab 1983) Gemeinde
K9200002 Steuerkraft, Hebesätze Gemeinde
Z9200002 Steuerkraft (Zeitreihe) Gemeinde
K9400012 Einzahlungen nach Arten Verwaltungseinheit
K9400013 Auszahlungen nach Arten Verwaltungseinheit
K9600050 Schulden und Verbindlichkeiten Verwaltungseinheit

Regions-ID für Nordstemmen

LSN-ID 254026000
Kurzform 254026
Amtlicher Gemeindeschlüssel (AGS) 03254035

Hinweis: Die LSN verwendet ein eigenes ID-Schema, das sich vom amtlichen Gemeindeschlüssel unterscheidet.

Beispiel: Daten für Nordstemmen abrufen

cURL-Beispiel

# 1. Session starten
curl -c cookies.txt -b cookies.txt -X POST \
  "https://www1.nls.niedersachsen.de/statistik/default.asp" \
  -d "LOGIN1=WEITER"

# 2. Zeitreihen-Daten abrufen
curl -b cookies.txt -X POST \
  "https://www1.nls.niedersachsen.de/statistik/html/mustertabelle.asp" \
  -d "DT=Z9200001" \
  -d "UG=254026000" \
  -d "LN=5" \
  -d "LN2=1"

# 3. Ergebnis folgt dem Meta-Refresh zur generierten Seite

Python-Script

import requests
from bs4 import BeautifulSoup
import re
import time

class LSNClient:
    BASE_URL = "https://www1.nls.niedersachsen.de/statistik"

    def __init__(self):
        self.session = requests.Session()

    def start_session(self):
        """Startet eine LSN-Session."""
        response = self.session.post(
            f"{self.BASE_URL}/default.asp",
            data={LOGIN1': 'WEITER'}
        )
        return response.ok

    def fetch_table(self, table_id: str, region_id: str = "254026000"):
        """Ruft eine Tabelle für eine Region ab."""
        response = self.session.post(
            f"{self.BASE_URL}/html/mustertabelle.asp",
            data={
                'DT': table_id,
                'UG': region_id,
                'LN': '5',  # Mitgliedsgemeinde
                'LN2': '1'
            }
        )

        # Folge dem Meta-Refresh
        soup = BeautifulSoup(response.text, 'html.parser')
        meta = soup.find('meta', attrs={http-equiv': 'refresh'})
        if meta:
            match = re.search(r"url='([^']+)'", meta['content'])
            if match:
                result_url = f"{self.BASE_URL}{match.group(1)}"
                time.sleep(2)  # Warten auf Generierung
                return self.session.get(result_url)

        return response

# Verwendung
client = LSNClient()
client.start_session()
response = client.fetch_table("Z9200001")  # Zeitreihe Steuereinnahmen
print(response.text)

Ausgabeformate

Die generierten Ergebnisse sind verfügbar als:

  • HTML-Tabelle - Direkt im Browser anzeigbar
  • ZIP-Archiv - Enthält Excel-Datei (.xls)

Der Download-Link ist in der Form: /Statistik/pool/[TABLE_ID]/[TABLE_ID]_[HASH].zip

Einschränkungen

  • Session-Timeout - Sessions laufen nach Inaktivität ab
  • Rate Limiting - Zu viele Anfragen können blockiert werden
  • Geheimhaltung - Manche Daten sind aus Datenschutzgründen gesperrt
  • Keine REST-API - Nur formularbasierter Zugriff
  • Instabile IDs - Generierte URLs haben zeitlich begrenzte Gültigkeit

Automatisierung mit Playwright

Für zuverlässige automatisierte Datenextraktion empfehlen wir Browser-Automatisierung mit Playwright:

# Installation
pip install playwright
playwright install chromium

# Script
python scripts/fetch_lsn_data.py

Das Script im Repository verwendet Playwright, um die komplexe Frame-Navigation und JavaScript-Interaktion zu handhaben.

Kontakt LSN

Für individuelle Datenabfragen oder Hilfe:

Institution Landesamt für Statistik Niedersachsen
Telefon 0511 9898-1132/1134
E-Mail auskunft@statistik.niedersachsen.de