Beispielarbeiten · Daten & Scraping
Datenextraktion: 40 Betriebe aus einem Online-Verzeichnis in eine saubere Tabelle
Name, Ort, Telefon, Website und Öffnungszeiten von 40 Kfz-Werkstätten, aus einem Verzeichnis gelesen, bereinigt und geprüft. Mit Code, Prüfregeln und der fertigen Datei.
Beispielarbeit, kein Kundenauftrag. Der Betrieb und alle Zahlen sind erfunden, damit du siehst, wie die Arbeit aussieht, bevor du etwas in Auftrag gibst.
Was geliefert wird
- CSV-Datei mit 40 Einträgen: Name, Ort, Telefon, Website, Öffnungszeiten (Excel öffnet sie direkt)
- Bereinigt: Telefonnummern einheitlich, Leerzeichen und Zeilenumbrüche entfernt
- Geprüft: keine Dubletten (Name und Ort), keine leeren Pflichtfelder
- Das Skript dazu, damit die Liste später selbst aktualisiert werden kann
Die ersten sechs Zeilen
| Name | Ort | Telefon | Öffnungszeiten |
|---|---|---|---|
| Reifen Bauer | Klagenfurt | +43 597 817838 | Mo-Fr 8:00-18:00 |
| Kfz Bauer | Linz | +43 578 641821 | Mo-Fr 8:00-18:00 |
| Kfz Wagner | Klagenfurt | +43 513 602643 | Mo-Fr 8:00-18:00 |
| Reifen Huber | Klagenfurt | +43 330 996445 | Mo-Do 7:00-16:30, Fr 7:00-12:00 |
| Kfz Leitner | Villach | +43 676 627415 | Mo-Fr 7:30-17:00 |
| Kfz Hofer | Klagenfurt | +43 304 515884 | Mo-Fr 8:00-18:00 |
So wird gelesen
Erst wird geprüft, ob die Seite den Abruf in ihrer robots.txt erlaubt. Gelesen wird langsam, eine Seite alle drei Sekunden, damit der Betreiber nicht belastet wird. Persönliche Daten von Privatpersonen werden nicht gesammelt.
import time, requests
from urllib import robotparser
from bs4 import BeautifulSoup
BASIS = "https://verzeichnis.example/kfz-werkstaetten?seite={}"
def erlaubt(url):
rp = robotparser.RobotFileParser("https://verzeichnis.example/robots.txt"); rp.read()
return rp.can_fetch("GLTools-Datenabruf", url)
def lesen(seiten=4):
zeilen = []
for n in range(1, seiten + 1):
url = BASIS.format(n)
if not erlaubt(url):
raise SystemExit("robots.txt verbietet den Abruf - hier wird nicht weitergemacht")
html = requests.get(url, headers={"User-Agent": "GLTools-Datenabruf"}, timeout=30).text
for karte in BeautifulSoup(html, "html.parser").select(".eintrag"):
zeilen.append({
"name": karte.select_one(".name").get_text(strip=True),
"ort": karte.select_one(".ort").get_text(strip=True),
"telefon": karte.select_one(".tel").get_text(strip=True),
})
time.sleep(3) # langsam lesen: eine Seite alle 3 Sekunden
return zeilen
So etwas für deinen Betrieb?
Beschreib kurz, was du brauchst. Du bekommst einen Festpreis, bevor ich anfange; ohne dein Ja passiert nichts.