„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Erstellen einer Metasuchmaschine in Python: Eine Schritt-für-Schritt-Anleitung

Erstellen einer Metasuchmaschine in Python: Eine Schritt-für-Schritt-Anleitung

Veröffentlicht am 28.08.2024
Durchsuche:700

Building a Meta Search Engine in Python: A Step-by-Step GuideIm heutigen digitalen Zeitalter gibt es reichlich Informationen, aber die Suche nach den richtigen Daten kann eine Herausforderung sein. Eine Metasuchmaschine fasst die Ergebnisse mehrerer Suchmaschinen zusammen und bietet so einen umfassenderen Überblick über die verfügbaren Informationen. In diesem Blogbeitrag gehen wir durch den Prozess der Erstellung einer einfachen Metasuchmaschine in Python, komplett mit Fehlerbehandlung, Ratenbegrenzung und Datenschutzfunktionen.

Was ist eine Metasuchmaschine?

Eine Metasuchmaschine verwaltet keine eigene Datenbank mit indizierten Seiten. Stattdessen sendet es Benutzeranfragen an mehrere Suchmaschinen, sammelt die Ergebnisse und präsentiert sie in einem einheitlichen Format. Dieser Ansatz ermöglicht Benutzern den Zugriff auf ein breiteres Spektrum an Informationen, ohne jede Suchmaschine einzeln durchsuchen zu müssen.

Voraussetzungen

Um diesem Tutorial folgen zu können, benötigen Sie:

  • Python ist auf Ihrem Computer installiert (vorzugsweise Python 3.6 oder höher).
  • Grundkenntnisse der Python-Programmierung.
  • Ein API-Schlüssel für Bing Search (Sie können sich für eine kostenlose Stufe anmelden).

Schritt 1: Richten Sie Ihre Umgebung ein

Stellen Sie zunächst sicher, dass Sie die erforderlichen Bibliotheken installiert haben. Wir verwenden Anfragen für HTTP-Anfragen und JSON für die Verarbeitung von JSON-Daten.

Sie können die Anforderungsbibliothek mit pip installieren:

pip install requests

Schritt 2: Definieren Sie Ihre Suchmaschinen

Erstellen Sie eine neue Python-Datei mit dem Namen meta_search_engine.py und definieren Sie zunächst die Suchmaschinen, die Sie abfragen möchten. Für dieses Beispiel verwenden wir DuckDuckGo und Bing.

import requests
import json
import os
import time

# Define your search engines
SEARCH_ENGINES = {
    "DuckDuckGo": "https://api.duckduckgo.com/?q={}&format=json",
    "Bing": "https://api.bing.microsoft.com/v7.0/search?q={}&count=10",
}

BING_API_KEY = "YOUR_BING_API_KEY"  # Replace with your Bing API Key

Schritt 3: Implementieren Sie die Abfragefunktion

Als nächstes erstellen Sie eine Funktion, um die Suchmaschinen abzufragen und Ergebnisse abzurufen. Wir werden auch eine Fehlerbehandlung implementieren, um Netzwerkprobleme reibungslos zu verwalten.

def search(query):
    results = []

    # Query DuckDuckGo
    ddg_url = SEARCH_ENGINES["DuckDuckGo"].format(query)
    try:
        response = requests.get(ddg_url)
        response.raise_for_status()  # Raise an error for bad responses
        data = response.json()
        for item in data.get("RelatedTopics", []):
            if 'Text' in item and 'FirstURL' in item:
                results.append({
                    'title': item['Text'],
                    'url': item['FirstURL']
                })
    except requests.exceptions.RequestException as e:
        print(f"Error querying DuckDuckGo: {e}")

    # Query Bing
    bing_url = SEARCH_ENGINES["Bing"].format(query)
    headers = {"Ocp-Apim-Subscription-Key": BING_API_KEY}
    try:
        response = requests.get(bing_url, headers=headers)
        response.raise_for_status()  # Raise an error for bad responses
        data = response.json()
        for item in data.get("webPages", {}).get("value", []):
            results.append({
                'title': item['name'],
                'url': item['url']
            })
    except requests.exceptions.RequestException as e:
        print(f"Error querying Bing: {e}")

    return results

Schritt 4: Ratenbegrenzung implementieren

Um zu verhindern, dass API-Ratenlimits erreicht werden, implementieren wir einen einfachen Ratenbegrenzer mit time.sleep().

# Rate limit settings
RATE_LIMIT = 1  # seconds between requests

def rate_limited_search(query):
    time.sleep(RATE_LIMIT)  # Wait before making the next request
    return search(query)

Schritt 5: Datenschutzfunktionen hinzufügen

Um den Datenschutz der Benutzer zu verbessern, vermeiden wir die Protokollierung von Benutzeranfragen und implementieren einen Caching-Mechanismus, um Ergebnisse vorübergehend zu speichern.

CACHE_FILE = 'cache.json'

def load_cache():
    if os.path.exists(CACHE_FILE):
        with open(CACHE_FILE, 'r') as f:
            return json.load(f)
    return {}

def save_cache(results):
    with open(CACHE_FILE, 'w') as f:
        json.dump(results, f)

def search_with_cache(query):
    cache = load_cache()
    if query in cache:
        print("Returning cached results.")
        return cache[query]

    results = rate_limited_search(query)
    save_cache({query: results})
    return results

Schritt 6: Duplikate entfernen

Um sicherzustellen, dass die Ergebnisse eindeutig sind, implementieren wir eine Funktion zum Entfernen von Duplikaten basierend auf der URL.

def remove_duplicates(results):
    seen = set()
    unique_results = []
    for result in results:
        if result['url'] not in seen:
            seen.add(result['url'])
            unique_results.append(result)
    return unique_results

Schritt 7: Ergebnisse anzeigen

Erstellen Sie eine Funktion, um die Suchergebnisse in einem benutzerfreundlichen Format anzuzeigen.

def display_results(results):
    for idx, result in enumerate(results, start=1):
        print(f"{idx}. {result['title']}\n   {result['url']}\n")

Schritt 8: Hauptfunktion

Abschließend alles in eine Hauptfunktion integrieren, die die Metasuchmaschine ausführt.

def main():
    query = input("Enter your search query: ")
    results = search_with_cache(query)
    unique_results = remove_duplicates(results)
    display_results(unique_results)

if __name__ == "__main__":
    main()

Vollständiger Code

Hier ist der vollständige Code für Ihre Metasuchmaschine:

import requests
import json
import os
import time

# Define your search engines
SEARCH_ENGINES = {
    "DuckDuckGo": "https://api.duckduckgo.com/?q={}&format=json",
    "Bing": "https://api.bing.microsoft.com/v7.0/search?q={}&count=10",
}

BING_API_KEY = "YOUR_BING_API_KEY"  # Replace with your Bing API Key

# Rate limit settings
RATE_LIMIT = 1  # seconds between requests

def search(query):
    results = []

    # Query DuckDuckGo
    ddg_url = SEARCH_ENGINES["DuckDuckGo"].format(query)
    try:
        response = requests.get(ddg_url)
        response.raise_for_status()
        data = response.json()
        for item in data.get("RelatedTopics", []):
            if 'Text' in item and 'FirstURL' in item:
                results.append({
                    'title': item['Text'],
                    'url': item['FirstURL']
                })
    except requests.exceptions.RequestException as e:
        print(f"Error querying DuckDuckGo: {e}")

    # Query Bing
    bing_url = SEARCH_ENGINES["Bing"].format(query)
    headers = {"Ocp-Apim-Subscription-Key": BING_API_KEY}
    try:
        response = requests.get(bing_url, headers=headers)
        response.raise_for_status()
        data = response.json()
        for item in data.get("webPages", {}).get("value", []):
            results.append({
                'title': item['name'],
                'url': item['url']
            })
    except requests.exceptions.RequestException as e:
        print(f"Error querying Bing: {e}")

    return results

def rate_limited_search(query):
    time.sleep(RATE_LIMIT)
    return search(query)

CACHE_FILE = 'cache.json'

def load_cache():
    if os.path.exists(CACHE_FILE):
        with open(CACHE_FILE, 'r') as f:
            return json.load(f)
    return {}

def save_cache(results):
    with open(CACHE_FILE, 'w') as f:
        json.dump(results, f)

def search_with_cache(query):
    cache = load_cache()
    if query in cache:
        print("Returning cached results.")
        return cache[query]

    results = rate_limited_search(query)
    save_cache({query: results})
    return results

def remove_duplicates(results):
    seen = set()
    unique_results = []
    for result in results:
        if result['url'] not in seen:
            seen.add(result['url'])
            unique_results.append(result)
    return unique_results

def display_results(results):
    for idx, result in enumerate(results, start=1):
        print(f"{idx}. {result['title']}\n   {result['url']}\n")

def main():
    query = input("Enter your search query: ")
    results = search_with_cache(query)
    unique_results = remove_duplicates(results)
    display_results(unique_results)

if __name__ == "__main__":
    main()

Abschluss

Glückwunsch! Sie haben eine einfache, aber funktionale Metasuchmaschine in Python erstellt. Dieses Projekt zeigt nicht nur, wie Suchergebnisse aus mehreren Quellen aggregiert werden, sondern betont auch die Bedeutung der Fehlerbehandlung, der Ratenbegrenzung und des Datenschutzes der Benutzer. Sie können diese Engine weiter verbessern, indem Sie weitere Suchmaschinen hinzufügen, eine Webschnittstelle implementieren oder sogar maschinelles Lernen integrieren, um das Ergebnisranking zu verbessern. Viel Spaß beim Codieren!

Freigabeerklärung Dieser Artikel ist abgedruckt unter: https://dev.to/thisisanshgupta/building-a-meta-search-engine-in-python-a-step-by-step-guide-1jb8?1 Wenn es einen Verstoß gibt, bitte Kontaktieren Sie Study_golang@163 .comdelete
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3