Inhaltsverzeichnis
TL;DR: Google Shopping Search Scraper
Für alle, die es eilig haben, hier ist der fertige Code, den wir in diesem Tutorial behandeln:
import requests
import pandas as pd
keywords = (
'katana set',
'katana for kids',
'katana stand',
)
for keyword in keywords:
products = ()
payload = {
'api_key': 'YOUR_API_KEY',
'query': keyword,
'country_code': 'it',
'tld': 'it',
'num': '100'
}
response = requests.get('https://api.scraperapi.com/structured/google/shopping', params=payload)
data = response.json()
organic_results = data('shopping_results')
print(len(organic_results))
for product in organic_results:
products.append({
'Name': product('title'),
'ID': product('docid'),
'Price': product('price'),
'URL': product('link'),
'Thumbnail': product('thumbnail')
})
df = pd.DataFrame(products)
df.to_csv(f'{keyword}.csv')
Erstellen Sie vor dem Ausführen des Skripts ein ScraperAPI-Konto und fügen Sie Ihren API-Schlüssel hinzu api_key
Parameter innerhalb der payload
.
Google Shopping verstehen
Google Shopping ist eine Suchmaschine, die es Verbrauchern ermöglicht, Produkte von Tausenden von Anbietern an einem einzigen Ort zu finden, zu vergleichen und zu kaufen.
Es bietet mehrere Funktionen, die das Finden der richtigen Option erleichtern, z. B. das Sortieren von Produkten nach Preis, Marke, Versand oder ob der Artikel im Angebot ist oder nicht.
Nachdem Sie auf ein Produkt geklickt haben, stellt Google Shopping mehr Kontext bereit oder leitet Sie direkt zur Produktseite des Verkäufers weiter, wo Sie es kaufen können.
Im Gegensatz zu E-Commerce-Marktplätzen funktioniert Google Shopping also eher wie ein Verzeichnis als wie eine echte E-Commerce-Website. Dies macht es zu einer großartigen Quelle für Produktdaten, da Sie Tausende von Produktlisten sammeln können, die für Ihre Ziel-Keywords ranken.
Die Herausforderung, Google Shopping zu eliminieren
Google Shopping nutzt fortschrittliche Anti-Scraping-Mechanismen, um zu verhindern, dass Bots Produktdaten in beliebigem Umfang sammeln. Ohne die richtige Infrastruktur sind Ihre Scraper meist von Anfang an blockiert.
Techniken wie Ratenbegrenzung, Browser-Fingerprinting und CAPTCHAs gehören zu den am häufigsten verwendeten, um Ihre Skripte von der Website fernzuhalten. Allerdings verwendet Google Shopping auch JavaScript, um seine dynamischen Ergebnisseiten bereitzustellen, was die Ausführung Ihrer Scraping-Projekte rechentechnisch (und finanziell) noch teurer macht, da Sie das JS-Rendering berücksichtigen müssen.
Um diese Herausforderungen zu meistern, können Sie eine Scraping-Lösung wie den Google Shopping-Endpunkt von ScraperAPI verwenden, der es Ihnen ermöglicht, Google Shopping-Suchergebnisse im JSON-Format mit nur einem API-Aufruf zu scrapen.
Notiz: Schauen Sie sich unser Tutorial an, wenn Sie daran interessiert sind, Google-Suchergebnisse zu entfernen.
Scraping von Google Shopping-Ergebnissen mit Python
Im weiteren Verlauf des Tutorials zeige ich Ihnen, wie Sie mit dieser SERP-API Daten aus mehreren Suchbegriffen sammeln.
Am Ende können Sie Details sammeln wie:
- Produktname
- Produkt ID
- Preis
- URL verknüpfen
- Miniaturansicht
Und mehr.
Notiz: Um diesem Tutorial zu folgen, melden Sie sich für ein kostenloses ScraperAPI-Konto an, um einen eindeutigen API-Schlüssel und 5.000 API-Credits zu erhalten.
Lass uns anfangen!
Schritt 1: Richten Sie Ihr Python-Projekt ein
Stellen Sie zunächst sicher, dass die Python 3+-Version auf Ihrem Computer installiert ist. Sie können dies von Ihrem Terminal aus mit dem Befehl überprüfen python --version
sowohl auf Mac als auch auf Windows.
Installieren Sie dann die erforderlichen Abhängigkeiten mit pip
:
pip install requests pandas
Wir verwenden Anfragen, um die zu senden get()
Anfrage an den Endpunkt senden und die benötigten Daten extrahieren, während Pandas uns dabei hilft, die Daten in einen DataFrame zu formatieren und in eine CSV-Datei zu exportieren.
Schritt 2: Schreiben Sie Ihre Nutzlast
Um Daten vom Endpunkt abzurufen, müssen wir zunächst einen einrichten payload
mit dem notwendigen Kontext für die API.
Unser Google Shopping-Endpunkt akzeptiert die folgenden Parameter:
Parameter | Beschreibung |
api_key |
Ihr einzigartiger API-Schlüssel zur Authentifizierung |
query |
Der Suchbegriff, nach dem Sie Produkte durchsuchen möchten |
country_code |
Dieser Parameter bestimmt die IP des Landes. Wenn eingestellt auf us Ihre Anfragen werden nur von in den USA ansässigen Proxys gesendet. |
tld |
Geben Sie die Top-Level-Domain an, auf die Sie abzielen möchten, z. B. „.com“ oder „.co.uk“. |
num |
Legt die Anzahl der Ergebnisse fest, die Sie pro Anfrage erhalten. |
start |
Legen Sie den Startoffset in der Ergebnisliste fest. Zum Beispiel, start=10 legt das erste Element in der Ergebnisliste als 10. Suchergebnis fest |
Notiz: Weitere Informationen zu diesen Parametern finden Sie in unserer Dokumentation.
Nehmen wir an, wir möchten mit dem Verkauf von Katanas in Italien beginnen, also haben wir beschlossen, die Top-100-Ergebnisse für die Suchanfrage herauszusuchen katana set
um unsere Angebote zu verbessern und sicherzustellen, dass unsere Preise wettbewerbsfähig bleiben.
Hier ist mein Vorschlag payload
:
payload = {
'api_key': 'YOUR_API_KEY',
'query': 'katana set',
'country_code': 'it',
'tld': 'it',
'num': '100'
}
Schritt 3: Senden Sie eine Get-Anfrage an ScraperAPI
Um eine zu senden get()
Anfrage an den Google Shopping-Endpunkt:
- Importieren Sie Ihre Abhängigkeiten oben in Ihrem Python-Skript vor der Nutzlast.
import requests
import pandas as pd
- Senden Sie dann Ihre get()-Anfrage an
https://api.scraperapi.com/structured/google/shopping
Endpunkt, mit Ihrempayload
alsparams
.
response = requests.get('https://api.scraperapi.com/structured/google/shopping', params=payload)
print(response.content)
Zum Testen drucken wir die von der API zurückgegebene JSON-Antwort – für dieses von mir festgelegte Beispiel num
Zu 1
:
"shopping_results":(
{
"position":1,
"docid":"766387587079352848",
"link":"https://www.google.it/url?url=https://www.armiantichesanmarino.eu/set-tre-katana-di-roronoa-zoro-one-piece-complete-di-fondina.html&rct=j&q=&esrc=s&opi=95576897&sa=U&ved=0ahUKEwiKztDw0bKFAxWqVqQEHUVeCQwQ2SkIwAE&usg=AOvVaw2UtBBfaC9Gfxh_WwD9eB_Q",
"title":"Set tre katana di roronoa zoro (one piece) complete di fondina",
"source":"AAnticheSanMarino",
"price":"89,90\\xc2\\xa0\\xe2\\x82\\xac",
"extracted_price":89.9,
"thumbnail":"https://encrypted-tbn0.gstatic.com/shopping?q=tbn:ANd9GcTNZtKMoGht9qQ-AsOQQnf-ULYCPLrGvY5MKBPVUwQ-JsVIC88q792L55uooEvWAuhFjXDBD84H7Hp8gOi7TIAoJugxFUz6AMmoBSrjF5V4&usqp=CAE",
"delivery_options":"Consegna a 9,00\\xc2\\xa0\\xe2\\x82\\xac",
"delivery_options_extracted_price":9
}
)
Schritt 4: Extrahieren Sie bestimmte Datenpunkte aus der JSON-Antwort
Der Endpunkt liefert viele Details zu den Produkten. In unserem Fall möchten wir jedoch nur den Produkttitel, die Produkt-ID, den Preis, die Produkt-URL und die Miniaturbild-URL erfassen.
Glücklicherweise gibt der Endpunkt alle diese Informationen in einer JSON-Antwort mit vorhersehbaren Schlüssel-Wert-Paaren zurück.
Mit diesen Schlüssel-Wert-Paaren können wir bestimmte Datenpunkte aus der Antwort extrahieren:
response = requests.get('https://api.scraperapi.com/structured/google/shopping', params=payload)
data = response.json()
organic_results = data('shopping_results')
for product in organic_results:
product_title = product('title')
print(product_title)
Nach dem Zugriff shopping_results
das die organischen Ergebnisse für die spezifische Abfrage enthält, durchlaufen wir die Ergebnisse und erhalten die title
Schlüsselwert, der der Produktname ist.
Set tre katana di roronoa zoro (one piece) complete di fondina
Dann machen wir dasselbe für die restlichen Elemente:
for product in organic_results:
product_title = product('title')
product_id = product('docid')
product_price = product('price')
product_url = product('link')
product_image = product('thumbnail')
Schritt 5: Google Shopping-Ergebnisse exportieren
Speichern Sie extrahierte Daten in einer JSON-Datei
Bevor ich Ihnen zeige, wie Sie die Daten an eine CSV-Datei senden, gibt es eine schnelle Möglichkeit, alle diese Daten einfach aus dem Terminal zu exportieren, indem wir sie in einer JSON-Datei speichern.
import requests
import json
payload = {
'api_key': 'b32f530be73cba3064c90d03f67c8e89',
'query': 'katana set',
'country_code': 'it',
'tld': 'it',
'num': '100'
}
response = requests.get('https://api.scraperapi.com/structured/google/shopping', params=payload)
data = response.json()
with open('google-shopping-results', 'w') as f:
json.dump(data, f)
In diesem Szenario müssen wir nicht viel tun, da die Antwort bereits aus JSON-Daten besteht. Alles was wir tun müssen ist import JSON
in unser Projekt und dann dump()
die Daten in eine Datei.
Speichern Sie extrahierte Daten in einer CSV-Datei
Um unsere JSON-Daten als CSV-Datei zu exportieren, erstellen Sie vor dem eine leere Liste payload
.
Da wir dann bereits über die Logik verfügen, bestimmte Datenpunkte aus der JSON-Antwort auszuwählen, hängen wir die extrahierten Produktinformationen mithilfe von an diese leere Liste an append()
Methode.
products.append({
'Name': product_title,
'ID': product_id,
'Price': product_price,
'URL': product_url,
'Thumbnail': product_image
})
Dieser Ausschnitt geht in Ihr for
Schleife. Auf diese Weise fügt Ihr Skript nach jeder Iteration jedes Produktdetail als einzelnes Element hinzu.
Um es auszuprobieren, drucken wir es aus products
und sehen, was es zurückgibt.
{
"Name":"Set di 3 katane rosse con supporto",
"ID":"14209320763374218382",
"Price":"85,50\\xa0€",
"URL":"https://www.google.it/url?url=https://www.desenfunda.com/it/set-di-3-katane-rosse-con-supporto-ma-32583-230996.html&rct=j&q=&esrc=s&opi=95576897&sa=U&ved=0ahUKEwjo4-SRh7OFAxVfVqQEHaxtDQAQ2SkIxww&usg=AOvVaw0ktLGrn1luMDxTqbWCa0WG",
"Thumbnail":"https://encrypted-tbn3.gstatic.com/shopping?q=tbn:ANd9GcRyyVQ8ae4Fxo0Nw5wwFI2xYMo6dIj_sWYfUqc1vbR8MuS-mybf4MZSb3LgprZrSKkhwP1eU97XYpVO99E9YF3VwaASfIeMtjldEd2Bf2tS5ghm3OWXWtDvHQ&usqp=CAE"
}, MORE DATA
Profi-Tipp
Sie können Ihren Code vereinfachen, indem Sie die Informationen beim Scrapen anhängen:
for product in organic_results: products.append({ 'Name': product('title'), 'ID': product('docid'), 'Price': product('price'), 'URL': product('link'), 'Thumbnail': product('thumbnail') })
Jetzt wissen wir, dass es funktioniert und die Daten in unserem Inneren sind products
Liste ist es an der Zeit, mit Pandas einen DataFrame zu erstellen und die Informationen als CSV-Datei zu speichern.
df = pd.DataFrame(products)
df.to_csv('google-shopping-results.csv', index=False)
In Ihrem Ordner finden Sie die gespeicherte CSV-Datei:
Notiz: Denken Sie daran, dass der Index bei 0 beginnt, sodass 99 das letzte Ergebnis ist.
Herzlichen Glückwunsch, Sie haben gerade die Google Shopping-Suchergebnisse gelöscht!
Scraping mehrerer Google Shopping-Suchbegriffe
Für die meisten Projekte möchten Sie den Überblick über mehrere Suchbegriffe behalten. Dazu optimieren wir den Code, den wir bereits geschrieben haben, ein wenig.
Fügen wir zunächst eine Liste mit Begriffen hinzu, die wir durchlaufen werden.
keywords = (
'katana set',
'katana for kids',
'katana stand'
)
Als nächstes erstellen wir ein neues for
Schleife und verschieben Sie unseren gesamten Code hinein, indem Sie unsere Variable zur Nutzlast hinzufügen.
for keyword in keywords:
payload = {
'api_key': 'YOUR_API_KEY',
'query': keyword,
'country_code': 'it',
'tld': 'it',
'num': '100'
}
Von da an bleibt der Code derselbe. Wir möchten jedoch nicht, dass alle Ergebnisse gemischt werden. Anstatt also alles in dieselbe Datei einzufügen, weisen wir unser Skript an, für jedes Schlüsselwort eine neue Datei zu erstellen:
- Verschieben Sie die leere Liste in unsere größere
for
Schleife – Sie können sie vor dem hinzufügenpayload
- Anschließend verwenden wir die Schlüsselwortvariable, um den Dateinamen dynamisch zu erstellen
products = ()
#HERE'S THE REST OF THE CODE
df = pd.DataFrame(products)
df.to_csv(f'{keyword}.csv')
Für jeden Suchbegriff im keywords
Liste, unser Scraper erstellt eine neue products
Leere Liste, extrahieren Sie die 100 besten Produktergebnisse und hängen Sie alle diese Daten an products
und exportieren Sie dann die Liste in eine CSV-Datei.
Fügen Sie so viele Suchbegriffe hinzu, wie Sie benötigen keywords
Variable, um dieses Projekt zu skalieren, und ScraperAPI erledigt den Rest.