مراقبة أسعار المنافسين

إعداد مراقبة تلقائية للأسعار عبر مواقع المنافسين الإلكترونية باستخدام FourA API.

ما ستقوم ببنائه

برنامج Python نصي يقوم بما يلي:

  1. جلب صفحات المنتجات من قائمة عناوين URL الخاصة بالمنافسين
  2. استخراج بيانات الأسعار من HTML
  3. تسجيل النتائج في ملف CSV
  4. التشغيل وفقًا لجدول زمني

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

pip install requests beautifulsoup4

الخطوة 1: تحديد الأهداف

إنشاء قائمة بعناوين URL الخاصة بالمنتجات لمراقبتها:

targets = [
    {"name": "Competitor A - Widget", "url": "https://competitor-a.com/widget", "selector": ".price"},
    {"name": "Competitor B - Widget", "url": "https://competitor-b.com/products/widget", "selector": "[data-price]"},
    {"name": "Competitor C - Widget", "url": "https://competitor-c.com/item/123", "selector": ".product-price span"},
]

الخطوة 2: جلب الصفحات عبر FourA

import requests
import time

SINGLE_URL = "https://eu.api.foura.ai/api/single/"
BROWSER_URL = "https://eu.api.foura.ai/api/browser/"
API_KEY = "YOUR_API_KEY"

HEADERS = {
    "X-API-Key": API_KEY,
    "Content-Type": "application/json"
}

def fetch_page(url, use_browser=False):
    if use_browser:
        resp = requests.post(BROWSER_URL, headers=HEADERS, json={
            "url": url,
            "timeout_ms": 15000
        })
        if resp.status_code == 429:
            time.sleep(5)
            return fetch_page(url, use_browser)
        return resp.json().get("body", "")
    else:
        resp = requests.post(SINGLE_URL, headers=HEADERS, json={
            "method": "GET",
            "url": url,
            "unblocker": True
        })
        if resp.status_code == 429:
            time.sleep(5)
            return fetch_page(url, use_browser)
        return resp.json().get("data", "")

الخطوة 3: استخراج الأسعار

from bs4 import BeautifulSoup
import re

def extract_price(html, selector):
    soup = BeautifulSoup(html, "html.parser")
    element = soup.select_one(selector)
    if not element:
        return None
    # Extract numeric price from text like "$49.99" or "49,99 EUR"
    text = element.get_text(strip=True)
    match = re.search(r'[\d,.]+', text)
    return float(match.group().replace(',', '.')) if match else None

الخطوة 4: التشغيل وتسجيل النتائج

import csv
from datetime import datetime

def monitor_prices():
    timestamp = datetime.now().isoformat()
    results = []

    for target in targets:
        html = fetch_page(target["url"])
        price = extract_price(html, target["selector"])
        results.append({
            "timestamp": timestamp,
            "name": target["name"],
            "url": target["url"],
            "price": price
        })
        print(f"{target['name']}: {price}")
        time.sleep(1)  # Be polite

    # Append to CSV
    with open("prices.csv", "a", newline="") as f:
        writer = csv.DictWriter(f, fieldnames=["timestamp", "name", "url", "price"])
        if f.tell() == 0:
            writer.writeheader()
        writer.writerows(results)

if __name__ == "__main__":
    monitor_prices()

الخطوة 5: جدولة التشغيل

تشغيل البرنامج النصي كل ساعة باستخدام cron:

crontab -e
# Add this line:
0 * * * * cd /path/to/project && python3 monitor.py >> monitor.log 2>&1

نصائح

  • ابدأ باستخدام single endpoint، وانتقل إلى المتصفح إذا كانت الصفحات تستخدم تصيير JavaScript
  • أضف معالجة الأخطاء: تتغير تخطيطات المواقع. قم بتسجيل الإخفاقات بشكل منفصل.
  • حافظ على تحديث المحددات (selectors): عندما يعيد المنافس تصميم موقعه، قم بتحديث محدد CSS
  • احترم المواقع: ضع فواصل زمنية بين الطلبات، وتجنب ساعات الذروة، واتبع ملف robots.txt

الخطوات التالية

آخر تحديث: 27 أبريل 2026