Gelbe Seiten Scraper
Ein in Python geschriebener Apify Actor zum Extrahieren von Firmeneinträgen aus den Gelben Seiten (www.gelbeseiten.de). Er bietet drei verschiedene Modi für unterschiedliche Detailstufen der Extraktion. Zu den Funktionen gehören Rate-Limiting, Proxy-Konfiguration und flexible Indexbereiche zur Steuerung der Paginierung oder zum Fortsetzen unterbrochener Läufe.
💡Funktionen
- Zielgerichtete Suche: Geben Sie den Dienst oder die Art des Unternehmens an
(
search_what
) und das geografische Gebiet (search_where
). Verwenden Sie"bundesweit"
für deutschlandweite Suchen. - Drei Suchmodi (
search_mode
):fast_search
: Extrahiert schnell Zusammenfassungsinformationen direkt von den Suchergebnisseiten ohne den Besuch von Detailseiten. Beinhaltet Name, Adresse, Telefon, Bewertung, Hauptbranche und kodierte Kontaktlinks (E-Mail/Website). Ideal für die schnelle Listen-Erstellung.basic_search
: Besucht jede Unternehmensdetailseite einmal, um wesentliche Angaben wie vollständige Adresse, E-Mail, Website, Beschreibung, Branche, Telefonnummer und Social-Media-Links zu erfassen. Beinhaltet keine Zusammenfassungsdaten wie Bewertungen aus den Suchergebnissen.deep_search
: Kombiniert die Zusammenfassungsdaten ausfast_search
mit einem umfassenden Besuch der Detailseite, um alle verfügbaren Felder zu extrahieren, einschließlich Öffnungszeiten, Leistungen, ausführliche Unternehmensinformationen, Ausbildungsmöglichkeiten, Zahlungsmethoden, Social-Media-Links, Faxnummer, Google-Maps-Link, FAQs usw. Dies ist der gründlichste Modus.
- Indexsteuerung: Verwenden Sie
start_index
undend_index
(1-basiert), um einen bestimmten Bereich von Einträgen zu verarbeiten – nützlich zum Fortsetzen unterbrochener Läufe oder für gezieltes Scraping. - Unbegrenzter Modus: Setzen Sie
max_businesses
auf0
, um alle gefundenen Ergebnisse zu scrapen. - Rate-Limiting: Konfigurierbares
requests_per_second
zur Steuerung der API-Anfragen (alle Modi) und Detailseiten-Anfragen (basic_search
unddeep_search
), um die Last zu steuern und das Blockierungsrisiko zu verringern. - Proxy-Unterstützung: Nutzt Apifys integrierte Proxy-Integration
(
proxyConfiguration
) für zuverlässige IP-Rotation während des Scraping, besonders wichtig bei Detailseiten-Anfragen. - Strukturierte Ausgabe: Daten werden in das Apify-Dataset gespeichert. Jeder
Datensatz enthält einen UTC-Zeitstempel
scraped_at
und einenindex
(Position in den Suchergebnissen).
📥Eingabeparameter
Konfigurieren Sie das Verhalten des Actors über die Eingabefelder im Apify Console Input-Tab oder via API:
Feld | Typ | Beschreibung | Standard | Erforderlich |
---|---|---|---|---|
search_what |
String | Art des Unternehmens oder Diensts (z. B. „Restaurant", „Arzt", „Hotel", „Kreditvermittlung"). | "containerbau" |
Ja |
search_where |
String | Geografischer Ort (z. B. Stadt wie „Berlin", Region oder "bundesweit" für
deutschlandweit). |
"bundesweit" |
Ja |
search_mode |
String | Detailgrad der Extraktion: fast_search (nur Zusammenfassung),
basic_search (wesentliche Details), deep_search (Zusammenfassung +
alle Details). |
"basic_search" |
Nein |
max_businesses |
Integer | Maximale Anzahl zu speichernder Einträge. 0 für unbegrenzt (alle Ergebnisse).
|
0 |
Nein |
start_index |
Integer | 1-basierter Index des ersten zu speichernden Eintrags (nützlich zum Fortsetzen). | 1 |
Nein |
end_index |
Integer | 1-basierter Index des letzten zu speichernden Eintrags (inklusive). 0 ignoriert
dieses Limit. |
0 |
Nein |
requests_per_second |
Integer | Max. Anfragen pro Sekunde. Gilt für API-Anfragen und Detailseiten-Abfragen. Niedrigere Werte (z. B. 2–5) sicherer, höhere (z. B. 10+) schneller. | 12 |
Nein |
proxyConfiguration |
Objekt | Apify-Proxy-Einstellungen (automatisch empfohlen) oder eigene Proxy-Konfiguration. | {} |
Nein |
🔹Beispiel für Eingaben
{
"search_what": "Hotels",
"search_where": "Hamburg",
"search_mode": "deep_search",
"max_businesses": 200,
"start_index": 51,
"requests_per_second": 8,
"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
📤Ausgabe-Datenstruktur
Jeder Datensatz im Dataset ist ein JSON-Objekt. Die genauen Felder hängen vom gewählten
search_mode
ab.
🔹fast_search
Beispiel-Ausgabe
{
"index": 1,
"url": "https://www.gelbeseiten.de/gsbiz/abc123xyz",
"name": "SchnellTest GmbH",
"bewertung": 4.5,
"bewertungen": 8,
"besteBranche": "Testdienste",
"telefonnummer": "040 1234567",
"emaillink": "[email protected]", // Dekodiert aus Base64
"base64_emaillink": "aW5mb0BzY2huZWxsdGVzdC5kZQ==", // Raw Base64
"webseitelink": "https://schnelltest.de", // Dekodiert aus Base64
"base64_webseitelink": "aHR0cHM6Ly9zY2huZWxsdGVzdC5kZQ==", // Raw Base64
"adresse_from_search": "Teststraße 1, 20095 Hamburg Neustadt", // Adresssippet aus Suchergebnissen
"scraped_at": "2025-04-30T09:30:00.123Z"
}
🔹basic_search
Beispiel-Ausgabe
{
"index": 51, // Beispiel falls start_index 51 war
"url": "https://www.gelbeseiten.de/gsbiz/abc123xyz",
"name": "Hotel Hanseatic", // Extrahiert von der Detailseite
"email": "[email protected]", // Extrahiert von der Detailseite
"website": "http://www.hotel-hanseatic.de", // Extrahiert von der Detailseite
"beschreibung": "Gemütliches Hotel im Herzen von St. Georg.", // Extrahiert von der Detailseite
"branche": "Hotels", // Extrahiert von der Detailseite
"social_media": { // Extrahiert von der Detailseite
"facebook": "https://facebook.com/hotelhanseatic"
},
"address": "Steindamm 50, 20099 Hamburg St. Georg", // Adresse von der Detailseite
"telefonnummer": "040 9876543", // Extrahiert von der Detailseite
"scraped_at": "2025-04-30T09:35:00.789Z"
}
Hinweis: Ruft nur von der Detailseite ab, beinhaltet keine Zusammenfassungsdaten der Suchergebnisse.
🔹deep_search
Beispiel-Ausgabe
Kombiniert fast_search
Zusammenfassungsdaten mit allen verfügbaren Detailseiten-Daten.
{
// --- Felder von fast_search (Suchergebnisseite) ---
"index": 201,
"url": "https://www.gelbeseiten.de/gsbiz/abc123xyz",
"name": "Muster Restaurant",
"bewertung": 4.8,
"bewertungen": 55,
"besteBranche": "Restaurants",
"telefonnummer": "040 1122334",
"emaillink": "[email protected]",
"base64_emaillink": "cmVzZXJ2aWVydW5nQG11c3Rlci1yZXN0YXVyYW50LmRl",
"webseitelink": "https://www.muster-restaurant.de",
"base64_webseitelink": "aHR0cHM6Ly93d3cubXVzdGVyLXJlc3RhdXJhbnQuZGU=",
"adresse_from_search": "Musterweg 10, 20457 Hamburg Altstadt",
"scraped_at": "2025-04-30T09:40:00.456Z",
// --- Zusätzliche Felder von deep_search (Detailseite) ---
"email": "[email protected]",
"website": "https://www.muster-restaurant.de", // Dasselbe wie webseitelink
"beschreibung": "Moderne deutsche Küche mit saisonalen Zutaten.",
"oeffnungszeiten": { // Beispiel-Struktur
"Mo.": "Ruhetag",
"Di.-Sa.": "18:00 - 23:00",
"So.": "12:00 - 15:00"
},
"branche": "Restaurant; Deutsche Küche", // Kann detaillierter sein als besteBranche
"leistungsumfang": "Abendessen, Mittagstisch (So), Terrasse",
"services": ["Restaurant", "Deutsche Küche", "Terrasse"],
"unternehmensinformationen": { // Beispiel-Struktur
"gründungsjahr": ["2010"],
"parkplätze": ["vorhanden"]
},
"ausbildung": null, // Oder Text/Liste falls verfügbar
"zahlungsmittel": ["EC-Karte", "Kreditkarte", "Bar"],
"social_media": {
"instagram": "https://instagram.com/musterrestaurant"
},
"google_maps_url": "",
"faxnummer": "040 1122335"
}
Jeder Datensatz enthält zusätzliche Felder je nach gewähltem search_mode
. Nachfolgend eine
vollständige Feldreferenz:
Schlüssel | Verfügbar in | Beschreibung |
---|---|---|
name |
fast/basic/deep | Firmenname aus dem Eintrag oder der Detailseite. |
adresse_from_search |
fast/deep | Adresssippet von der Eintragseite. |
address |
basic/deep | Straßenadresse von der Detailseite. |
telefonnummer |
fast/basic/deep | Telefonnummer aus dem Eintrag oder der Detailseite. |
faxnummer |
deep | Faxnummer von der Detailseite. |
bewertung |
fast/deep | Durchschnittsbewertung (numerisch). |
bewertungen |
fast/deep | Anzahl der Bewertungen. |
besteBranche |
fast/deep | Hauptbranche/Industrie aus dem Eintrag. |
branche |
basic/deep | Industrie von der Detailseite. |
email |
basic/deep | E-Mail von der Detailseite. |
emaillink |
fast/deep | Dekodierter Link zur E-Mail auf der Detailseite. |
base64_emaillink |
fast/deep | Raw Base64 E-Mail-Datenattribut. |
webseitelink |
fast/deep | Dekodierter Website-Link. |
base64_webseitelink |
fast/deep | Raw Base64 Website-Datenattribut. |
beschreibung |
basic/deep | Unternehmensbeschreibung auf der Detailseite. |
oeffnungszeiten |
deep | Öffnungszeiten nach Tag. |
leistungsumfang |
deep | Leistungsumfang. |
services |
deep | Liste der angebotenen Leistungen. |
unternehmensinformationen |
deep | Zusätzliche Unternehmensinformationen. |
ausbildung |
deep | Bildungs- oder Ausbildungsinformationen. |
zahlungsmittel |
deep | Akzeptierte Zahlungsmethoden. |
social_media |
basic/deep | Social-Media-Links. |
google_maps_url |
deep | Google Maps Such-URL. |
faq |
deep | Liste von FAQ Q&A-Paaren (falls vorhanden). |
Hinweis: Jedes Feld kann null
sein, wenn es auf der Seite nicht vorhanden
ist.
⚙️Verwendung
- Konfigurieren Sie die Eingaben im Tab "Input" (setzen Sie
search_what
,search_where
usw.). - Wählen Sie einen Proxy-Modus. Automatischer Apify-Proxy wird empfohlen.
- Klicken Sie auf Start.
- Überwachen Sie den Fortschritt im Tab Log.
- Greifen Sie auf die Ergebnisse unter Storage → Dataset zu.
🎯Anwendungsfälle
- Lead-Generierung und Kontaktgewinnung.
- Marktforschung und Wettbewerbsanalyse.
- Lokales SEO und Erstellung von Unternehmensverzeichnissen.
- Datenanreicherungs-Pipelines auf Apify.
💲Preise
- 1000 Ergebnisse = 0,40 $ + Plattformnutzung:
- 1000 Einträge,
fast_search
: ≈ 0,01 $, Laufzeit ~1,2 Min. - 1000 Einträge,
basic_search
: ≈ 0,04 $, Laufzeit ~11 Min. - 1000 Einträge,
deep_search
: ≈ 0,05 $, Laufzeit ~12 Min.
- 1000 Einträge,
🔗Integrationen
- Scheduler: Automatisierte tägliche/wöchentliche Läufe.
- Webhooks: Auslösen nachgelagerter Workflows nach Abschluss.
- API: Programmatische Steuerung über die Apify API.
- Composer: Verkettung mit anderen Actors (z. B. Reinigung, Anreicherung).
🛠️Wartung
- Autor: Dominic M. Quaiser
- Kontakt: [email protected]
- Website: dominic-quaiser.io