"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > بناء محرك بحث ميتا في بايثون: دليل خطوة بخطوة

بناء محرك بحث ميتا في بايثون: دليل خطوة بخطوة

تم النشر بتاريخ 2024-08-28
تصفح:131

Building a Meta Search Engine in Python: A Step-by-Step Guideفي العصر الرقمي اليوم، تتوفر المعلومات بكثرة، ولكن العثور على البيانات الصحيحة يمكن أن يمثل تحديًا. يقوم محرك البحث التعريفي بتجميع النتائج من محركات بحث متعددة، مما يوفر رؤية أكثر شمولاً للمعلومات المتاحة. في منشور المدونة هذا، سنتعرف على عملية إنشاء محرك بحث تعريفي بسيط في Python، مكتمل بمعالجة الأخطاء وتحديد المعدل وميزات الخصوصية.

ما هو محرك البحث ميتا؟

لا يحتفظ محرك البحث التعريفي بقاعدة بيانات خاصة به للصفحات المفهرسة. وبدلاً من ذلك، يرسل استعلامات المستخدم إلى محركات بحث متعددة، ويجمع النتائج ويقدمها بتنسيق موحد. يتيح هذا الأسلوب للمستخدمين الوصول إلى نطاق أوسع من المعلومات دون الحاجة إلى البحث في كل محرك على حدة.

المتطلبات الأساسية

لمتابعة هذا البرنامج التعليمي، ستحتاج إلى:

  • تم تثبيت Python على جهازك (يفضل Python 3.6 أو أعلى).
  • المعرفة الأساسية ببرمجة بايثون.
  • مفتاح API لبحث Bing (يمكنك الاشتراك في طبقة مجانية).

الخطوة 1: قم بإعداد بيئتك

أولاً، تأكد من تثبيت المكتبات اللازمة. سنستخدم طلبات تقديم طلبات HTTP وjson للتعامل مع بيانات JSON.

يمكنك تثبيت مكتبة الطلبات باستخدام النقطة:

pip install requests

الخطوة 2: تحديد محركات البحث الخاصة بك

أنشئ ملف Python جديدًا باسم meta_search_engine.py وابدأ بتحديد محركات البحث التي تريد الاستعلام عنها. في هذا المثال، سنستخدم DuckDuckGo و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

الخطوة 3: تنفيذ وظيفة الاستعلام

بعد ذلك، قم بإنشاء وظيفة للاستعلام عن محركات البحث واسترجاع النتائج. سنقوم أيضًا بتنفيذ معالجة الأخطاء لإدارة مشكلات الشبكة بأمان.

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

الخطوة 4: تنفيذ تحديد المعدل

لمنع الوصول إلى حدود معدل واجهة برمجة التطبيقات (API)، سنقوم بتنفيذ محدد معدل بسيط باستخدام 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)

الخطوة 5: إضافة ميزات الخصوصية

لتعزيز خصوصية المستخدم، سنتجنب تسجيل استعلامات المستخدم وننفذ آلية التخزين المؤقت لتخزين النتائج مؤقتًا.

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

الخطوة 6: إزالة التكرارات

لضمان أن النتائج فريدة، سنقوم بتنفيذ وظيفة لإزالة التكرارات بناءً على عنوان 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

الخطوة 7: عرض النتائج

إنشاء وظيفة لعرض نتائج البحث بتنسيق سهل الاستخدام.

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

الخطوة 8: الوظيفة الرئيسية

أخيرًا، قم بدمج كل شيء في وظيفة رئيسية تقوم بتشغيل محرك البحث التعريفي.

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()

كود كامل

إليك الكود الكامل لمحرك البحث التعريفي الخاص بك:

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()

خاتمة

تهانينا! لقد قمت ببناء محرك بحث تعريفي بسيط ولكنه عملي في بايثون. لا يوضح هذا المشروع كيفية تجميع نتائج البحث من مصادر متعددة فحسب، بل يؤكد أيضًا على أهمية معالجة الأخطاء وتحديد المعدل وخصوصية المستخدم. يمكنك تحسين هذا المحرك بشكل أكبر عن طريق إضافة المزيد من محركات البحث، أو تنفيذ واجهة ويب، أو حتى دمج التعلم الآلي لتحسين تصنيف النتائج. برمجة سعيدة!

بيان الافراج تم إعادة إنتاج هذه المقالة على: https://dev.to/thisisanshgupta/building-a-meta-search-engine-in-python-a-step-by-step-guide-1jb8?1 إذا كان هناك أي انتهاك، من فضلك اتصل بـ Study_golang@163 .comdelete
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3