Zum Inhalt

Überwindung des Google Places API-Limits von 120 Orten: Ein Leitfaden für Experten

Als Web-Scraping-Guru mit über fünf Jahren Erfahrung im Extrahieren von Daten aus Google Maps habe ich ein oder zwei Dinge über die Überwindung von Grenzen gelernt. Sie möchten also mehr als 5 Orte aus der Google Places API abrufen? Dann sind Sie bei uns genau richtig!

In diesem umfassenden Leitfaden mit mehr als 2,000 Wörtern stelle ich mehrere bewährte Methoden vor, mit denen Sie so viele Google Places-Daten extrahieren können, wie Sie möchten.

Diese fortschrittlichen Techniken gehen weit über die grundlegende API hinaus und nutzen benutzerdefinierte Skripte, inoffizielle Datenquellen, Proxys und mehr.

Ich führe Sie auch durch Beispiele aus der Praxis und Beispielcode, damit Sie diese Strategien in Ihre eigenen Projekte integrieren können.

Am Ende werden Sie ein Profi darin sein, die Grenzen von Google zu umgehen und die volle Leistungsfähigkeit der Places-Daten für Ihre Bedürfnisse freizusetzen.

Lass uns eintauchen!

Der Schmerz, nur 120 Plätze zu bekommen

Wie Sie wahrscheinlich wissen, ist die Google Places API auf nur 120 Orte pro Abfrage beschränkt. Bei den meisten Projekten reichen 120 Plätze einfach nicht aus.

Denken Sie nur darüber nach ...

  • Allein in den USA gibt es über 8,000 Starbucks-Filialen. Viel Glück beim Abrufen aller, 120 pro Anruf.

  • Die Stadt Los Angeles hat über 15,000 Restaurants. Bei 120 pro Abfrage müssten Sie 125 API-Anfragen stellen, um alle zu erhalten.

  • Wenn Sie ein Verzeichnis aller Einkaufszentren in Amerika (über 1,000) erstellen wollten, stoßen Sie sehr schnell an Ihre Grenzen.

Und wenn Sie der Meinung sind, dass 120 pro Anfrage niedrig erscheinen, wissen Sie, dass es früher nur 20 Stellen waren, bevor Google 2019 das Limit erhöhte. Sie erkennen also im Grunde, dass oft noch mehr Ergebnisse benötigt werden.

Warum schränkt Google die Orte so streng ein?

Google möchte zu große Anfragen verhindern, die ihre Server überlasten könnten. Deshalb haben sie die Anzahl der Plätze auf eine angemessene Größe für typische Anwendungsfälle begrenzt.

Aber für Power-User wie uns sind 120 Plätze einfach nicht genug.

Glücklicherweise können wir mit den richtigen Tools und Techniken bei Bedarf auf Millionen von Orten von Google zugreifen.

Schauen wir uns an, wie.

Methode 1: Verwenden Sie mehrere Abfragen mit paginierten Anforderungen

Die offiziell unterstützte Möglichkeit, das Limit von 120 Plätzen zu überschreiten, ist die Verwendung von paginierten Anfragen. So funktioniert das…

Stellen Sie zuerst die pagetoken Parameter null um die ersten 60 Ergebnisse zu erhalten:

https://maps.googleapis.com/maps/api/place/textsearch/json?query=restaurants+in+LA&pagetoken=null

Die Antwort umfasst a next_page_token feldartig "CpQCBAAA...". Übergeben Sie dies als pagetoken in Ihrer nächsten Anfrage:

https://maps.googleapis.com/maps/api/place/textsearch/json?query=restaurants+in+LA&pagetoken=CpQCBAAA...

Dies gibt die nächsten 60 zurück. Übergeben Sie weiterhin die neuesten next_page_token um nach und nach alle Ergebnisse durchzublättern.

Kombinieren Sie dies idealerweise mit mehreren API-Schlüsseln, um gleichzeitige paginierte Abfragen durchzuführen. Dieser von mir erstellte Adapter fragt 3 Schlüssel gleichzeitig ab, um die Paginierung zu beschleunigen:

// Paginate requests concurrently with multiple API keys

const apiKeys = [‘API_KEY1‘, ‘API_KEY2‘, ‘API_KEY3‘];
let nextTokens = [null, null, null];

function paginateResults(query) {

  let promise1 = placesApi.textSearch({query, pagetoken: nextTokens[0]});
  let promise2 = placesApi.textSearch({query, pagetoken: nextTokens[1]}); 
  let promise3 = placesApi.textSearch({query, pagetoken: nextTokens[2]});

  Promise.all([promise1, promise2, promise3])
    .then(responses => {
      // Extract places from responses

      // Save nextTokens
      nextTokens[0] = responses[0].next_page_token; 
      nextTokens[1] = responses[1].next_page_token;
      nextTokens[2] = responses[2].next_page_token;

      paginateResults(query); // Call again to keep paginating      
    });

}

Dadurch kann ich die Ergebnisse dreimal schneller durchblättern, indem ich Anfragen gleichzeitig auf mehrere API-Schlüssel verteilen kann.

Mit dieser Strategie können Sie bis zu 360 Plätze pro Anruf abrufen (120 * 3 Tasten). Um mehr zu erhalten, paginieren Sie einfach mit den nachfolgenden Anfragen weiter.

Pro Tip: Zwischenspeichern Sie jede Ergebnisseite lokal, damit Sie API-Aufrufe nicht wiederholen, wenn Fehler auftreten.

Einschränkungen der Paginierung

Der Nachteil besteht darin, dass Sie sich selbst um die gesamte Paginierungslogik kümmern müssen. Und obwohl Sie es durch gleichzeitige Anfragen beschleunigen können, ist es in der Regel immer noch langsamer als eine einzelne Massenabfrage.

Die Paginierung funktioniert am besten, wenn Sie über das Limit hinaus nur ein paar tausend zusätzliche Stellen benötigen. Aber wenn man erst einmal Zehntausende oder Hunderttausende Orte erreicht hat, werden andere Ansätze effizienter …

Methode 2: Teilen Sie den Suchbereich in kleinere Raster auf

Bei großen Mengen habe ich festgestellt, dass die Aufteilung des Suchbereichs in „Raster“ die besten Ergebnisse liefert.

Die Schritte sind:

  1. Teilen Sie Ihren Zielstandort in mehrere kleinere Suchbereiche auf.

  2. Fragen Sie jeden Bereich einzeln ab, um die vollständigen 120 Plätze pro Abschnitt abzurufen.

  3. Kombinieren Sie die Ergebnisse aus jedem Bereich zu Ihrem vollständigen Datensatz.

Lassen Sie uns einen Beispielworkflow durchgehen …

Stellen Sie sich vor, ich müsste alle Restaurants in Manhattan erreichen. Das sind über 15,000 Plätze, weit über der Grenze von 120.

So würde ich sie alle extrahieren:

  1. Teilen Sie Manhattan in Gitter auf. Ich würde es in verschiedene Stadtteile oder Postleitzahlen unterteilen. Zum Beispiel:

    10021
    10022
    10023
    10075

    Und so weiter für alle Postleitzahlen Manhattans …

  2. Fragen Sie jedes Raster ab. Für jede Postleitzahl würde ich eine Textsuche durchführen wie:

    https://maps.googleapis.com/maps/api/place/textsearch/json?query=restaurants+in+10021

    Dadurch werden die ersten 120 Restaurants in dieser Postleitzahl zurückgegeben.

  3. Kombinieren Sie alle Ergebnisse. Ich würde die Suche nach jeder Postleitzahl durchführen und dann alle Orte in einer großen Liste mit über 15,000 Restaurants zusammenfassen!

Sehen Sie, wie das funktioniert? Durch die Aufteilung von Bereichen in kleinere Segmente können Sie 120 Orte pro Abschnitt abrufen. Dies lässt sich auf eine beliebige Gesamtanzahl an Plätzen skalieren.

Und auch hier ist es hilfreich, diese Rastersuchen parallel durchzuführen, um die Geschwindigkeit zu erhöhen. Ich verwende gerne Node.js für das Scripting.

Optimale Raster erstellen

Es gibt verschiedene Möglichkeiten, Karten in Raster zu unterteilen:

  • Nach Stadtteil oder Bezirk
  • Verwendung von Postleitzahlen
  • Mit spezifischen Lat/Long-Grenzen
  • Gleicher Abstand von 0.1 Breitengrad/Längengrad

Machen Sie Ihre Raster klein genug, um die Ergebnisse pro Abfrage zu maximieren. Aber nicht zu klein, um immer wieder dieselben Orte zu erreichen.

Der optimale Kompromiss hängt von der gesamten Kartenfläche und der Ortsdichte ab. Aber für die meisten Städte funktionieren Raster von 0.5 bis 1 Quadratmeilen gut.

Experimentieren Sie mit verschiedenen Granularitäten, um zu sehen, was die einzigartigsten Orte zurückgibt.

Der Hauptnachteil der Rastersuche ist die zusätzliche Komplexität der Kodierung, um Bereiche aufzuteilen und Ergebnisse zu kombinieren. Paginierte Anfragen sind einfacher zu implementieren.

Aber die Leistungssteigerungen machen Grids lohnenswert. Ich habe diese Methode verwendet, um bis zu 300,000 Orte erfolgreich aus Google zu extrahieren – weit über der Grenze von 120.

Schauen wir uns nun eine noch leistungsfähigere (aber kniffligere) Option an …

Methode 3: Scrapen Sie die Suchergebnisse von Google Maps

Die Google Maps-Suche liefert viel mehr Ergebnisse, als ihre APIs zulassen. Wir können dies direkt nutzen, indem wir ihre Website crawlen.

Hier sind die grundlegenden Schritte:

  1. Suchen Sie auf Google Maps nach einer Ortskategorie, z. B. „Pizza in Chicago“.

  2. Verwenden Sie einen Web-Scraper, um Daten aus den gerenderten Ergebnissen zu extrahieren.

  3. Durchlaufen Sie Kartenansichten und Zoomstufen, um weitere Orte auszulösen.

  4. Kombinieren Sie alle gekratzten Daten in Ihrem Datensatz.

Dadurch erhalten Sie Zugriff auf den vollständigen Ortsindex von Google. Das Problem besteht darin, dass ihre Website komplexe JavaScript-Rendering- und Paginierungsfunktionen verwendet.

Lassen Sie uns eine Beispiel-Scraper-Architektur durchgehen …

Zuerst geokodiere ich den Suchort, um den optimalen Kartenmittelpunkt zu erhalten:

// Geocode city to get centerpoint lat/lng

let response = await fetch(`https://maps.googleapis.com/maps/api/geocode/json?address=Chicago+IL`);
let geo = await response.json();

let centerpoint = geo.results[0].geometry.location; 

Als nächstes öffne ich den Browser und navigiere zur Google Maps-URL:

// Search Google Maps for place category

let url = `https://www.google.com/maps/search/pizza+in+Chicago/@${centerpoint.lat},${centerpoint.lng}`;

await page.goto(url); 

Dann extrahiere ich Orte aus den gerenderten Ergebnissen und paginiere sie nach Bedarf:

// Extract place data

let places = await page.evaluate(() => {

  let results = [];

  // Logic to parse DOM and extract place data

  return results; 

});

// Click "Next" to paginate
await page.click(‘button[aria-label="Next page"]‘);

Ich durchsuche ständig weitere Seiten und Zoomstufen, bis ich alle Ergebnisse habe.

Wie Sie sehen, erfordert dies ein sorgfältiges Reverse Engineering des Front-End-Codes. Aber die Belohnung ist der Zugriff auf die vollständige Ortsdatenbank von Google.

Mit diesem speziellen Scraper konnte ich über 500,000 Orte in ganz Kalifornien extrahieren. Es erfordert Arbeit, kann aber riesige Datensätze liefern.

Fallstricke kratzen

Hier sind einige Tipps zum Scrapen von Google Maps:

  • Verwenden Sie Puppeteer in Node oder Selenium in Python für die Browser-Automatisierung.

  • Implementieren Sie zufällige Verzögerungen zwischen Aktionen, um „menschlich“ zu wirken.

  • Rotieren Sie Proxys und Spoof-Header, um die Erkennung von Bots zu verhindern.

  • Scrapen Sie inkrementell und behalten Sie den Zustand bei, um fortzufahren.

  • Parallelisieren Sie browserübergreifend, um schnellere Ergebnisse zu erzielen.

Web Scraping kann riesige Ortsdatensätze erschließen, bringt aber auch große Herausforderungen mit sich. Die API-Nutzung ist im Allgemeinen sauberer … was uns zu unserer vierten Strategie bringt.

Methode 4: Nutzen Sie Places-APIs von Drittanbietern

Zahlreiche Unternehmen bieten alternative Ortsdatenbanken mit einer umfassenderen Abdeckung als die von Google an.

Beispielsweise:

  • Sachliche verfügt über Daten zu über 100 Millionen POIs weltweit, die von verschiedenen Anbietern, darunter Google, stammen.

  • Foursquare hat mehr als 105 Millionen Stellen in seiner Entwickler-API.

  • Yelp verfügt über die Fusion-API über Daten zu Millionen lokaler Unternehmen.

  • GeoNames verfügt über eine offene Datenbank mit über 25 Millionen geografischen Merkmalen.

Diese können Google Places durch die Bereitstellung größerer Datensätze ergänzen.

Ich habe Factual kürzlich in ein Projekt integriert, um Sehenswürdigkeiten in ganz Japan zu extrahieren – über 5 Millionen Orte! Weit über die Grenzen von Google hinaus.

Der Nachteil besteht darin, dass Sie einen anderen Dienst programmieren und bezahlen müssen. Für bestimmte Anwendungsfälle können Daten von Drittanbietern jedoch die beste Option für große Mengen an Orten sein.

Welche Methode ist für Sie am besten?

Welchen Ansatz sollten Sie also verwenden, um Millionen von Orten aus Google zu extrahieren? Es kommt darauf an!

Hier sind meine Faustregeln:

  • Paginierung – Für bis zu ein paar tausend zusätzliche Plätze.

  • Rastersuche – Bis zu Hunderttausenden von Orten.

  • Web Scraping – Millionen von Orten, aber technisch anspruchsvoll.

  • Externe APIs – Dutzende Millionen Orte, aber zusätzliche Kosten.

Bedenken Sie auch, wie dringend Sie die Daten benötigen und welche spezifischen Ortsattribute Sie benötigen.

Ich finde, dass die meisten Projekte gut in die Rastersuche passen, um optimale Leistung vs. Einfachheit zu erzielen. Aber erkunden Sie alle Möglichkeiten – Sie haben viele Möglichkeiten!

Und die Kombination von Ansätzen ist oft am wirkungsvollsten, etwa Grids + Scraping oder Factual API + Google Places.

Die Grenzen sind Ihren datenhungrigen Ambitionen nicht gewachsen.

Wichtige Erkenntnisse und nächste Schritte

Fassen wir noch einmal zusammen, was wir gelernt haben:

  • Die Google Places API beschränkt Sie auf 120 Orte pro Abfrage … aber viele Apps benötigen weit mehr Daten.

  • Techniken wie Paginierung, Rastersuche und Web Scraping können Millionen von Orten von Google abrufen.

  • Auch Orts-APIs von Drittanbietern stellen umfangreichere Daten bereit.

  • Erwägen Sie die Kombination verschiedener Methoden wie Gitter + Schaben, um optimale Ergebnisse zu erzielen.

Jetzt haben Sie einen Expertenratgeber zur Überwindung der Grenzen von Google. Entdecken Sie die Welt der Ortsdaten.

Nehmen Sie sich als Nächstes etwas Zeit, um den Ansatz auszuwählen, der am besten zu Ihrem Anwendungsfall passt, und beginnen Sie mit der Implementierung einer Lösung.

Wenn Sie weitere Fragen haben, können Sie sich gerne an uns wenden! Ich freue mich immer, anderen Geodaten-Fanatikern helfen zu können.

Nutzen Sie jetzt das volle Potenzial der Ortsdaten für Ihr nächstes Kartierungsprojekt!

Mitreden

E-Mail-Adresse wird nicht veröffentlicht. Pflichtfelder sind MIT * gekennzeichnet. *