كيف تكشط بيانات Shein على نطاق واسع في 2026: دليل عملي بالبروكسي

دليل تنفيذي لكشط بيانات كتالوج وأسعار ومخزون Shein على نطاق واسع في 2026، مع مقارنة بين نقاط نهاية API الداخلية وتحليل HTML، واستخدام البروكسي السكني الدوار من ProxyHat.

Scraping Shein at Scale in 2026: A Practical Proxy Guide for Price Intelligence

كشط بيانات Shein على نطاق واسع في 2026 ليس مجرد إرسال طلبات HTTP وتحليل HTML. المنصة تستخدم طبقات حماية متقدمة ضد البوتات، وتوطينًا ديناميكيًا للأسعار والعملات حسب الموقع الجغرافي، وبنية صفحات تعتمد على JavaScript بشكل كثيف. في هذا الدليل نوضح المقايلة بين تحليل HTML المُعرَض مقابل نقاط نهاية API الداخلية الخاصة بـ Shein، وكيف تتجاوز تحديات Anti-Bot باستخدام البروكسي السكني الدوار من ProxyHat، مع أمثلة كود عملية بـ Python وcurl_cffi.

كشط Shein على نطاق واسع في 2026: المقايلة بين API الداخلي وHTML المُعرَض

أول قرار تقني تواجهه عند بناء كاشط منتجات Shein هو: هل تعتمد على تحليل HTML المُعرَض عبر متصفح headless، أم تستهدف نقاط نهاية API الداخلية التي تُغذّي واجهة الموقع؟ كل خيار له مقايضات حادة.

الخيار الأول: تحليل HTML المُعرَض

تستخدم متصفحًا مثل Playwright أو Puppeteer لتحميل صفحة المنتج، تنتظر حتى يكتمل عرض React/Next.js، ثم تستخرج البيانات من DOM. المشكلة الأساسية: Shein يحمي صفحاته بـ Akamai Bot Manager، الذي يحقن كوكيز _abck وbm_sz ويجمع بيانات تيليمتري من المتصفح عبر sensor_data. متصفح Chromium headless وحده يُكتشف بسرعة بسبب بصمة TLS الخاصة بـ Chrome headless، وغياب تفاعلات الماوس الحقيقية، واختلاف navigator.webdriver وخصائص Canvas/WebGL.

الخيار الثاني: نقاط نهاية API الداخلية

Shein يحمّل بيانات المنتج والقائمة عبر نقاط نهاية JSON داخلية. على سبيل المثال، صفحة المنتج تتضمن كائن JSON مضمن في الصفحة باسم productIntroData أو gbProductDetail، يحتوي على حقول مثل retailPrice، salePrice، stock، goods_id، goods_sn. كما توجد نقاط نهاية قائمة الفئات التي تقبل معاملات goods_id وcat_id وتُعيد JSON منظمة. هذا الخيار أسرع بكثير (لا حاجة لرندر كامل)، لكنه يتطلب مطابقة TLS صحيحة وإدارة الكوكيز لأن Akamai يفحص بصمة TLS على مستوى طلبات API أيضًا.

المعيارتحليل HTML المُعرَضنقاط نهاية API الداخلية
السرعة لكل طلب2000–5000ms (رندر كامل)200–800ms (JSON فقط)
استهلاك النطاقعالٍ (HTML + CSS + JS)منخفض (JSON فقط)
مقاومة الكشفمتوسطة (بصمة متصفح)منخفضة بدون TLS matching
استقرار البياناتهش (DOM يتغير)أكثر استقرارًا (بنية JSON)
التكلفة التشغيليةعالية (موارد متصفح)منخفضة (طلبات HTTP)

التوصية العملية: ابدأ بنقاط نهاية API الداخلية مع مطابقة TLS عبر curl_cffi، واحتفظ بتحليل HTML كخيار احتياطي للحالات التي تتطلب بيانات لا تظهرها API.

سياق تقني: لماذا يوجد هذا التحدي؟

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

طبقة حماية Akamai Bot Manager

Akamai Bot Manager هو نظام حماية من الجيل الجديد يستخدم نهجًا متعدد الطبقات. عند أول زيارة للموقع، يُحقن كوكيز _abck في المتصفح. هذا الكوكيز ليس ثابتًا — بل يتغير قيمته بناءً على بيانات التيليمتري التي يجمعها سكربت sensor_data، والذي يحلل أكثر من 50 إشارة تشمل حركة الماوس، سرعة الكتابة، بصمة Canvas، خصائص WebGL، توقيت الأحداث، وغيرها. إذا لم يمر المتصفح أو العميل في هذا الفحص بنجاح، يُعاد ضبط _abck إلى قيمة "غير صالحة" وتظهر صفحة 403 أو تحدّي JavaScript.

بالإضافة إلى ذلك، يستخدم Shein رمز جهاز يُسمى smdeviceid — وهو معرّف فريد يُولّد في المتصفح ويُرسل مع كل طلب لاحق. هذا الرمز يربط الجلسة بجهاز مفترض، ومفقده أو تكراره عبر طلبات كثيرة يرفع علم أحمر. للمزيد من التفاصيل حول آلية عمل Akamai، راجع توثيق Akamai الرسمي.

لماذا لا يكفي Chromium headless؟

متصفح Chromium headless الحديث أفضل من السابق، لكنه لا يزال قابلاً للكشف. السبب: بصمة TLS لـ Chrome headless تختلف عن Chrome العادي في بعض الإصدارات، وخصائص مثل navigator.webdriver، chrome.runtime، وسلوك المؤشر الافتراضي تكشفه. Akamai لا يعتمد على إشارة واحدة — بل يجمع إشارات متعددة ويسجل درجة. درجة منخفضة تعني كوكيز _abck غير صالح وحظر ضمني.

موقع البيانات: حقول JSON الداخلية ونقاط نهاية الفئات

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

عند تحميل صفحة منتج مثل shein.com/Product-p-123456.html، تجد ضمن كود HTML كائن JSON مضمنًا، عادةً باسم productIntroData أو gbProductDetail أو ضمن وسم <script id="__NEXT_DATA__">. هذا الكائن يحتوي على:

  • goods_id: معرّف المنتج الرقمي.
  • goods_sn: رقم SKU الداخلي.
  • retailPrice: السعر الأصلي قبل الخصم (بالعملة المحلية).
  • salePrice: سعر البيع الفعلي.
  • stock: كمية المخزون المتاحة (أو مصفوفة لكل SKU/multi-color).
  • cat_id: معرّف الفئة.
  • goods_img: روابط الصور.
  • colorImage: صور الألوان المتاحة.

نقاط نهاية قائمة الفئات

قوائم المنتجات تُحمّل عبر نقاط نهاية JSON تقبل معاملات مثل cat_id (معرّف الفئة) وpage وlimit وsort. مثال نمطي:

https://www.shein.com/Category/xxx/?cat_id=2030&page=1&limit=40&sort=popularity

أو عبر نقطة API داخلية تُعيد JSON مباشرة. الرد يحتوي على مصفوفة goods أو products، كل عنصر فيها يحمل نفس الحقول المذكورة أعلاه. هذا هو المسار الأكفأ لكشط بيانات Shein على نطاق واسع.

حدود المعدل ومتطلبات البروكسي الدوار

Shein يطبّق حدود معدل صارمة لكل IP. من الملاحظات الميدانية: IP واحد يبدأ في تلقي استجابات 412 أو إعادة ضبط _abck بعد حوالي 80–120 طلبًا متتاليًا خلال فترة قصيرة. هذا ليس حدًا ثابتًا منشورًا — بل يعتمد على درجة الثقة التي يحسبها Akamai لكل IP، ونوع IP (سكني مقابل مركز بيانات)، وسلوك الطلب.

IPs مراكز البيانات (datacenter) تُكتشف بسرعة وتُحظر غالبًا بعد 10–20 طلبًا فقط، لأن Akamai يصنّفها كمصدر محتمل للبوتات. IPs السكنية (residential) لها درجة ثقة أعلى بكثير لأنها تبدو كمستخدمين حقيقيين من مزودي إنترنت منزليين.

التوطين الجغرافي إجباري

كما ذكرنا، Shein يُوطّن الأسعار والعملات والتوافر حسب الموقع. إذا كشطت من IP أمريكي، ستحصل على أسعار بالدولار الأمريكي وتوافر المستودع الأمريكي. إذا كشطت من IP ألماني، ستحصل على اليورو وتوافر المستودع الأوروبي. هذا يعني أن كاشط منتجات Shein الجاد يحتاج إلى بروكسي سكني يدعم التوجيه الجغرافي لكل بلد مستهدف.

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

# بروكسي أمريكي
http://user-country-US:pass@gate.proxyhat.com:8080

# بروكسي ألماني
http://user-country-DE:pass@gate.proxyhat.com:8080

# بروكسي بريطاني مع مدينة
http://user-country-GB-city-london:pass@gate.proxyhat.com:8080

راجع صفحة المواقع المتاحة في ProxyHat للاطلاع على قائمة الدول المدعومة.

مثال عملي: كشط بيانات منتج Shein باستخدام Python وcurl_cffi عبر ProxyHat

curl_cffi هي مكتبة Python تُغلّف libcurl مع دعم مطابقة بصمة TLS للمتصفحات الحقيقية (Chrome، Safari، Firefox). هذا حاسم لأن Akamai يفحص بصمة TLS على مستوى handshake — إذا كانت بصمة TLS لا تتطابق مع متصفح حقيقي، يُرفض الطلب قبل حتى الوصول إلى منطق التطبيق.

import json
import time
from curl_cffi import requests

def scrape_shein_product(goods_id, country="US"):
    """كشط بيانات منتج Shein عبر نقطة API الداخلية مع ProxyHat."""
    
    proxy = f"http://user-country-{country}:YOUR_PASSWORD@gate.proxyhat.com:8080"
    
    url = f"https://www.shein.com/productInfo?goods_id={goods_id}"
    
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
        "Accept": "application/json, text/plain, */*",
        "Accept-Language": "en-US,en;q=0.9",
        "Referer": "https://www.shein.com/",
        "Connection": "keep-alive",
    }
    
    try:
        response = requests.get(
            url,
            headers=headers,
            proxies={"http": proxy, "https": proxy},
            impersonate="chrome120",
            timeout=15,
        )
        
        if response.status_code == 200:
            data = response.json()
            product = {
                "goods_id": goods_id,
                "retailPrice": data.get("info", {}).get("retailPrice"),
                "salePrice": data.get("info", {}).get("salePrice"),
                "stock": data.get("info", {}).get("stock"),
                "currency": data.get("info", {}).get("currency"),
            }
            return product
        elif response.status_code == 412:
            print(f"[412] _abck غير صالح — إعادة المحاولة بعد backoff")
            return None
        else:
            print(f"[HTTP {response.status_code}] فشل الطلب")
            return None
    except Exception as e:
        print(f"خطأ: {e}")
        return None

# مثال استخدام
result = scrape_shein_product("12345678", country="US")
print(json.dumps(result, indent=2))

نموذج رد مقتطع

{
  "goods_id": "12345678",
  "retailPrice": {"amount": 29.99, "amountWithSymbol": "$29.99"},
  "salePrice": {"amount": 12.99, "amountWithSymbol": "$12.99"},
  "stock": 1248,
  "currency": "USD"
}

لاحظ أن impersonate="chrome120" يجعل curl_cffi يرسل بصمة TLS مطابقة لـ Chrome 120 الحقيقي، مما يقلل احتمال كشف Akamai بشكل كبير مقارنة بطلبات Python العادية.

الترقيم وجلسات sticky وإدارة backoff

الترقيم (Pagination)

نقاط نهاية قائمة الفئات تدعم الترقيم عبر معامل page وlimit. استراتيجية عملية: ابدأ بـ limit=40 لكل صفحة، وكرّر حتى تتلقى مصفوفة فارغة أو رسالة "لا مزيد من المنتجات". أضف تأخيرًا عشوائيًا بين 1–3 ثوانٍ بين الطلبات لمحاكاة سلوك إنساني.

جلسات sticky لاتساق العملة

مشكلة شائعة: عند تدوير IP لكل طلب، قد تحصل على IPs من دول مختلفة حتى داخل نفس البلد المستهدف، مما يؤدي إلى تذبذب العملة أو الأسعار. الحل: استخدم جلسة sticky تحافظ على نفس IP لفترة محددة. مع ProxyHat، أضف session-XXX إلى اسم المستخدم:

# جلسة sticky لاتساق العملة
http://user-country-DE-session-shein-batch-001:pass@gate.proxyhat.com:8080

هذا يضمن أن جميع الطلبات في نفس الدفعة تمر عبر نفس IP الألماني، فتحصل على نفس العملة (EUR) ونفس بنية الأسعار. بدّل معرّف الجلسة بعد كل 50–80 طلبًا لتجنب تراكم درجة الشك.

منطق backoff ومعالجة 412

عند تلقي HTTP 412، يعني ذلك أن كوكيز _abck لم يعد صالحًا. الاستراتيجية الصحيحة:

  1. توقف عن الإرسال فورًا.
  2. بدّل معرّف الجلسة (للحصول على IP جديد).
  3. انتظر فترة backoff تزداد أُسّيًا: 5s، 10s، 20s، 40s.
  4. أعد المحاولة مع جلسة جديدة.
  5. إذا فشلت 3 مرات متتالية، سجّل المنتج في قائمة إعادة المحاولة وانتقل للتالي.
import random
import time

def scrape_with_backoff(goods_ids, country="US", max_retries=3):
    results = []
    session_id = f"shein-{int(time.time())}"
    request_count = 0
    
    for gid in goods_ids:
        if request_count >= 60:
            session_id = f"shein-{int(time.time())}"
            request_count = 0
            time.sleep(random.uniform(2, 5))
        
        for attempt in range(max_retries):
            product = scrape_shein_product_sticky(gid, country, session_id)
            if product:
                results.append(product)
                request_count += 1
                break
            else:
                wait = 5 * (2 ** attempt)
                print(f"Backoff {wait}s قبل إعادة المحاولة...")
                session_id = f"shein-{int(time.time())}"
                time.sleep(wait)
        
        time.sleep(random.uniform(1, 3))
    
    return results

الأخطاء الشائعة وحالات الحافة

  • استخدام بروكسي مركز بيانات: سيُحظر بعد 10–20 طلبًا. استخدم بروكسي سكني دائمًا لكشط Shein.
  • تجاهل التوطين الجغرافي: كشط من IP عشوائي يعطي بيانات لا تطابق سوقًا محددًا. حدد الدولة دائمًا.
  • إرسال طلبات بدون Referer وAccept-Language: Akamai يفحص هذه الترويسات. غيابها يرفع درجة الشك.
  • تدوير IP لكل طلب في نفس الدفعة: يسبب تذبذب العملة. استخدم جلسة sticky لكل دفعة.
  • تجاهل 412: المتابعة بعد 412 تؤدي إلى حظر كامل للـ IP. توقف وبدّل الجلسة.
  • الاعتماد على User-Agent واحد: دوّر بين عدة User-Agents واقعية لكل جلسة.
  • عدم احترام robots.txt: تحقق من shein.com/robots.txt قبل البدء، وتجنب المسارات المحظورة.

إعدادات ProxyHat والروابط الداخلية

لإعداد حسابك في ProxyHat، سجّل الدخول عبر dashboard.proxyhat.com، ثم احصل على بيانات اعتمادك من لوحة التحكم. استخدم gate.proxyhat.com:8080 لـ HTTP أو gate.proxyhat.com:1080 لـ SOCKS5.

للاطلاع على خطط الأسعار المناسبة لكشط البيانات على نطاق واسع، راجع صفحة أسعار ProxyHat. لمزيد من الإرشادات حول حالات استخدام كشط الويب، اقرأ دليل كشط الويب، وللتتبع الدقيق لنتائج البحث اطّلع على دليل تتبع SERP. التوثيق الفني الكامل متاح على docs.proxyhat.com.

الأخلاق وشروط الخدمة

كشط البيانات العامة للمنتجات (السعر، التوافر، الاسم، الصورة) من صفحات Shein العامة مسموح به عمومًا ضمن حدود الاستخدام العادل. لكن يجب الانتباه إلى نقاط مهمة:

  • بيانات عامة فقط: لا تحاول الوصول إلى صفحات الحساب، أو بيانات الدفع، أو نقاط نهاية الدفع. هذا ينتهك قانون الاحتيال وإساءة استخدام الكمبيوتر الأمريكي (CFAA) وقوانين مماثلة في دول أخرى.
  • GDPR وحماية البيانات الشخصية: لا تجمع بيانات شخصية للمستخدمين (مراجعات بأسماء، صور شخصية). للمزيد حول الإطار القانوني الأوروبي، راجع الموقع الرسمي للائحة GDPR.
  • احترام شروط الخدمة: اقرأ ToS الخاص بـ Shein قبل البدء. بعض المنصات تمنع كشط البيانات صراحة في شروطها.
  • الحد الأدنى من الضرر: لا ترسل آلاف الطلبات في الثانية. حافظ على معدل معقول (1–3 طلبات في الثانية لكل IP) لتجنب إرهاق الخوادم.
  • البرنامج التابع البديل: إذا كنت تحتاج بيانات منتجات منظمة وموثوقة لاستخدام تجاري، فكر في الانضمام إلى برنامج Shein التابع (Affiliate Program) الذي يوفر خلاصات منتجات (product feeds) رسمية بتنسيق CSV/XML. هذا مسار قانوني وأكثر استقرارًا، خاصة إذا كنت تبني أداة ذكاء أسعار تجارية.

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

النقاط الرئيسية (Key Takeaways)

  • فضّل API الداخلي على HTML المُعرَض: نقاط نهاية productInfo وcat_id أسرع بـ 5–10 مرات وأكثر استقرارًا من تحليل DOM.
  • مطابقة TLS إجبارية: استخدم curl_cffi مع impersonate لتجاوز فحص بصمة TLS الخاص بـ Akamai.
  • بروكسي سكني دوار مع توجيه جغرافي: IPs مراكز البيانات تُحظر بعد 10–20 طلبًا. IPs سكنية مع -country-US أو -country-DE ضرورية للحصول على بيانات سوق دقيقة.
  • جلسات sticky لاتساق العملة: استخدم -session-XXX للحفاظ على نفس IP داخل الدفعة، وبدّل الجلسة كل 50–80 طلبًا.
  • معالجة 412 بـ backoff أُسّي: لا تتابع بعد 412. بدّل الجلسة وانتظر قبل إعادة المحاولة.
  • بيانات عامة فقط: لا تلمس نقاط نهاية الحساب أو الدفع. احترم CFAA وGDPR وToS.
  • فكر في الخلاصة التابعة للاستخدام التجاري المستدام.

كشط بيانات Shein على نطاق واسع في 2026 ممكن ومجدي إذا اتبعت الاستراتيجية الصحيحة: API الداخلي + مطابقة TLS + بروكسي سكني دوار موزّع جغرافيًا + إدارة جلسات ذكية. ابدأ بفئة صغيرة، اختبر معدل النجاح، ثم وسّع تدريجيًا. سجّل في ProxyHat اليوم واحصل على بروكسي سكني يدعم التوجيه الجغرافي لـ 150+ دولة.

¿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