Einführung
Das Verständnis des Bot-Verkehrs ist wichtig für die Optimierung der Website-Leistung, die Verbesserung der Sicherheit und die Verbesserung der SEO-Strategie. Dieses Projekt bietet ein Python-Skript zur Analyse von Webserver-Protokollen und zur Kategorisierung des Bot-Traffics, wobei der Schwerpunkt auf Suchmaschinen-Crawlern liegt. Es nutzt die Pandas-Bibliothek für die Datenmanipulation und -analyse.
Warum den Bot-Verkehr analysieren?
Bot-Traffic spielt eine wichtige Rolle bei der Indizierung Ihrer Website, aber übermäßige oder böswillige Bot-Aktivitäten können die Leistung negativ beeinflussen. Dieses Skript hilft Ihnen:
- Identifizieren Sie verschiedene Arten von Bots, die auf Ihre Website zugreifen.
- Analysieren Sie ihr Verhalten.
- Ergreifen Sie geeignete Maßnahmen auf der Grundlage Ihrer Erkenntnisse
Erste Schritte
Voraussetzungen
- Python 3.7 oder höher.
- Webserver-Protokolldateien, die in einem Logs-Verzeichnis im Stammverzeichnis des Projekts gespeichert werden.
- Die Protokolldateien müssen einem Standardformat folgen (z. B. Combined Log Format)..
Konfigurieren des Skripts
Ändern Sie die log_files-Liste im if name == „main“: Block, um Ihre Protokolldateien anzugeben:
if __name__ == "__main__":
log_files = ["logs/your_log_file.log", "logs/another_log_file.log"] # Add your log file paths
df = analyze_logs(log_files)
summarize_analysis(df)
Code-Struktur und Erläuterung
Das Skript ist in Schlüsselfunktionen unterteilt:
Hilfsfunktionen
is_google_ip(ip)
- Zweck: Überprüft, ob eine IP zum Crawler-Netzwerk von Google gehört.
- Implementierung: Verwendet ipaddress, um zu überprüfen, ob die IP in die dem Googlebot bekannten Bereiche fällt.
import ipaddress
def is_google_ip(ip):
try:
google_ranges = [
"66.249.64.0/19", "66.249.80.0/20", "64.233.160.0/19", "216.239.32.0/19",
"2001:4860:4801::/48", "2404:6800:4003::/48", "2607:f8b0:4003::/48", "2800:3f0:4003::/48"
]
ip_obj = ipaddress.ip_address(ip)
return any(ip_obj in ipaddress.ip_network(net) for net in google_ranges)
except:
return False
Kennung der Suchmaschine
- Zweck: Identifiziert die Suchmaschine auf der Grundlage der User-Agent-Zeichenfolge.
- Implementierung: Verwendet reguläre Ausdrücke, um bekannte Bot-Muster abzugleichen.
import re
def identify_search_engine(user_agent):
search_engines = {
'Google': ['Googlebot', 'AdsBot-Google'],
'Bing': ['bingbot'],
'DuckDuckGo': ['DuckDuckBot'],
'Yandex': ['YandexBot']
}
for engine, patterns in search_engines.items():
if any(re.search(pattern, user_agent, re.IGNORECASE) for pattern in patterns):
return engine
return 'Other'
2. Hauptanalyse-Funktion
analyze_logs(log_files)
- Zweck: Parst Webserver-Protokolle, um wichtige Informationen wie IP-Adressen, Zeitstempel, URLs, Benutzeragenten zu extrahieren und Suchmaschinen-Bots zu identifizieren.
- Implementierung: Die Funktion liest die Protokolle Zeile für Zeile, extrahiert relevante Daten mithilfe von regulären Ausdrücken und klassifiziert Suchmaschinen-Bots basierend auf Benutzeragenten.
import pandas as pd
def analyze_logs(log_files):
records = []
for log_file in log_files:
with open(log_file, 'r') as f:
for line in f:
pattern = r'(d+.d+.d+.d+).*?[(.*?)].*?"(w+) (.*?) HTTP.*?" (d+) .*?"(.*?)" "(.*?)"'
match = re.search(pattern, line)
if match:
ip, datetime, method, url, status, referer, user_agent = match.groups()
search_engine = identify_search_engine(user_agent)
records.append({
'ip': ip, 'datetime': datetime, 'method': method,
'url': url, 'status': int(status), 'referer': referer,
'user_agent': user_agent, 'search_engine': search_engine
})
df = pd.DataFrame(records)
if not df.empty:
df['datetime'] = pd.to_datetime(df['datetime'], format="%d/%b/%Y:%H:%M:%S", errors='coerce')
return df
3. Zusammenfassung und Ausgabetion and Output
summarize_analysis(df)
- Zweck: Gibt eine hochrangige Zusammenfassung der Suchmaschinen-Bot-Aktivitäten aus.
python
def summarize_analysis(df):
if df.empty:
print("No data to summarize.")
return
print("n--- Summary of Log Analysis ---")
print("nTop Search Engines:")
print(df['search_engine'].value_counts())
4. Hauptausführung
- Purpose: Runs the analysis workflow.
if __name__ == "__main__":
log_files = ["logs/your_log_file.log"]
df = analyze_logs(log_files)
summarize_analysis(df)
Skript ausführen
- Öffne ein Terminal.
- Navigiere zum Projektverzeichnis.
- Führe den Befehl aus:
python analyze_logs.py
Erweiterung des Skripts
Hier sind einige Möglichkeiten, das Skript zu verbessern:
- Detailliertere Analyse: Berechne Statuscode-Verteilungen pro Suchmaschine und identifiziere die am häufigsten gecrawlten Seiten von verschiedenen Bots.
- Datenvisualisierung: Verwende
matplotlib
undseaborn
, um Erkenntnisse durch Diagramme zu generieren. - GeoIP-Analyse: Integriere eine GeoIP-Bibliothek, um die Standorte von Bots zu verfolgen.
- Erweiterte Bot-Erkennung: Analysiere Anfrage-Muster und erkenne Anomalien in Benutzeragenten.
- Datenbank-Integration: Speichere die geparsten Logdaten in einer SQLite- oder PostgreSQL-Datenbank für effiziente Abfragen.
Fazit
Dieses Python-Skript bietet eine leistungsstarke Möglichkeit, Bot-Traffic aus Webserver-Protokollen zu analysieren. Durch die Identifizierung und Kategorisierung von Suchmaschinen-Bots hilft es Webmastern, SEO-Strategien und die Website-Leistung zu optimieren. Mit weiteren Erweiterungen kann es als robustes Werkzeug für tiefere Traffic-Analysen dienen.
Sie können den vollständigen Code hier finden.

Alex ist ein erfahrener SEO-Berater mit über 14 Jahren Erfahrung in der Zusammenarbeit mit globalen Marken wie Montblanc, Ricoh, Rogue, Gropius Bau und Spartoo. Mit seinem Fokus auf datengesteuerte Strategien hilft Alex Unternehmen, ihre Online-Präsenz zu steigern und ihre SEO-Bemühungen zu optimieren.
Nach seiner Tätigkeit als Head of SEO bei Spreadshirt arbeitet er nun selbstständig und unterstützt Kunden weltweit mit dem Fokus auf digitale Transformation durch SEO.
Er hat einen MBA-Abschluss und eine Data-Science-Zertifizierung, wodurch er starke analytische Fähigkeiten für SEO mitbringt. Mit seiner Erfahrung in der Webentwicklung und Scrum-Methoden zeichnet er sich durch die Zusammenarbeit mit funktionsübergreifenden Teams aus, um skalierbare digitale Strategien umzusetzen.
Außerhalb der Arbeit liebt er Sport: Laufen, Tennis und Schwimmen im Besonderen!