← بازگشت به وبلاگ

پارسینگ از طریق sitemap.xml: چگونه کاتالوگ Wildberries را 10 برابر ارزان‌تر از обход سایت جمع‌آوری کنیم

به جای اسکن کردن سایت صفحه به صفحه، از نقشه سایت آماده 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 را باز کنید. این روش برای اکثر سایت‌ها، از جمله بسیاری از فروشگاه‌های اینترنتی بر روی CMS‌های محبوب کار می‌کند.

اگر در این آدرس چیزی وجود نداشت، فایل robots.txt را بررسی کنید — این فایل تقریباً همیشه در آدرس /robots.txt قرار دارد و در اکثر موارد شامل خط Sitemap: https://example.com/sitemap_index.xml است. این روش رسمی است که سایت‌ها به موتورهای جستجو اعلام می‌کنند که کجا باید نقشه را جستجو کنند. در بازارهای بزرگ مانند Wildberries و Ozon، نقشه‌های سایت معمولاً به ده‌ها فایل تقسیم می‌شوند و به همین طریق از طریق robots.txt مشخص می‌شوند.

گزینه سوم — جستجو در سیستم‌هایی مانند Google Search Console (اگر به سایت خود دسترسی دارید) یا استفاده از اسکنرهای تخصصی سایت که به طور خودکار تمام فایل‌های sitemap را پیدا می‌کنند. برای سایت‌های رقبای دیگر معمولاً دو روش اول کافی است — 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

برای کسانی که با ابزارهای آماده no-code پارسینگ کار می‌کنند، بیشتر پارسرهای مدرن کاتالوگ‌های بازارها به طور خودکار می‌توانند 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‌های اپراتورهای موبایل استفاده می‌کنند و در نظر بسیاری از سیستم‌های ضد تقلب معتبرترین هستند.

تنظیمات عملی در اسکریپت یا پارسر ساده است: میزبان، پورت، نام کاربری و رمز عبور پروکسی را در فیلدهای مربوطه درخواست مشخص کنید (همان‌طور که در مثال کد بالا در پارامتر پروکسی نشان داده شده است)، یا اگر از پارسر آماده no-code یا مرورگر ضد شناسایی مانند 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 دو سطحی (ایندکس + نقشه‌های فرعی) یا یک سطحی است
  • بررسی کردید که آیا فایل‌های فرعی فشرده نشده‌اند
  • الگوی URL برای صفحات مورد نیاز (کارت‌های محصولات، دسته‌ها و غیره) را تعیین کردید
  • فیلتر کردن بر اساس الگو یا تاریخ lastmod را تنظیم کردید، اگر فقط موقعیت‌های تازه نیاز دارید
  • پروکسی را برای دانلود فایل‌های sitemap و جداگانه برای دانلود خود کارت‌ها متصل کردید
  • هدرهای واقع‌گرایانه درخواست (User-Agent، Accept-Language) را اضافه کردید
  • کش کردن و مقایسه بر اساس تاریخ را برای راه‌اندازی‌های مجدد نظارت تنظیم کردید
  • تعداد نهایی URL را با تعداد تقریبی محصولات در سایت مقایسه کردید

نتیجه‌گیری

رویکرد sitemap-first یک هک و یا دور زدن امنیت نیست، بلکه استفاده از اطلاعاتی است که سایت به طور خودکار برای موتورهای جستجو منتشر می‌کند. به جای هزاران درخواست به ناوبری، دسته‌ها و صفحه‌بندی، شما یک لیست آماده از صفحات مورد نیاز را با چند ده درخواست به فایل‌های XML دریافت می‌کنید. این کار زمان راه‌اندازی پارسینگ را صرفه‌جویی می‌کند، مصرف ترافیک پروکسی را کاهش می‌دهد و به طور قابل توجهی ریسک مسدود شدن IP را کاهش می‌دهد، زیرا بار روی سایت به مراتب کمتر از عبور کامل است.

اگر شما تازه شروع به نظارت بر کاتالوگ Wildberries، Ozon یا دیگر سایت‌های بزرگ کرده‌اید، با sitemap شروع کنید — احتمالاً شما در اولین راه‌اندازی ساعت‌ها کار را صرفه‌جویی خواهید کرد. برای دانلود خود فایل‌های sitemap، پروکسی‌های دیتا سنتر کافی است، و برای جمع‌آوری منظم داده‌ها از کارت‌های محصولات، جایی که ریسک مسدود شدن بیشتر است، بهتر است به پروکسی‌های مسکونی توجه کنید — آن‌ها عملکرد پایدار پارسر را بدون مسدود شدن‌های مکرر در طولانی‌مدت تضمین می‌کنند.