لقد قمت بتحميل 40 ألف بطاقة من Mercado Libre، وحسبت السعر المتوسط في الأرجنتين وقدمت تقريرًا. المشكلة هي أن هذه ليست الأسعار في الأرجنتين. هذه أسعار للرمز البريدي 1430 - المنطقة الافتراضية التي تضعها المنصة للجميع الذين لم يحددوا وجهة الشحن.
تعمل Mercado Libre في 18 دولة في أمريكا اللاتينية، وبلغت إيرادات المجموعة لعام 2025 حوالي 28.9 مليار دولار، ويعمل في الشركة 123670 موظفًا. بالنسبة لتحليل التجارة الإلكترونية، تعتبر هذه المنصة المصدر الرئيسي للبيانات في المنطقة وفي نفس الوقت هي الفخ الأكثر تقديرًا: المنصة تقدم أسعارًا مختلفة، وشحنًا مختلفًا، وفائزًا مختلفًا في صندوق الشراء اعتمادًا على مصدر الطلب والمنطقة التي تراها الجلسة. دعونا نحلل ما الذي يتعطل وكيفية جمع البيانات بشكل صحيح.
ما الذي تغير في عام 2026: API مغلق فعليًا
قبل بضع سنوات، كان "تحليل Mercado Libre" يتم عبر API العامة: GET api.mercadolibre.com/sites/MLA/search?q=iphone كان يعطي النتائج بدون مصادقة. اليوم، لم يعد الأمر كذلك.
التحقق في 12 سبتمبر 2026 من عنوان IP خادم عادي، بدون توكن:
/sites- HTTP 403، الجسم{"code":"PA_UNAUTHORIZED_RESULT_FROM_POLICIES","blocked_by":"PolicyAgent","message":"على الأقل سياسة واحدة أعادت UNAUTHORIZED."}/sites/MLA/search?q=iphone&limit=1- HTTP 403،{"message":"محظور","error":"محظور"}/items/{id}- HTTP 403، نفسPolicyAgent
المشكلة ليست فقط في عدم وجود توكن. يصف البائعون والمكاملون في الشكاوى العامة نفس الصورة مع توكن الوصول الصالح: /users/me والطلبات تستجيب بشكل طبيعي، بينما نقاط النهاية الخاصة بالفهرسة والتقييم تعيد blocked_by: PolicyAgent. سياسة الوصول إلى API تتشدد بشكل انتقائي، حسب نقاط النهاية، والوثائق لا تواكب ذلك.
في الوقت نفسه، لدى المنصة موعدين نهائيين تقنيين لأولئك الذين لا يزالون يعيشون على API الرسمي:
- من 30 أغسطس 2026 يجب أن تكون التطبيقات مفصولة: تطبيق منفصل لـ Mercado Libre، وآخر لـ Mercado Pago. يتم التحقق من خلال
GET applications/$APP_ID- إذا كانت في النطاقات لا تزال هناك حقوق من نوعurn:mp:...، يجب إعادة تقديم الطلب، وإلا ستفقد الوصول إلى API Mercado Libre؛ - تم اعتبار تمرير توكن الوصول في معلمات الاستعلام غير آمن: ستبدأ المنصة في رفض هذه الطلبات برد 301. يجب أن يتم إرسال التوكن فقط في رأس
Authorization: Bearer.
الاستنتاج العملي بسيط: API الرسمي في عام 2026 هو قناة للبائع الذي يعمل مع حسابه، وليس أداة لتحليل السوق. إذا كانت المهمة هي مراقبة المنافسين والأسعار في المنطقة، فأنت تعمل مع واجهة عرض عامة. ما الذي يجب اختياره لمهمة معينة، ناقشنا ذلك في المادة API الرسمي، مجموعة البيانات الجاهزة أو محلل خاص بك.
سبع واجهات عرض بدلاً من موقع واحد
Mercado Libre ليست كتالوجًا واحدًا مع فلتر حسب البلد، بل مجموعة من المنصات المستقلة مع مجالاتها الخاصة، وعملاتها، وعروضها للمنتجات. في API، تُسمى هذه site_id:
- MLA - الأرجنتين (mercadolibre.com.ar، ARS)
- MLB - البرازيل (mercadolivre.com.br، BRL)
- MLM - المكسيك (mercadolibre.com.mx، MXN)
- MLC - تشيلي، MCO - كولومبيا، MLU - أوروغواي، MPE - بيرو، MLV - فنزويلا
نفس العنصر في MLA و MLB هو بطاقتان مختلفتان، وبائعان مختلفان، ونماذج لوجستية مختلفة. مقارنة بينهما "وجهًا لوجه" ليست ذات معنى: تحتاج إلى تطبيع العملة وظروف الشحن. بالمناسبة، بالنسبة للعملة - تقدم المنصة قواعد التنسيق في HTML: بالنسبة للأرجنتين، تكون "currency_id":"ARS"، "decimal_separator":","، "thousands_separator":"."، "time_zone":"GMT-03:00". المحللون الذين يقطعون السعر باستخدام التعبيرات العادية بناءً على النقطة يخطئون في واجهات العرض اللاتينية الأمريكية بألف مرة.
الأهم: السعر والشحن يحسبان من منطقة المستلم
إليك جزء مدمج مباشرة في HTML صفحة النتائج listado.mercadolibre.com.ar عند الطلب بدون عنوان:
"location_info":{"zipcode":"1430","inferred_zipcode":false,"default_zipcode":true,"user_zone":"X19"}
يقرأ هذا على النحو التالي: الرمز 1430، هو ليس مستخرجًا من عنوان IP الخاص بك (inferred_zipcode: false)، هو افتراضي (default_zipcode: true). في الرأس، يظهر "Enviar a Capital Federal" - أي أن المنصة قررت بصمت أنك في منطقة العاصمة بوينس آيرس، وتقوم بعد ذلك بحساب كل شيء بناءً على ذلك.
وهي تحسب الكثير. في نفس HTML، توجد لافتات الشحن المرتبطة بالمنطقة: same_day_free_shipping مع نص "Llega gratis hoy"، أيقونة vpp_full_icon - "Enviado por FULL" (المنتج من مخزن المنصة). في صفحة واحدة من النتائج عند البحث عن "iphone"، كان هناك 96 إشارة إلى الشحن المجاني. تعتمد منطقة الشحن أيضًا على كتلة buy_box مع "Otra opción de compra": أي بائع سيفوز بالبطاقة، يتحدد جزئيًا من هو الأرخص والأسرع في توصيلها إلى الرمز البريدي المحدد.
الخلاصة: المحلل الذي لم يسأل عن منطقة الشحن مرة واحدة، يجمع ليس "سوق الأرجنتين"، بل شريحة من مدينة واحدة. للحصول على تقرير عن البلاد مع مدن مليونية على بعد ألف كيلومتر من العاصمة، هذه مشكلة لا تظهر بأي شكل من الأشكال - الأرقام تبدو معقولة، لكنها ببساطة لا تجيب على السؤال الصحيح.
حاجز عند المدخل: /gz/account-verification
المفاجأة الثانية تنتظر على مستوى النقل. الطلب إلى listado.mercadolibre.com.ar/iphone لا يعطي النتائج مباشرة: يأتي HTTP 302 إلى /gz/account-verification?go=...&tid=... - صفحة التحقق من الجهاز الخاصة بهم. هذه ليست Cloudflare ولا DataDome: في كود الحاجز لا يوجد reCAPTCHA، ولا Turnstile، ولا علامات من مضادات الروبوتات الخارجية، ولكن هناك عشرات الاستدعاءات لآلية الجهاز. الصفحة تزن حوالي 41 كيلوبايت، مبنية على JavaScript وبدونها لا تعرض شيئًا.
كان السلوك أثناء التحقق دليلاً على ذلك. تم تمرير الطلب الأول من عنوان IP خادم نظيف: جاءت نتائج حقيقية بحجم 2,425,906 بايت - 50 كتلة ui-search-layout و120 عقدة سعر andes-money-amount__fraction، كل شيء تم رسمه على الخادم. الطلبات المتكررة من نفس العنوان توقفت عند /gz/account-verification ولم تتجاوزها. واجهات العرض البرازيلية والمكسيكية من نفس IP لم تسمح بالدخول على الإطلاق.
هذه آلية "سمعة" نموذجية: يحصل العنوان على ائتمان صغير من الثقة، ويستنفده بعد بضع طلبات ويغلق. لا يثبت أي اختبار فردي شيئًا - المهم هو أنه لا يوجد وصول مستدام من مجموعة مراكز البيانات، وأن السلوك يختلف من دولة إلى أخرى.
تفصيل آخر من رؤوس الاستجابة: تضع المنصة _d2id (معرف الجهاز لمدة عام، يتكرر أيضًا في x-request-device-id) و_mldataSessionId مع Max-Age=1800. ثلاثون دقيقة - هي الطول الطبيعي للجلسة، والتي يجب أن تتناسب مع الاحتفاظ بـ IP.
ماذا يقول robots.txt
قبل البدء في البناء، من المهم قراءة قواعد المنصة. في robots.txt لكل من واجهات العرض (الأرجنتينية والبرازيلية) الكتلة العليا متطابقة وواضحة تمامًا:
- حظر كامل (
Disallow: /) لزواحف الذكاء الاصطناعي: Amazonbot، GPTBot، ChatGPT-User، ClaudeBot، Claude-User، PerplexityBot، Perplexity-User؛ - مسموح لزواحف معاينة وسائل التواصل الاجتماعي: FacebookExternalHit، FacebookBot، Twitterbot، LinkedInBot؛
- بالنسبة لـ Bingbot -
Crawl-delay: 5وقائمة طويلة من الأقسام المغلقة:/gz/cart/،/gz/checkout/،/perfil/vendedor/،/perfil/comprador/،/navigation/،/noindex/وغيرها.
يترتب على ذلك شيئان عمليان. الأول: سلة التسوق، والدفع، وملفات تعريف المستخدمين مغلقة بوضوح - لا ينبغي الدخول إليها لا من الناحية الفنية ولا القانونية. الثاني: Crawl-delay: 5 لروبوت البحث - هو مؤشر صادق على الإيقاع الذي تتوقعه المنصة من الأتمتة. خمس ثوانٍ لكل طلب من عنوان واحد - نقطة انطلاق معقولة، وليست رقمًا من الهواء.
كيفية الجمع بشكل صحيح: ترتيب الإجراءات
- حدد مصفوفة الجمع. ليس "Mercado Libre"، بل قائمة أزواج "البلد × منطقة الشحن". بالنسبة للأرجنتين، على سبيل المثال، Capital Federal، Córdoba، Rosario، Mendoza؛ بالنسبة للبرازيل - São Paulo، Rio، Belo Horizonte، Recife. السعر بدون تحديد المنطقة ليس له معنى، ويتم اتخاذ هذا القرار قبل السطر الأول من الكود.
- احصل على IP سكني من البلد المطلوب. لم تنجح العناوين الخادمة في واجهات العرض البرازيلية والمكسيكية في تجاوز الحاجز على الإطلاق، بينما استنفدت الأرجنتينية بعد الطلب الأول. العنوان السكني المحلي يحل كل من مشكلة الوصول ومشكلة الموثوقية: المنصة تعرض لك في الأصل ما كانت ستعرضه للمشتري المحلي.
- احتفظ بـ IP طوال الجلسة. تستمر ملفات تعريف الارتباط للجلسة لمدة 30 دقيقة - التدوير في كل طلب يعيد تعيينها، وتختار المنطقة مرة أخرى، وتعود إلى الرمز الافتراضي. جلسة لزجة لمدة 10-30 دقيقة تحت منطقة واحدة، ثم تغيير. كيفية اختيار طول النافذة، ناقشنا ذلك في الدليل حول الجلسات اللزجة.
- استخدم محرك متصفح، وليس عميل HTTP عاري. الصفحة
/gz/account-verificationمبنية بالكامل على JavaScript: بدون تنفيذ السكربتات، ستبقى دائمًا في الحاجز. استخدم Playwright أو ما يعادله مع الحفاظ على الحالة بين الخطوات. - حدد منطقة الشحن بوضوح. الرابط يؤدي إلى
/addresses/v3/navigation/hub؛ بعد تعيين العنوان، تبقى الحالة في ملف تعريف الارتباط للجلسة. قم بتشغيل هذه العملية مرة واحدة لكل جلسة، وليس لكل بطاقة. - اجعل
location_infoبمثابة مجموع تحقق. في كل صفحة محفوظة، تحقق من أنzipcodeيتطابق مع الهدف، وأنdefault_zipcodeأصبحfalse. إذا ظل العلمtrue- لا نكتب السطر في واجهة العرض، لأنه تم جمعه ليس للمنطقة الصحيحة. هذه التحقق وحده يستبعد معظم العيوب الصامتة. - احصل على الأسعار من HTML الخادم. السعر ولافتات الشحن قد تم رسمها بالفعل على الخادم - لا حاجة للبحث عن نقاط النهاية الداخلية لـ JSON. ضع بجانب السعر نفس
zipcode،user_zone،currency_idوعلامة الوقت: بدونها، الرقم غير قابل للتحقق. - احتفظ بالإيقاع. المؤشر من المنصة نفسها هو خمس ثوانٍ بين الطلبات من عنوان واحد. إذا كنت بحاجة إلى السرعة - قم بتوسيع مجموعة العناوين، وليس تكرار الطلبات من نفس IP: إن الزيادة المفاجئة من عنوان واحد هي ما يغلق الحاجز.
المزالق التي ستكتشفها متأخرًا
عيب صامت في المنطقة الافتراضية. أغلى خطأ لا يقع مع الاستثناء. يتم جمع البيانات، ويتم بناء التقرير، ويتم اتخاذ القرار بشأن التسعير - وفقط بعد ربع سنة يتضح أن كل التحليلات حول البرازيل تصف منطقة واحدة في ساو باولو.
وزن الصفحات. صفحة النتائج الواحدة - 2.4 ميغابايت. ألف صفحة يوميًا عبر أربع دول وأربع مناطق - هذا يعني عشرات الجيجابايت من الحركة شهريًا. على التعرفة السكنية مع الدفع لكل جيجابايت، هذه هي البند الرئيسي للنفقات، لذا من المنطقي تعطيل تحميل الصور والخطوط في محرك المتصفح على الفور: الأسعار موجودة في HTML، والصور للمحلل - مجرد إسراف.
مقارنة الدول بدون تطبيع. ARS، BRL، MXN وفواصل مختلفة. قم بتحويلها إلى عملة واحدة حسب سعر الصرف في تاريخ الجمع واحتفظ بالسعر الأصلي والعملة بشكل منفصل، وإلا فلن تتمكن من إعادة حسابها لاحقًا.
الاعتماد على API الرسمي. إذا كانت التكامل لا يزال على API، احتفظ في ذهنك متطلبات التطبيقات المنفصلة من 30 أغسطس 2026 وانتقال التوكن من الاستعلام إلى الرأس. فقدان الوصول الصامت إلى API يبدو تمامًا مثل خطأ في الكود الخاص بك.
ما هي البروكسيات اللازمة لهذه المهمة
السكنية - خيار عملي لجمع الأسعار والشحن. تحتاج إلى عنوان من نفس البلد الذي تقوم بسحب واجهته، ويفضل أن يكون من نفس المنطقة التي تتحقق من منطقة الشحن: هكذا يتم استخراج البيانات وتظل موثوقة. البروكسيات السكنية مع الاحتفاظ بالجسلة تغطي كلا المتطلبين في وقت واحد.
المحمولة - حيث يكون الحاجز عنيدًا بشكل خاص. أمريكا اللاتينية هي منطقة ذات نسبة عالية من حركة المرور المحمولة، وعنوان مشغل الهاتف المحمول يبدو للمنصة عاديًا للغاية. مبررة في الشرائح الضيقة ولكن الحرجة، وليس في التحميل الجماعي.
البروكسيات من مراكز البيانات - للاستطلاع والمهام الخدمية: قراءة robots.txt، سحب هيكل الصفحة، التحقق من توفر النطاق. لجمع الأسعار بشكل منتظم، كما أظهرت الاختبارات، الموارد غير كافية.
باختصار
Mercado Libre في عام 2026 لا تقدم البيانات بشكل غير شخصي. تم إغلاق API الرسمي بواسطة سياسات PolicyAgent، وتواجه الواجهة تحققًا خاصًا بالجهاز، وأهم رقم - السعر مع الشحن - يتم حسابه من منطقة المستلم، التي تضعها المنصة افتراضيًا إذا لم يتم تحديدها. المحلل الصحيح هنا يختلف عن غيره ليس بحيل التحايل، بل بالانضباط: البلد، المنطقة، العملة وlocation_info بجانب كل سطر. كل ما تبقى هو مسألة من أين تأتي طلباتك.
