← العودة إلى المدونة

تحليل عبر sitemap.xml: كيفية جمع كتالوج وايلدبيري بأقل تكلفة بعشر مرات من تصفح الموقع

بدلاً من مسح الموقع صفحة بصفحة، استخدم خريطة sitemap.xml الجاهزة - سيوفر ذلك تكاليف البروكسي ووقت التحليل بشكل كبير.

📅١١ جمادى الأولى ١٤٤٨ هـ

يبدأ معظم المبتدئين في التحليل بتصفح كامل للموقع: يدخلون إلى الصفحة الرئيسية، يجمعون جميع الروابط، ينتقلون إلى كل واحدة، يجمعون الروابط مرة أخرى - وهكذا آلاف المرات. هذا يستهلك البروكسي، والوقت وغالبًا ما ينتهي بحظر. هناك طريقة أسهل وأرخص: لدى كل موقع كبير تقريبًا، بما في ذلك Wildberries وOzon وAvito، خريطة جاهزة لجميع الصفحات - sitemap.xml. دعونا نفهم كيف نجدها، نقرأها ونستخدمها بدلاً من آلاف الطلبات غير الضرورية.

ما هو sitemap.xml ولماذا هو مهم للمحللين

Sitemap.xml هو ملف ينشئه الموقع بنفسه لمحركات البحث مثل Google وYandex. يحتوي على جميع الصفحات التي يريد مالك الموقع أن يتم فهرستها: بطاقات المنتجات، الفئات، مقالات المدونة. في الأساس، هو قائمة جاهزة من URL يقدمها الموقع لك - لا تحتاج للانتقال عبر الروابط يدويًا، أو النقر على الصفحات، أو محاولة فهم منطق التنقل.

بالنسبة للبائعين الذين يراقبون أسعار المنافسين على Wildberries أو Ozon، فهذا يعني شيئًا واحدًا: بدلاً من تصفح آلاف الفئات وصفحات التصفح، يمكنك الحصول على قائمة بجميع بطاقات المنتجات في طلب واحد إلى sitemap. بالنسبة للمسوقين الذين يجمعون قاعدة بيانات URL لتحليل محتوى المنافسين، يوفر هذا ساعات من العمل اليدوي. بالنسبة للمحللين الذين يقومون بتحليل صفحات الهبوط الخاصة بالمنافسين، يظهر sitemap جميع صفحات الموقع دفعة واحدة.

نقطة مهمة: ليست جميع الصفحات مدرجة في sitemap. أحيانًا لا تشمل الصفحات ذات الفلاتر، العروض المؤقتة أو الصفحات ذات المعلمات في URL. لذلك، sitemap ليس دائمًا تغطية 100% للموقع، ولكنه عادةً ما يغطي 80-95% من الصفحات المفيدة التي تحتاجها للكتالوج أو المراقبة.

التصفح الكامل مقابل sitemap-first: مقارنة التكاليف

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

المعلمة التصفح الكامل للموقع التحليل من خلال sitemap
عدد الطلبات لجمع URL 15,000–20,000 (فئات، صفحات، فلاتر) 50–300 (فقط ملفات sitemap)
الوقت لجمع قائمة URL 4–8 ساعات 15–30 دقيقة
خطر حظر IP مرتفع بسبب حجم الطلبات للتنقل منخفض، عدد الطلبات أقل بكثير
ضغط على بيانات البروكسي مرتفع، يحتاج إلى مجموعة كبيرة من IP أدنى، يمكن الاكتفاء بمجموعة صغيرة
صعوبة منطق المحلل مرتفعة، يحتاج إلى تحليل التنقل منخفضة، تحليل هيكل XML

الرقم "أرخص بـ 10 مرات" في العنوان ليس مبالغة. إذا كان التصفح الكامل يتطلب 15-20 ألف طلب فقط لتكوين قائمة الصفحات، بينما يوفر sitemap نفس القائمة في 50-300 طلب، فإن التوفير في بيانات البروكسي والوقت يكون كبيرًا. ومع ذلك، سيتعين عليك تنزيل بطاقات المنتجات نفسها بشكل منفصل - لكنك تعرف بالتأكيد أي URL يجب تنزيله، ولا تضيع الموارد على الصفحات الفارغة، التكرارات والروابط غير المفيدة.

كيفية العثور على sitemap.xml في أي موقع

الطريقة الأولى والأبسط هي إضافة /sitemap.xml إلى نطاق الموقع. على سبيل المثال، للتحقق، حاول فتح في المتصفح عنوان مثل https://example.com/sitemap.xml. ستنجح هذه الطريقة مع معظم المواقع، بما في ذلك العديد من المتاجر الإلكترونية على أنظمة إدارة المحتوى الشهيرة.

إذا لم يكن هناك شيء في هذا العنوان، تحقق من ملف robots.txt - فهو موجود تقريبًا دائمًا على العنوان /robots.txt وفي معظم الحالات يحتوي على السطر Sitemap: https://example.com/sitemap_index.xml. هذه هي الطريقة الرسمية التي تخبر بها المواقع محركات البحث أين تبحث عن الخريطة. في الأسواق الكبرى مثل Wildberries وOzon، غالبًا ما تكون خرائط الموقع مقسمة إلى عشرات الملفات ومحددة عبر robots.txt.

الخيار الثالث هو البحث عن الإشارات في أنظمة مثل Google Search Console (إذا كان لديك وصول إلى موقعك) أو استخدام ماسحات المواقع المتخصصة التي تجد جميع ملفات sitemap بنفسها. بالنسبة للمواقع المنافسة، عادةً ما تكون الطرق الأولى كافية - rarely يتم إغلاق robots.txt عن أعين الغرباء، فهو ملف عام.

نصيحة:

أسماء ملفات sitemap ليست دائمًا قياسية. توجد خيارات مثل sitemap_index.xml، sitemap-products.xml، product-sitemap.xml وما إلى ذلك. دائمًا ابدأ بـ robots.txt - سيوضح لك المسارات الدقيقة.

هيكل sitemap في الأسواق: الفهرس والخرائط الفرعية

عادةً ما تحتوي المواقع الصغيرة على ملف sitemap.xml واحد مع جميع URL. ولكن بالنسبة للفئات الكبيرة مثل Wildberries وOzon أو Avito، هناك ملايين الصفحات، وملف XML واحد بهذا الحجم سيكون غير مريح. لذلك، يستخدمون ما يسمى بفهرس sitemap - ملف فهرس يشير إلى عشرات أو مئات من ملفات sitemap الفردية، مقسمة حسب الفئات، التواريخ أو ببساطة مجموعات من 10-50 ألف URL.

الهيكل يبدو كالتالي: أولاً، تفتح ملف الفهرس الرئيسي، وتجد فيه قائمة الروابط إلى الخرائط الفرعية، مثل sitemap-products-1.xml، sitemap-products-2.xml وهكذا. ثم تحتاج إلى تنزيل كل من هذه الملفات واستخراج URL بطاقات المنتجات النهائية منها. هذه عملية ذات مستويين، لكنها لا تزال أسرع بكثير من تصفح تنقل الموقع يدويًا.

أحيانًا تكون ملفات sitemap الفرعية مضغوطة بتنسيق gzip (امتداد .xml.gz) - هذه ممارسة قياسية لتوفير المساحة على الخادم. إذا قام السكربت بتنزيل ملف ورأى رموز غير قابلة للقراءة بدلاً من XML، فمن المحتمل أنه يجب أولاً فك ضغط المحتوى قبل التحليل.

خطوات استخراج URL من sitemap

بالنسبة لأولئك الذين يعملون مع أدوات التحليل الجاهزة بدون كود، فإن معظم المحللين الحديثين لكتالوجات الأسواق يمكنهم قراءة sitemap تلقائيًا - يكفي تحديد URL الجذر للموقع، وستجد الأداة robots.txt، وتجد فهرس sitemap وتجمع قائمة بجميع البطاقات. ولكن إذا كنت تعمل مع مطور أو تكتب سكربت صغير بنفسك، فإن منطق العمل بسيط، وإليك مثال على Python:

import requests
import gzip
from io import BytesIO
from lxml import etree

def get_sitemap_urls(sitemap_url, proxies=None):
    response = requests.get(sitemap_url, proxies=proxies, timeout=15)
    content = response.content

    # فك ضغط gzip، إذا كان الملف مضغوطًا
    if sitemap_url.endswith('.gz'):
        content = gzip.decompress(content)

    root = etree.fromstring(content)
    namespace = {'ns': 'http://www.sitemaps.org/schemas/sitemap/0.9'}

    # إذا كان هذا فهرس sitemap - نجمع الروابط إلى الخرائط الفرعية
    sub_sitemaps = root.findall('.//ns:sitemap/ns:loc', namespace)
    if sub_sitemaps:
        all_urls = []
        for sub in sub_sitemaps:
            all_urls.extend(get_sitemap_urls(sub.text, proxies))
        return all_urls

    # إذا كان هذا sitemap عادي - نجمع URL النهائية
    urls = root.findall('.//ns:url/ns:loc', namespace)
    return [url.text for url in urls]

proxy = {
    "http": "http://user:pass@proxy_host:port",
    "https": "http://user:pass@proxy_host:port"
}

urls = get_sitemap_urls("https://example.com/sitemap_index.xml", proxies=proxy)
print(f"تم العثور على URL: {len(urls)}")

يقوم هذا السكربت بالتجول بشكل متكرر عبر ملف الفهرس، وتنزيل كل خريطة فرعية وجمع جميع الروابط النهائية في قائمة واحدة. في النهاية، تحصل على قائمة كاملة من URL بطاقات المنتجات دون أي انتقال غير ضروري عبر تنقل الموقع.

تصفية الصفحات المطلوبة حسب أنماط URL

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

عادةً ما تستخدم أنماط URL للتصفية. على سبيل المثال، إذا كانت بطاقات المنتجات على الموقع تظهر كـ /catalog/product/12345، بينما تظهر الفئات كـ /catalog/category/electronics، ليس من الصعب فصل أحدهما عن الآخر من خلال مقارنة بسيطة لأجزاء المسار. في الحالات الأكثر تعقيدًا، عندما لا تكون هيكلية URL واضحة، يتم استخدام التعبيرات العادية - حيث تسمح لك بتحديد نمط مرة واحدة وتصفيه مئات الآلاف من الروابط على الفور.

من المفيد أيضًا النظر إلى العلامات <lastmod> داخل sitemap - حيث تظهر تاريخ آخر تعديل للصفحة. إذا كنت بحاجة إلى كتالوج غير كامل، ولكن فقط المنتجات التي تم تحديثها خلال الأسبوع الماضي (على سبيل المثال، لمراقبة المواقع الجديدة للمنافسين)، يمكنك تصفية URL بناءً على هذا التاريخ وعدم لمس الصفحات التي لم تتغير منذ شهور.

إعداد البروكسي لتنزيل خرائط الموقع بكميات كبيرة

على الرغم من أن الطلبات إلى sitemap أقل بكثير من التصفح الكامل، إلا أن المواقع مثل Wildberries وOzon لا تزال تراقب النشاط المشبوه - الطلبات المتكررة من IP واحد، User-Agent غير نمطي، عدم وجود رؤوس المتصفح. لذلك حتى لتنزيل ملفات sitemap، من الأفضل استخدام البروكسي، خاصة إذا كنت تخطط لمراقبة منتظمة، وليس لجمع الكتالوج مرة واحدة.

لتنزيل ملفات XML الخاصة بـ sitemap، عادةً ما تكون بروكسيات مراكز البيانات كافية - فهي سريعة وغير مكلفة، وعدد الطلبات إلى sitemap قليل، وتستخدم المواقع حماية أقل صرامة مقارنة بالصفحات العادية للكتالوج. ولكن في مرحلة تنزيل بطاقات المنتجات نفسها عبر URL التي تم جمعها، حيث يكون عدد الطلبات أكبر بكثير والحماية أكثر صرامة، من الأفضل الانتقال إلى بروكسيات سكنية - حيث تستخدم IP حقيقية لمستخدمين عاديين وتقل احتمالية حظرها من قبل أنظمة مكافحة الروبوتات في الأسواق.

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

إعداد عملي في السكربت أو المحلل بسيط: حدد المضيف، المنفذ، اسم المستخدم وكلمة المرور للبروكسي في الحقول المناسبة للطلب (كما هو موضح في مثال الكود أعلاه في معلمة البروكسي)، أو إذا كنت تستخدم محلل جاهز بدون كود أو متصفح مضاد للكشف مثل Dolphin Anty أو AdsPower للتحقق اليدوي من هيكل الموقع قبل إعداد جمع تلقائي، أدخل بيانات البروكسي في إعدادات الملف الشخصي: افتح علامة التبويب "بروكسي" → اختر نوع HTTP أو SOCKS5 → أدخل المضيف، المنفذ، اسم المستخدم، كلمة المرور → احفظ الملف الشخصي.

الأخطاء الشائعة عند العمل مع sitemap

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

الخطأ الثاني هو عدم مراعاة أن sitemap قد يكون غير مكتمل. بعض المواقع تستبعد عمدًا الصفحات ذات القيمة المنخفضة لـ SEO من sitemap، ولكنها لا تزال مهمة لمراقبة الأسعار - مثل صفحات المنتجات غير المتاحة. إذا كان عدد البطاقات المجمعة بعد التحليل عبر sitemap أقل بكثير من المتوقع، يجب التحقق من عدد المنتجات التي يعرضها الموقع نفسه في الفئة، وإذا لزم الأمر، استكمال الجمع من خلال تصفح الأقسام المفقودة.

الخطأ الثالث هو عدم تخزين ملفات sitemap التي تم تنزيلها مسبقًا. إذا كنت تقوم بتشغيل المراقبة يوميًا، فلا معنى لتنزيل ملف الفهرس وجميع الخرائط الفرعية مرة أخرى في كل مرة - معظمها لا يتغير يوميًا. احتفظ بقائمة URL محليًا وقم بتحديث فقط ما تغير فعليًا بناءً على تاريخ lastmod.

الخطأ الرابع هو نسيان رؤوس الطلب. حتى تنزيل ملف XML بسيط يمكن أن يتم حظره إذا كان الطلب يبدو كأنه من روبوت: بدون User-Agent، بدون Accept-Language، مع رؤوس غير نمطية بشكل افتراضي التي تضيفها المكتبة للطلبات. إضافة رؤوس متصفح واقعية مع البروكسي تقلل بشكل حاد من احتمال الحظر في هذه المرحلة.

قائمة التحقق لبدء التحليل عبر sitemap

قبل بدء جمع الكتالوج بشكل كامل، قم بمراجعة قائمة قصيرة من الخطوات لتجنب إضاعة الوقت في الأخطاء:

  • تحقق من robots.txt للموقع ووجدت العنوان الدقيق لـ sitemap أو sitemap index
  • تأكد من أن هيكل sitemap ذو مستويين (فهرس + خرائط فرعية) أو مستوى واحد
  • تحقق مما إذا كانت الملفات الفرعية مضغوطة بتنسيق gzip
  • حدد نمط URL للصفحات المطلوبة (بطاقات المنتجات، الفئات، إلخ)
  • قم بإعداد التصفية حسب النمط أو حسب تاريخ lastmod، إذا كنت بحاجة إلى مواقع جديدة فقط
  • قم بتوصيل البروكسي لتنزيل ملفات sitemap وبشكل منفصل لتنزيل بطاقات المنتجات نفسها
  • أضف رؤوس طلب واقعية (User-Agent، Accept-Language)
  • قم بإعداد التخزين المؤقت والمقارنة حسب التاريخ للتشغيلات المتكررة للمراقبة
  • تحقق من العدد النهائي لـ URL مع العدد التقريبي للمنتجات على الموقع

الخاتمة

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

إذا كنت تبدأ فقط في مراقبة كتالوج Wildberries أو Ozon أو موقع كبير آخر، ابدأ بـ sitemap - من المحتمل أنك ستوفر ساعات من العمل بالفعل في التشغيل الأول. لتنزيل ملفات sitemap نفسها، ستكون بروكسيات مراكز البيانات غير مكلفة كافية ، بينما لجمع البيانات بشكل منتظم عن بطاقات المنتجات، حيث يكون خطر الحظر أعلى، يجب أن تنظر إلى بروكسيات سكنية - حيث توفر عملًا مستقرًا للمحلل دون حظر متكرر على المدى الطويل.