الدليل العملي لاستخراج بيانات علي إكسبريس: البحث عن المنتجات وبناء أدوات الدروبشيبينغ

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

الدليل العملي لاستخراج بيانات علي إكسبريس: البحث عن المنتجات وبناء أدوات الدروبشيبينغ

لماذا يعتبر استخراج بيانات علي إكسبريس تحدياً مختلفاً تماماً؟

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

الكلمة المفتاحية هنا هي البراغماتية: بدلاً من محاربة نظام الحماية، سنتعلم كيف نعمل مع البنية التحتية للموقع — بما في ذلك واجهات برمجة تطبيقات الجوال التي تعيد بيانات JSON أكثر ثراءً وأسهل في المعالجة من HTML الخاص بسطح المكتب.

هيكل علي إكسبريس: ما الذي يمكنك استخراجه؟

علي إكسبريس يتكون من أربعة أنواع رئيسية من الصفحات، كل منها يقدم بيانات مختلفة:

صفحات البحث

عنوان URL النموذجي: https://www.aliexpress.com/w/wholesale-KEYWORD.html أو عبر معلمات البحث SearchText=KEYWORD. كل صفحة نتائج تعيد حوالي 60 منتجاً مع:

  • عنوان المنتج والسعر المعروض
  • صورة مصغرة واحدة ورابط للصفحة التفصيلية
  • عدد الطلبات (مقياس تقريبي للمبيعات)
  • تقييم النجوم وعدد التقييمات
  • شارة الشحن المجاني أو سريع

المشكلة: HTML لصفحة البحث يتم إنشاؤه عبر JavaScript بشكل كبير — وغالباً ما تجد عناصر فارغة عند استخدام طلبات HTTP بسيطة.

صفحات المنتج التفصيلية

هذه هي الكنز الحقيقي. كل منتج في aliexpress.com/item/ITEM_ID.html يحتوي على:

  • وصف مفصل (غالباً صور طويلة مُضمَّنة)
  • جدول متغيرات SKU (الألوان، الأحجام، الخيارات) مع أسعار لكل متغير
  • خيارات الشحن حسب الوجهة مع تكاليف تقديرية
  • معلومات البائع: متجر، تقييمات، سنوات كعضو
  • قسم المراجعات مع صور المشترين

صفحات المتاجر

كل بائع لديه متجر في aliexpress.com/store/STORE_ID. صفحة المتجر تعرض:

  • قائمة منتجات المتجر مع ترتيب حسب المبيعات
  • تصنيفات المتجر (أزياء، إلكترونيات، إلخ)
  • مقاييس البائع: سرعة الشحن، دقة الوصف، جودة الاتصال

خلاصات المنتجات الرائجة

علي إكسبريس يقدم صفحات مثل aliexpress.com/popular و aliexpress.com/wholesale-trending.html التي تعرض المنتجات الأكثر مبيعاً. هذه البيانات ثمينة جداً لأدوات البحث عن المنتجات.

نظام الحماية من البوتات لمجموعة علي بابا

مجموعة علي بابا تستخدم مجموعة متعددة الطبقات من التقنيات لمكافحة الأتمتة:

طبقة الحماية الوصف كيفية التعامل معها
AliCAPTCHA نظام كابتشا مخصص يعتمد على سلوك الماوس والانزلاق تجنب تفعيله بالحفاظ على معدل طلب منخفض
بصمة المتصفح فحص WebGL، Canvas، الخطوط، ملحقات المتصفح استخدام واجهة برمجة تطبيقات الجوال بدلاً من محاكاة المتصفح
حدود المعدل حوالى 100-200 طلب/دقيقة لكل IP قبل الحظر المؤقت تدوير IP سكني مع جلسات لاصقة
تشفير البيانات بعض بيانات الأسعار مشفرة في HTML وتُفك عبر JavaScript استخدام واجهة برمجة تطبيقات الجوال التي تعيد JSON غير مشفر
فحص TLS التحقق من بصمة TLS لتحديد الطلبات الآلية استخدام عميل HTTP ببصمة متصفح حقيقي

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

واجهات برمجة تطبيقات الجوال: الطريق الأفضل لاستخراج البيانات

تطبيق علي إكسبريس للجوال يتواصل مع خوادم عبر واجهات برمجة تطبيقات JSON مريحة. هذه الواجهات تعيد بيانات منظمة بالكامل — لا حاجة لتحليل HTML أو التعامل مع تشفير JavaScript.

نقاط نهاية API الرئيسية

فيما يلي أكثر نقاط النهاية فائدة لأدوات البحث عن المنتجات:

  • بحث عن المنتجات: https://m.aliexpress.com/api/search/items — يعيد قائمة منتجات مع فلاتر
  • تفاصيل المنتج: https://m.aliexpress.com/api/product/detail?productId=ITEM_ID — بيانات كاملة مع متغيرات SKU
  • تقييمات المنتج: https://m.aliexpress.com/api/product/reviews?productId=ITEM_ID — مراجعات مع صور
  • خيارات الشحن: https://m.aliexpress.com/api/shipping/detail?productId=ITEM_ID&shipToCountry=US — تكاليف شحن حسب الدولة
  • المنتجات الرائجة: https://m.aliexpress.com/api/popular/products — المنتجات الأكثر مبيعاً

ملاحظة مهمة: نقاط نهاية API هذه تتغير. علي إكسبريس يُحدِّث مسارات API بشكل دوري. راقب حركة مرور تطبيق الجوال باستخدام أداة مثل Charles Proxy أو mitmproxy لتحديد نقاط النهاية الحالية.

مثال على استجابة API (مقتطف)

عند طلب تفاصيل المنتج عبر واجهة الجوال، تحصل على شيء مثل:

{
  "code": 200,
  "data": {
    "productId": "1005006234567890",
    "subject": "Wireless Bluetooth Earbuds TWS",
    "price": {"minPrice": "8.99", "maxPrice": "15.99", "currency": "USD"},
    "skuList": [
      {"skuId": "1200003", "propPath": "Color:Black;Size:S", "price": "8.99", "stock": 245},
      {"skuId": "1200004", "propPath": "Color:White;Size:S", "price": "9.49", "stock": 180}
    ],
    "storeInfo": {
      "storeName": "TechGadgets Official",
      "storeId": "9123456",
      "positiveRate": "97.8%",
      "yearsOnPlatform": 5
    },
    "tradeInfo": {"orderCount": 5420, "averageStar": "4.7"},
    "shippingOptions": [
      {"method": "AliExpress Standard Shipping", "estimatedDays": "15-25", "cost": "0.00"}
    ]
  }
}

لاحظ الفرق الجوهري: كل متغير SKU له سعر ومخزون منفصل. هذا مستحيل تقريباً الحصول عليه من HTML الخاص بسطح المكتب دون تشغيل JavaScript.

مثال عملي: استخراج المنتجات الرائجة باستخدام بايثون وبروكسيات سكنية

الآن ننتقل إلى التطبيق العملي. سنبني سكربت بايثون يستخرج المنتجات الرائجة من واجهة برمجة تطبيقات الجوال، مع استخدام بروكسيات سكنية من ProxyHat لتجنب الحظر.

الإعداد الأساسي

import requests
import time
import json
from datetime import datetime

# إعدادات ProxyHat - بروكسيات سكنية مع جلسات لاصقة
PROXY_USER = "user-country-US-session-prod1"
PROXY_PASS = "your_password"
PROXY_URL = f"http://{PROXY_USER}:{PROXY_PASS}@gate.proxyhat.com:8080"

proxies = {
    "http": PROXY_URL,
    "https": PROXY_URL
}

# رؤوس تحاكي تطبيق الجوال
MOBILE_HEADERS = {
    "User-Agent": "AliApp(AE/8.45.0.230428) iPhone/16.4 Language/en",
    "x-ae-client": "iphone",
    "x-ae-app-version": "8.45.0",
    "Accept": "application/json",
    "Accept-Language": "en-US;q=0.9"
}

استخراج المنتجات الرائجة

def fetch_trending_products(page=1, category_id=None):
    """جلب المنتجات الرائجة من واجهة برمجة تطبيقات الجوال"""
    url = "https://m.aliexpress.com/api/popular/products"
    params = {
        "page": page,
        "limit": 50,
    }
    if category_id:
        params["categoryId"] = category_id
    
    try:
        response = requests.get(
            url,
            params=params,
            headers=MOBILE_HEADERS,
            proxies=proxies,
            timeout=15
        )
        response.raise_for_status()
        data = response.json()
        
        if data.get("code") == 200:
            return data["data"]["items"]
        else:
            print(f"خطأ من API: {data.get('msg', 'غير معروف')}")
            return None
    except requests.exceptions.RequestException as e:
        print(f"خطأ في الطلب: {e}")
        return None

# جلب أول 3 صفحات من المنتجات الرائجة
all_trending = []
for page in range(1, 4):
    products = fetch_trending_products(page=page)
    if products:
        all_trending.extend(products)
        print(f"تم جلب {len(products)} منتج من الصفحة {page}")
    time.sleep(2)  # تأخير بين الطلبات

استخراج تفاصيل المنتج مع متغيرات SKU

def fetch_product_detail(product_id):
    """جلب تفاصيل منتج كاملة مع متغيرات SKU"""
    url = f"https://m.aliexpress.com/api/product/detail"
    params = {"productId": product_id}
    
    try:
        response = requests.get(
            url,
            params=params,
            headers=MOBILE_HEADERS,
            proxies=proxies,
            timeout=15
        )
        response.raise_for_status()
        data = response.json()
        
        if data.get("code") != 200:
            return None
            
        product = data["data"]
        
        # استخراج البيانات الأساسية
        result = {
            "id": product["productId"],
            "title": product["subject"],
            "min_price": float(product["price"]["minPrice"]),
            "max_price": float(product["price"]["maxPrice"]),
            "total_orders": product.get("tradeInfo", {}).get("orderCount", 0),
            "rating": float(product.get("tradeInfo", {}).get("averageStar", "0")),
            "variants": [],
            "seller": {}
        }
        
        # معالجة متغيرات SKU
        for sku in product.get("skuList", []):
            variant = {
                "sku_id": sku["skuId"],
                "properties": {},
                "price": float(sku["price"]),
                "stock": int(sku.get("stock", 0))
            }
            # تحليل propPath مثل "Color:Black;Size:S"
            for prop in sku["propPath"].split(";"):
                key, value = prop.split(":")
                variant["properties"][key.strip()] = value.strip()
            result["variants"].append(variant)
        
        # معلومات البائع
        store = product.get("storeInfo", {})
        result["seller"] = {
            "name": store.get("storeName"),
            "id": store.get("storeId"),
            "positive_rate": store.get("positiveRate"),
            "years": store.get("yearsOnPlatform", 0)
        }
        
        return result
        
    except requests.exceptions.RequestException as e:
        print(f"خطأ في جلب المنتج {product_id}: {e}")
        return None

# مثال: جلب تفاصيل منتج محدد
detail = fetch_product_detail("1005006234567890")
if detail:
    print(json.dumps(detail, indent=2, ensure_ascii=False))

تقدير تكاليف الشحن حسب الوجهة

def fetch_shipping_options(product_id, destination_country="US"):
    """جلب خيارات الشحن وتكاليفه حسب بلد الوجهة"""
    url = "https://m.aliexpress.com/api/shipping/detail"
    params = {
        "productId": product_id,
        "shipToCountry": destination_country,
        "quantity": 1
    }
    
    try:
        response = requests.get(
            url,
            params=params,
            headers=MOBILE_HEADERS,
            proxies=proxies,
            timeout=15
        )
        response.raise_for_status()
        data = response.json()
        
        if data.get("code") != 200:
            return []
        
        shipping_options = []
        for option in data.get("data", {}).get("shippingOptions", []):
            shipping_options.append({
                "method": option.get("method"),
                "cost": float(option.get("cost", "0")),
                "estimated_days_min": int(option.get("estimatedDays", "0-0").split("-")[0]),
                "estimated_days_max": int(option.get("estimatedDays", "0-0").split("-")[-1]),
                "tracking": option.get("trackingAvailable", False)
            })
        
        # ترتيب حسب التكلفة
        shipping_options.sort(key=lambda x: x["cost"])
        return shipping_options
        
    except requests.exceptions.RequestException as e:
        print(f"خطأ في جلب الشحن: {e}")
        return []

# مقارنة الشحن لعدة دول
countries = ["US", "GB", "DE", "FR", "SA"]
for country in countries:
    options = fetch_shipping_options("1005006234567890", country)
    cheapest = options[0] if options else None
    if cheapest:
        print(f"{country}: {cheapest['cost']}$ خلال {cheapest['estimated_days_min']}-{cheapest['estimated_days_max']} يوم")
    time.sleep(1)

التعامل مع متغيرات SKU: لماذا هي مهمة للدروبشيبينغ

متغيرات SKU هي جوهر البحث عن المنتجات. منتج واحد على علي إكسبريس قد يحتوي على 20-50 متغيراً (ألوان × أحجام × خيارات). لكل متغير:

  • سعر مختلف — أحياناً بفارق 200% بين الأحجام
  • مخزون منفصل — المتغير الشائع قد ينفد بينما الباقي متاح
  • مبيعات مختلفة — اللون الأسود قد يبيع 10x أكثر من الأصفر

لأدوات الدروبشيبينغ، هذا يعني أنك تحتاج إلى:

  1. استخراج كل متغيرات SKU لكل منتج — وليس فقط السعر المعروض
  2. تتبع المخزون لكل متغير بشكل منفصل
  3. تحديد المتغيرات الأكثر مبيعاً (عادةً التي تظهر كـ "مختار" بشكل افتراضي)

نصيحة عملية: عند استخراج بيانات المنتج، احفظ skuId لكل متغير. هذا المعرف فريد ومستقر — يمكنك استخدامه لإنشاء روابط مباشرة لمتغيرات محددة في متجرك.

تقدير تكاليف الشحن حسب الوجهة

تكلفة الشحن هي العامل الأكثر أهمية في ربحية الدروبشيبينغ. منتج بسعر 2$ قد يكلف 8$ شحن — مما يقتل الهامش الربحي. واجهة برمجة تطبيقات الجوال تتيح لك:

  • الحصول على تكلفة شحن فعلية لكل طريقة شحن متاحة
  • التحقق من الشحن المجاني — وهو ميزة تنافسية رئيسية
  • مقارنة أوقات التسليم بين AliExpress Standard Shipping و ePacket وطرق أخرى

بالنسبة لأدوات البحث عن المنتجات، نوصي ببناء جدول مقارنة:

وجهة الشحن طريقة الشحن التكلفة أيام التسليم تتبع
الولايات المتحدة AliExpress Standard مجاني 15-25 نعم
ألمانيا AliExpress Standard 2.50$ 18-30 نعم
السعودية AliExpress Standard مجاني 20-35 نعم
البرازيل Correios 3.80$ 30-60 محدود

سمعة البائع: كيف تقيّم الموردين تلقائياً

علي إكسبريس يقدم أربعة مقاييس رئيسية للبائعين:

  • معدل التقييم الإيجابي — يجب أن يكون أعلى من 95% للموردين الموثوقين
  • سرعة الشحن — يقيس مدى التزام البائع بوقت الشحن المعلن
  • دقة الوصف — مدى تطابق المنتج مع الوصف والصور
  • جودة الاتصال — سرعة وفعالية ردود البائع

لأغراض الأتمتة، نوصي ببناء درجة مركبة تجمع بين هذه العوامل:

def calculate_seller_score(store_info):
    """حساب درجة مركبة للبائع من 0 إلى 100"""
    positive_rate = float(store_info.get('positiveRate', '0').replace('%', ''))
    years = int(store_info.get('yearsOnPlatform', 0))
    
    # وزن العوامل
    score = (
        positive_rate * 0.5 +    # 50% وزن لمعدل التقييم
        min(years * 5, 25) +      # حتى 25 نقطة لسنوات الخبرة
        25                         # نقطة أساسية
    )
    
    return round(min(score, 100), 1)

# تصفية الموردين ذوي الدرجات المنخفضة
if calculate_seller_score(detail['seller']) >= 75:
    print("بائع موثوق - يمكن المتابعة")
else:
    print("بائع محفوف بالمخاطر - تجنب")

حدود المعدل واستراتيجيات التدوير

علي إكسبريس يفرض حدوداً صارمة على معدل الطلبات. بناءً على اختباراتنا:

  • لكل IP: حوالى 100-150 طلب/دقيقة قبل تفعيل AliCAPTCHA
  • لكل حساب: حوالى 500-1000 طلب/ساعة قبل الحظر المؤقت
  • بدون بروكسي: الحظر يحدث بعد 5-10 دقائق من الطلبات المتتالية

استراتيجية التدوير الموصى بها:

  1. استخدم بروكسيات سكنية مع جلسات لاصقة — كل جلسة تحتفظ بنفس IP لمدة 10-30 دقيقة
  2. حافظ على تأخير 2-4 ثوان بين الطلبات لكل جلسة
  3. غيّر الجلسة بعد كل 80-100 طلب
  4. استهدف جغرافياً — استخدم IPs من البلد الذي تستهدفه

مع ProxyHat، يمكنك التحكم في الجلسة والبلد عبر اسم المستخدم:

# بروكسي سكني أمريكي مع جلسة لاصقة
us_proxy = "http://user-country-US-session-abc123:pass@gate.proxyhat.com:8080"

# بروكسي سكني ألماني مع جلسة مختلفة
de_proxy = "http://user-country-DE-session-xyz789:pass@gate.proxyhat.com:8080"

# بروكسي سكني سعودي
sa_proxy = "http://user-country-SA-session-def456:pass@gate.proxyhat.com:8080"

حداثة البيانات: كم مرة يجب عليك الاستخراج؟

بيانات علي إكسبريس تتغير بترددات مختلفة:

نوع البيانات معدل التغير تردد الاستخراج الموصى به
الأسعار تتغير يومياً أثناء العروض، أسبوعياً عادةً كل 6-12 ساعة
المخزون (SKU) يتغير عدة مرات يومياً للمنتجات الرائجة كل 2-4 ساعات
عدد الطلبات يتزايد باستمرار مرة يومياً
التقييمات تتغير ببطء (مراجعات جديدة) مرة كل 2-3 أيام
خيارات الشحن مستقرة نسبياً مرة أسبوعياً
معلومات البائع نادراً ما تتغير مرة شهرياً

لأدوات البحث عن المنتجات، نوصي بـ:

  • استخراج يومي لقائمة المنتجات المراقبة (الأسعار والمخزون)
  • استخراج أسبوعي للمنتجات الرائجة والتصنيفات
  • استخراج عند الطلب لتفاصيل المنتج الجديدة

الاعتبارات القانونية والأخلاقية

قبل البدء في استخراج بيانات علي إكسبريس، ضع في اعتبارك:

  • robots.txt: علي إكسبريس يسمح ببعض المسارات ويمنع أخرى. تحقق دائماً من aliexpress.com/robots.txt
  • شروط الخدمة: الاستخراج الآلي قد ينتهك شروط الاستخدام. راجعها مع مستشار قانوني
  • حقوق الطبع: لا تعيد نشر صور المنتجات أو الأوصاف بدون إذن
  • GDPR/CCPA: إذا كنت تجمع بيانات مراجعات المستخدمين، تأكد من الامتثال لقوانين الخصوصية
  • الاستخدام العادل: استخرج فقط البيانات التي تحتاجها فعلاً ولا تثقل خوادم الموقع

مقارنة: HTML مقابل API الجوال مقابل واجهة برمجة التطبيقات الرسمية

المعيار HTML سطح المكتب API الجوال API الرسمية (AliExpress Affiliate)
سهولة المعالجة صعبة — JavaScript ثقيل سهلة — JSON نظيف سهلة — JSON رسمي
بيانات SKU مشفرة/غير مكتملة كاملة مع المخزون محدودة
بيانات الشحن تقريبية فقط تفصيلية حسب الوجهة غير متاحة
التكلفة مجانية (بروكسيات فقط) مجانية (بروكسيات فقط) محدودة بحدود API
الموثوقية منخفضة — تتغير HTML كثيراً متوسطة — تتغير أحياناً عالية — رسمية
خطر الحظر عالي متوسط لا يوجد

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

النقاط الرئيسية

  • استهدف API الجوال بدلاً من HTML — بيانات JSON أكثر ثراءً وأسهل في المعالجة
  • استخدم بروكسيات سكنية مع جلسات لاصقة وتحديد جغرافي — IPs من مراكز البيانات تُحظر بسرعة
  • استخرج متغيرات SKU بشكل منفصل — الأسعار والمخزون تختلف كثيراً بين المتغيرات
  • تحقق من تكاليف الشحن لكل بلد وجهة — الشحن المجاني ليس دائماً متاحاً
  • حافظ على معدل طلب معقول — 2-4 ثوان بين الطلبات، غيّر الجلسة كل 80-100 طلب
  • حدّث البيانات بالتردد المناسب — المخزون كل 2-4 ساعات، الأسعار كل 6-12 ساعة
  • قيّم سمعة البائع تلقائياً باستخدام درجة مركبة تجمع بين معدل التقييم وسنوات الخبرة

إذا كنت تبني أداة بحث عن منتجات أو نظام دروبشيبينغ آلي، فإن بروكسيات ProxyHat السكنية توفر لك التدوير الجغرافي والجلسات اللاصقة التي تحتاجها لاستخراج بيانات علي إكسبريس بشكل موثوق. تحقق أيضاً من حالة استخدام استخراج الويب لمزيد من التفاصيل حول كيفية عمل بنية تحتية استخراج قوية.

¿Listo para empezar?

Accede a más de 50M de IPs residenciales en más de 148 países con filtrado impulsado por IA.

Ver preciosProxies residenciales
← Volver al Blog