LSN-Online Datenbank
Technische Dokumentation zur Nutzung der LSN-Online Regionaldatenbank des Landesamts für Statistik Niedersachsen.
Ü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:
- Initiale Anfrage an
default.asp - POST mit
LOGIN1=WEITERstartet Session - Cookie
AL_SESS-Swird gesetzt - 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 Erhebung11- Leben & Arbeiten12- Staat & Gesellschaft13- Wirtschaft & Preise21- Umwelt & Mobilität19- 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 |
| auskunft@statistik.niedersachsen.de |