Wenn Sie Dienstleistungen oder Produkte online anbieten, wissen Sie bereits, wie wichtig die Suchmaschinenoptimierung (SEO) ist. Eine Platzierung auf den vorderen Plätzen der Suchergebnisse verschafft Ihrem Unternehmen eine höhere Markenbekanntheit und höhere Einnahmen, aber der Weg dorthin erfordert viel Planung und Aufwand.
Damit Ihre Investition erfolgreich ist, brauchen Sie Daten, die Ihre Initiativen unterstützen. In diesem Fall gibt es keinen besseren Weg, den SEO-Erfolg zu messen, als die Verfolgung der Rankings, um sicherzustellen, dass Sie in die richtige Richtung gehen.
TLDR: Hier ist der vollständige Code:
Inhaltsübersicht
Warum sollten Sie Keyword-Rankings verfolgen?
Die Verfolgung von Schlüsselwörtern kann in vielen Situationen hilfreich sein:
- Entdecken Sie, ob Ihre SEO-Kampagne funktioniert
- Änderungen im Ranking schnell erkennen
- Behalten Sie die Rankings Ihrer Konkurrenten im Auge
- Erfahren Sie, wer Ihre Konkurrenten für bestimmte Schlüsselwörter sind
Die Erfassung dieser Daten ist jedoch nur mit geeigneten Werkzeugen möglich.
Das Extrahieren von Daten aus Google und anderen Suchmaschinen erfordert fortschrittliche Anti-Scraping-Techniken, um zu vermeiden, dass Ihre IP-Adresse für die Nutzung der Website gesperrt wird - können Sie sich vorstellen, dass Sie Google nie wieder von Ihrem Computer aus nutzen können?
Deshalb verwenden Dienste wie Keyword.com die ScraperAPI, um CAPTCHAs und Anti-Scraping-Mechanismen zu umgehen und lokalisierte Suchdaten aus mehr als 30 Ländern auf der ganzen Welt zu sammeln.
In diesem Tutorial werden wir dasselbe tun und ein kostenloses ScraperAPI-Konto verwenden, um den Prozess zu optimieren und in wenigen Minuten Keyword-Daten zu erhalten.
1. Ihr Projekt einrichten
Als erstes müssen wir ein neues Verzeichnis/Ordner für unser Projekt erstellen (wir nannten unseres rank_tracker), öffnen Sie sie mit VScode oder Ihrem bevorzugten Editor und erstellen Sie eine neue Python-Datei (wir haben sie rank_scraper.py).
Damit dieses Projekt funktioniert, werden wir drei wichtige Tools verwenden:
Sobald wir alles installiert und unseren API-Schlüssel zur Hand haben, können wir damit beginnen, unsere Abhängigkeiten in das Projekt zu importieren:
import requests
import pandas as pd
Um die Dinge zu vereinfachen, verwenden wir den Google Search-Endpunkt von ScraperAPI, um unsere Anfragen zu senden und strukturierte JSON-Daten aus den SERPs abzurufen.
Dies verhindert, dass unsere IP gesperrt wird, hilft uns, genaue Daten zu erhalten, und verkürzt die Entwicklungszeit erheblich.
2. Verstehen des Google Search Endpunkts
ScraperAPI ist ein fortschrittliches Web-Scraping-Tool, das mithilfe von maschinellem Lernen und jahrelanger statistischer Analyse die richtige Kombination von Headern und IP-Adressen auswählt, um eine erfolgreiche Antwort von Ihrer Ziel-Website zu erhalten.
Außerdem verfügt es über eine Reihe von Funktionen zur Automatisierung der meisten komplexen Vorgänge bei der Datenerfassung, wie z. B. IP-Rotation, CAPTCHA-Verarbeitung und Extraktion lokalisierter Daten.
Zum Glück für uns bietet ScraperAPI für die Google-Suche einen einfachen Endpunkt, mit dem wir strukturierte JSON-Daten abrufen können, was den gesamten Prozess noch weiter vereinfacht:
https://api.scraperapi.com/structured/google/search
Um den Endpunkt zu verwenden, müssen wir eine get()
Anfrage zusammen mit einer Reihe von Parametern:
'api_key'
- gepaart mit Ihrem einzigartigen API-Schlüssel'query'
- das ist das Schlüsselwort, aus dem Sie Daten extrahieren möchten
Dies sind zwar die einzigen erforderlichen Parameter, aber wir können unsere Anfrage noch spezifischer gestalten, indem wir andere Parameter wie z.B:
'country'
- Sie können einen beliebigen Code innerhalb dieser Länderliste verwenden, um ScraperAPI mitzuteilen, dass Ihre Anfrage von einem bestimmten Ort aus gesendet werden soll.'tld'
- um die TLD der Domain anzugeben, die Sie verwenden möchten (wie google.com vs. google.ca)'num'
- bestimmt die Anzahl der Ergebnisse, die pro Anfrage zurückgegeben werden
Ein kurzer Blick in die Google-Suche Endpoint Response
Schicken wir unsere erste Anfrage für die Abfrage "Wie schreibe ich ein Buch" und sehen wir, was das Tool zurückbringt:
payload = {
‘api_key’: ‘YOUR_API_KEY’,
‘country’: ‘us’,
‘query’: ‘how to write a book’
}
response = requests.get(
‘https://api.scraperapi.com/structured/google/search’,
params=payload
)
print(response.text)
So sieht die unbearbeitete Antwort aus:
Anmerkung: Ein Beispiel für eine vollständige JSON-Antwort sehen Sie hier.
Wie Sie sehen können, werden alle SERP-Elemente im JSON-Format angezeigt, was das Auffinden und Extrahieren der gewünschten Informationen erheblich erleichtert.
Im Moment sind wir nur an den organischen Ergebnissen interessiert, also schauen wir mal, was drin ist:
“organic_results”: [
{
“position”: 7,
“title”: “How to Write a Book (with Tactics from Bestsellers)”,
“tags”: “Feb 7, 2023 —”,
“snippet”: “Feb 7, 2023 — 1. Start with an idea that you love; 2. Research by reading books by other writers; 3. Outline the story; 4. Plan the opening sentence …”,
“highlighs”: [
“books”,
“story”
],
“link”: “https://blog.reedsy.com/how-to-write-a-book/”,
“displayed_link”: “https://blog.reedsy.com › how-to-write-a-book”
},
Innerhalb von "organic_results" befindet sich eine Liste von JSON-Objekten, die die Informationen für jedes Suchergebnis auf der Seite in der Reihenfolge enthalten, in der sie auf der SERP erscheinen.
Aber wenn das stimmt, warum steht es dann auf Position 7? Nun, das liegt daran, dass die ScraperAPI auch andere Suchelemente wie Anzeigen und fragen die Leute auch Kästchen, wenn Sie die Position zuweisen.
In diesem Fall ist das Element an Position 1 zum Beispiel eine Anzeige:
“answer_box”: {
“position”: 1,
“link”: “https://www.masterclass.com/articles/how-to-write-a-book”
}
Bevor wir weitermachen, sollten Sie noch eine Sache beachten. Wenn der num-Parameter nicht gesetzt ist, verwendet der Google Search-Endpunkt standardmäßig die Google-Konfiguration mit zehn Suchergebnissen pro Seite.
Jetzt, da wir wissen, wo jedes Element, das wir extrahieren möchten, gespeichert ist, können wir es extrahieren.
3. Organische Suchdaten extrahieren
Anders als bei der Arbeit mit HTML müssen wir die Antwort nicht mit einem Tool wie Beautiful Soup parsen. Stattdessen speichern wir die JSON-Daten in einer Variablen und wählen dann alle Suchergebnisse aus (die sich im Feld "organic_results" befinden):
response = requests.get('https://api.scraperapi.com/structured/google/search', params=payload)
search_data = response.json()
Ergebnisse = search_data["organic_results"]
print(ergebnisse)
<p>
Jetzt haben wir alles auf die organischen Ergebnisse eingegrenzt:
[
{
“position”:7,
“title”:“How to Write a Book: 21 Crystal-Clear Steps to Success”,
“tags”:“Apr 22, 2022 —”,
“snippet”:“Apr 22, 2022 — Write a Book Outline; Write One Chapter at a Time; Speak Your Book; Avoid Writer’s Block; Don’t Edit While You Write; Push Past The “Messy”\\xa0…”,
“highlighs”:[
“Write a Book”
],
“link”:“https://self-publishingschool.com/how-to-write-a-book/”,
“displayed_link”:“https://self-publishingschool.com › how-to-write-a-book”
},
{
“position”:8,
“title”:“How to Write a Book: Complete Step-by-Step Guide – 2023”,
“tags”:“Mar 2, 2022 —”,
“snippet”:“Mar 2, 2022 — A step-by-step guide can help new authors overcome the intimidating parts of writing a book, allowing them to stay focused and maximize\\xa0…”,
“highlighs”:[
“writing a book”
],
“link”:“https://www.masterclass.com/articles/how-to-write-a-book”,
“displayed_link”:“https://www.masterclass.com › articles › how-to-write-…”
},
{
“position”:9,
“title”:“23 Steps to Writing a Book Successfully, as a New Author”,
“snippet”:“This is the most comprehensive online guide to writing a non-fiction book. Read on Scribe to learn more about the well-tested steps we use.”,
“highlighs”:[
“writing”,
“book”
],
“link”:“https://scribemedia.com/how-to-write-book/”,
“displayed_link”:“https://scribemedia.com › Blog › Book Writing”
},
.
.
.
Wie bei jeder anderen Liste können wir jedes Objekt in einer Schleife durchlaufen und bestimmte Datenpunkte aus jedem Objekt extrahieren. Für unser Beispiel extrahieren wir die Position, den Titel und die URL eines jeden Ergebnisses und geben sie auf der Konsole aus:
for result in results:
position = result[“position”]
title = result[“title”]
url = result[“link”]
print(‘Page is in position: ‘ + str(position) + ” / Title: “ + title + ” / and URL: “ + url)
Hier ist, was wir zurückbekommen haben:
Page is in position: 10 / Title: How to Write a Book (with Tactics from Bestsellers) / and URL: https://blog.reedsy.com/how-to-write-a-book/
Page is in position: 11 / Title: How to Write a Book: 21 Crystal-Clear Steps to Success / and URL: https://self-publishingschool.com/how-to-write-a-book/
Page is in position: 12 / Title: 23 Steps to Writing a Book Successfully, as a New Author / and URL: https://scribemedia.com/how-to-write-book/
Page is in position: 13 / Title: How to Write a Book: 15 Steps (with Pictures) / and URL: https://www.wikihow.com/Write-a-Book
Page is in position: 14 / Title: How to Write a Book From Start to Finish: A Proven Guide / and URL: https://jerryjenkins.com/how-to-write-a-book/
Page is in position: 15 / Title: How to Write a Book in 2023: The Ultimate Guide for Authors / and URL: https://kindlepreneur.com/how-to-write-a-book/
Page is in position: 16 / Title: How to Write a Book in 12 Simple Steps [Free … / and URL: https://selfpublishing.com/how-to-write-a-book/
Page is in position: 17 / Title: How to Write a Book: The Ultimate Guide / and URL: https://www.briantracy.com/blog/writing/how-to-write-a-book/
Page is in position: 18 / Title: It’s National Novel Writing Month. Here’s how to write a book / and URL: https://www.npr.org/2020/04/27/845797464/if-youve-always-wanted-to-write-a-book-here-s-how
5. Speichern der Daten in einem Array
Wir wissen also, dass wir die Daten abrufen können. Jetzt ist es an der Zeit, sie in einem Array zu organisieren, mit dem wir dann alles in eine Tabellenkalkulation exportieren können.
Zuerst müssen wir ein leeres Array vor der Nutzlast erstellen:
keyword_rankings = []
Verwenden Sie dann die Funktion .append() innerhalb unserer for-Schleife, damit jeder Satz von Datenpunkten (Position, Titel und URL) als ein einzelnes Element in das Array geschrieben wird, und geben Sie das Array auf der Konsole aus:
for result in results:
keyword_rankings.append({
‘position’: result[“position”],
‘title’: result[“title”],
‘url’: result[“link”]
})
print(keyword_rankings)
So sieht das Ergebnis aus:
{
“position”: 7,
“title”: “How to Write a Book: 21 Crystal-Clear Steps to Success”,
“url”: “https://self-publishingschool.com/how-to-write-a-book/”
},
{
“position”: 8,
“title”: “23 Steps to Writing a Book Successfully, as a New Author”,
“url”: “https://scribemedia.com/how-to-write-book/”
},
6. Exportieren der Top-100-Ranking-Seiten in eine Tabellenkalkulation
Wie bereits erwähnt, zeigt der Endpunkt der Google-Suche standardmäßig zehn Ergebnisse an, aber er kann mehr Ergebnisse anzeigen, wenn wir den Parameter num mit einer höheren Zahl in der Anfrage übergeben. Dieser Parameter ist auf 100 begrenzt, denn das ist die maximale Anzahl von Ergebnissen, die Google Search in einer einzigen Anfrage anzeigen kann.
Wenn Sie alle für eine Abfrage verfügbaren Ergebnisse erhalten möchten, können Sie den Startparameter verwenden, um eine Schleife zu erstellen, in der das Tool die Paginierung von Google durchläuft. Wenn Sie 10 als Basisanzahl der Ergebnisse pro Seite nehmen, können Sie bei Null beginnen und den Startparameter bei jeder Schleife um zehn erhöhen.
Zum Beispiel:
- Start = 0 - Seite 1
- Start = 10 - Seite 2
- Start = 20 - Seite 3
In unserem Fall folgen wir einem üblichen Merkmal von Keyword-Recherche-Tools und suchen einfach die 100 besten Seiten für das angegebene Keyword heraus. Dazu setzen wir num in der Nutzlast auf 100.
payload = {
‘api_key’: ‘5bc85449d28e162fb0416d6c5b4ac5b0’,
‘country’: ‘us’,
‘num’: 100,
‘query’: ‘how to write a book’
}
Von dort aus können wir Pandas verwenden, um unser Array in einen Datenrahmen zu verwandeln und es mit einer einfachen Methode als XLSX-Datei zu exportieren:
df = pd.DataFrame(keyword_rankings)
df.to_excel(“keyword_rankings.xlsx”)
Anmerkung: Sie können den Namen der Datei nach Belieben ändern oder sogar einen Pfad hinzufügen, damit die Datei in einem Ordner Ihrer Wahl gespeichert wird. Wenn Sie eine Fehlermeldung erhalten, versuchen Sie pip install openpyxl und versuchen Sie es erneut.
Der Datenrahmen übernimmt die Schlüsselnamen (Position, Titel, URL) und verwendet sie als Überschriften des Arbeitsblatts. Das Endergebnis sieht dann so aus:
Und schon haben Sie 100 Schlüsselwort-Rankings in nur wenigen Sekunden in einer Tabelle!
Einpacken
Wie versprochen, hier ist der vollständige Code, den Sie sofort verwenden können:
import requests
import pandas as pd
keyword_rankings = []
payload = {
‘api_key’: ‘YOUR_API_KEY’,
‘country’: ‘us’,
‘num’: 100,
‘query’: ‘how to write a book’
}
response = requests.get(‘https://api.scraperapi.com/structured/google/search’, params=payload)
response.raise_for_status()
if response.status_code != 204:
search_data = response.json()
results = search_data[“organic_results”]
for result in results:
keyword_rankings.append({
‘position’: result[“position”],
‘title’: result[“title”],
‘url’: result[“link”]
})
df = pd.DataFrame(keyword_rankings)
df.to_excel(“keyword_rankings.xlsx”)
Ändern Sie einfach das Schlüsselwort und den Namen der Datei, und Sie können so viele Schlüsselwörter verfolgen, wie Sie wollen. Sie können den Dateinamen auch dynamisch auf der Grundlage des gewünschten Schlüsselworts schreiben und eine Liste von Schlüsselwörtern in einer Schleife durchgehen, um alle Daten mit einem Skript zu erfassen.
Denken Sie daran, dass Sie mit Ihrem kostenlosen Konto bis zu 5000 kostenlose API-Credits erhalten, mit denen Sie die gesamte Funktionalität von ScraperAPI in den ersten sieben Tagen kostenlos testen können. Wenn es Ihnen aber ernst damit ist, Daten für das Wachstum Ihres Unternehmens zu nutzen, können Sie den Plan wählen, der Ihren Bedürfnissen besser entspricht.
Wir hoffen, dass diese Anleitung hilfreich war und Ihnen den Einstieg in Ihre Datenerfassung erleichtert.
Bis zum nächsten Mal, viel Spaß beim Schaben!