استخراج بيانات Etsy باستخدام Python: البحث، المنتجات، المتاجر والمراجعات

آخر تحديث في July 8, 2026
استخراج بيانات Etsy باستخدام Python: البحث، المنتجات، المتاجر والمراجعات

يضم Etsy أكثر من 100 مليون قائمة نشطة، و5.6 مليون بائع، وحوالي 450 مليون زيارة شهرية. هذا يعني كمًا هائلًا من البيانات المتاحة علنًا حول التسعير، والاتجاهات، والمراجعات، والمنافسين — وإذا حاولت يومًا جمعها يدويًا، فأنت تعرف كم هو مرهق ذلك.

قضيتُ عطلة نهاية أسبوع ذات مرة أحاول فهرسة منتجات المنافسين يدويًا لمشروع بحث سوقي. عند المنتج رقم 30، بدأت أراجع كل قرار حياتي قادني إلى جدول البيانات ذاك. الحقيقة أن بيانات Etsy بالغة القيمة لتحليل الأسعار، وتطوير المنتجات، واكتشاف المجالات المتخصصة، ومقارنة أداء البائعين — لكن فقط إذا استطعت الوصول إليها على نطاق واسع. وهذا ما يدور حوله هذا الدليل: شرح واحد يغطي كيفية استخراج بيانات Etsy باستخدام Python عبر الأنواع الأربعة الرئيسية من الصفحات (نتائج البحث، صفحات المنتجات، صفحات المتاجر، والمراجعات)، مع توجيهات صريحة حول دفاعات Etsy ضد الروبوتات، وبديل بلا كود لمن يفضلون تجاوز كتابة السكربتات بالكامل.

ماذا يعني استخراج بيانات Etsy باستخدام Python؟

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

Python هو اللغة المفضلة لهذا النوع من العمل. فهو مناسب للمبتدئين، ويملك مجتمعًا ضخمًا، ويوفر منظومة مكتبات عميقة مخصصة للاستخراج: Requests لجلب الصفحات، وBeautifulSoup لتحليل HTML، وSelenium وPlaywright لأتمتة المتصفح، وpandas لتنظيم البيانات وتصديرها. يصنف Python باستمرار ضمن أكثر 3 لغات شيوعًا في استطلاع Stack Overflow السنوي للمطورين، كما أن مكتباته الخاصة بالاستخراج من بين الأكثر تنزيلًا على PyPI.

عندما تستخرج بيانات Etsy، فأنت تسحب البيانات من HTML — وأحيانًا من JSON مخفي — يرسله Etsy إلى متصفحك. وتشمل أنواع البيانات التي يمكنك استخراجها ما يلي:

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

لماذا تستخرج بيانات Etsy؟ حالات استخدام واقعية تحقق عائدًا

استخراج بيانات Etsy ليس مجرد تمرين تقني — بل هو ميزة تنافسية. سواء كنت بائعًا أو مدير منتج أو محلل بيانات، فإن امتلاك بيانات Etsy منظمة في متناول يدك يمكن أن يؤثر مباشرة في أرباحك.

etsy_stats_4f1f4d51c3.png

حالة الاستخدامما الذي تستخرجهمن يستفيدالأثر على الأعمال
تحليل التسعير التنافسينتائج البحث + أسعار المنتجاتعمليات التجارة الإلكترونية، البائعونيمكن للتسعير الديناميكي أن يرفع الإيرادات بمتوسط 5–22%
اكتشاف المجالات المتخصصة والاتجاهاتنتائج البحث، القوائم الرائجةالمؤسسون، المحللونرصد المجالات الصاعدة مبكرًا (مثلًا: شهد "preppy pajamas" نموًا في البحث بنسبة +1,112%)
تطوير المنتجات وتحسينهاالمراجعات، تفاصيل المنتجاتفرق المنتجاتاستعادت علامة أدوات مطبخ المركز الأول كأفضل بائع خلال 60 يومًا باستخدام بيانات مشاعر المراجعات
تحسين محركات البحث والبحث عن الكلمات المفتاحيةنتائج البحث، عناوين/وسوم المنتجاتفرق التسويقتحديد الكلمات المفتاحية عالية الطلب ومنخفضة المنافسة
مقارنة أداء البائعينصفحات المتاجر، أعداد المبيعاتفرق المبيعات، المحللونإنشاء قوائم عملاء محتملين مؤهلين بتكلفة 0.01–0.10 دولار/سجل بدلًا من شراء القوائم
مراقبة المخزون والتوفرتوفر المنتجاتعمليات التجارة الإلكترونيةالاستجابة أسرع لتغيرات مخزون المنافسين

كل واحدة من هذه الحالات تتطلب بيانات من أنواع مختلفة من صفحات Etsy — ولهذا يغطي هذا الدليل الأربعة كلها.

توفير الوقت: يدوي مقابل آلي

  • البحث اليدوي في Etsy: 30–45 دقيقة لكل منتج (50–75 ساعة لـ 100 منتج)
  • الاستخراج الآلي: 100 قائمة خلال 2–5 دقائق
  • الاستخراج المدعوم بالذكاء الاصطناعي أسرع بنسبة 30–40% مع دقة تصل إلى 99.5%

واجهة Etsy البرمجية أم استخراج الويب: أيهما تختار؟

قبل أن تكتب سطرًا واحدًا من الكود، يجدر أن تسأل: هل أستخدم واجهة Etsy الرسمية أم أستخرج الموقع مباشرة؟ أرى هذا السؤال يتكرر باستمرار في المنتديات، والإجابة تعتمد على البيانات التي تحتاج إليها.

ماذا تفعل واجهة Etsy البرمجية وما الذي لا تفعله

يوفر Etsy إصدار API v3 مع مصادقة OAuth 2.0. وهو مفيد للوصول إلى بيانات متجرك أنت — القوائم، الطلبات، الإيصالات. لكنه يفرض قيودًا حقيقية:

  • بيانات المنافسين: الواجهة تقتصر غالبًا على متجرك أنت. لا يمكنك سحب التسعير أو المبيعات أو القوائم الخاصة ببائع آخر.
  • المراجعات: لا توجد نقطة نهاية قوية لنصوص المراجعات الكاملة على نطاق واسع.
  • حدود المعدل: 10 طلبات/ثانية، و10,000 طلب/يوم افتراضيًا. والسقف مع offset هو 12,000 سجل.
  • استخدام AI/ML: مرفوض صراحة في مراجعة التطبيق.
  • التوثيق: شكاوى المجتمع واسعة — أمثلة ضعيفة، نقاط نهاية مهجورة، ودعم بطيء.

متى يكون استخراج الويب هو الخيار الأفضل

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

جدول مقارنة: الواجهة البرمجية مقابل الاستخراج مقابل بلا كود

المعيارواجهة Etsy الرسميةاستخراج الويب بـ PythonThunderbit (بلا كود)
الوصول إلى أسعار المنتجات✅ (حقول محدودة)✅ HTML/JSON-LD كامل✅ يستخرج الذكاء الاصطناعي أي حقل ظاهر
بيانات المراجعات❌ غير متاحة على نطاق واسع✅ عبر نقطة نهاية المراجعات/HTML✅ استخراج الصفحات الفرعية
بيانات متاجر المنافسين❌ متجرك فقط✅ أي متجر عام✅ أي متجر عام
يتطلب مصادقة✅ OAuth 2.0⚠️ ملفات تعريف الارتباط للبيانات المسجلة الدخول⚠️ استخراج عبر المتصفح لتسجيل الدخول
خطر الحظر ضد الروبوتاتلا يوجدمرتفع جدًا (DataDome)مُعالج (داخل المتصفح)
وقت الإعدادمتوسط (مفاتيح API، OAuth)مرتفع (كود + بروكسيات)نحو دقيقتين

إذا كنت تحتاج إلى بيانات المنافسين أو المراجعات أو التحليل بين المتاجر، فالواجهة البرمجية ببساطة لا تغطي ذلك. هذه هي الصورة الحقيقية.

اختر أسلوب استخراج Python قبل أن تكتب سطرًا واحدًا من الكود

سؤال أراه كثيرًا في Reddit وStack Overflow: "هل أستخدم Requests + BeautifulSoup، أم Selenium، أم واجهة بروكسي، أم شيئًا آخر تمامًا؟" الإجابة الصحيحة تعتمد على مستوى خبرتك، وميزانيتك، وحالة الاستخدام.

الأسلوبالأفضل لـمنحنى التعلميدعم JavaScript؟التعامل مع الحظرالتكلفة
Requests + BeautifulSoupالمطورون الذين يريدون تحكمًا كاملًامتوسطيدويًا (رؤوس الطلبات، البروكسيات)مجاني + تكلفة البروكسي
Selenium / Playwrightالصفحات الثقيلة بـ JS، ومسارات تسجيل الدخولمرتفعجزئي (بصمة المتصفح)مجاني + تكلفة البروكسي
خدمات واجهة البروكسيالتوسع وتجاوز الحظرمتوسط✅ (عبر API)✅ مدمج49$+ شهريًا
Thunderbit (بلا كود)غير المطورين، والاستخراج السريعمنخفض جدًا✅ (داخل المتصفح)✅ (جلسة المتصفح)تتوفر خطة مجانية

إذا أردت تحكمًا كاملًا وتشعر بالراحة مع Python، فاختر Requests + BeautifulSoup. وإذا كنت تحتاج إلى عرض JavaScript أو مسارات تسجيل الدخول، فاستخدم Selenium. وإذا كنت تريد تجاوز الحظر على نطاق واسع، ففكّر في خدمة بروكسي. وإذا كنت تريد بيانات Etsy من دون كتابة الكود أو صيانته، فـThunderbit يستحق النظر — وسنعود إليه لاحقًا.

كيف يرد Etsy: فهم حماية DataDome ضد الروبوتات

معظم أدلة الاستخراج ستقول لك: "استخدم بروكسي فقط" ثم تمضي. هذا لا يكفي مع Etsy. يستخدم Etsy نظام DataDome، وهو أحد أكثر أنظمة الحماية ضد الروبوتات شراسة على الويب. دراسة DataDome نفسها تسلط الضوء على Etsy باعتبارها قصة نجاح، وتشير إلى أن برامج الاستخراج كانت تمثل نحو 1% من تكاليف الحوسبة لدى Etsy.

etsy_antibot_5431142c9c.png

ما هو DataDome وكيف يعمل؟

لا يكتفي DataDome بفحص عنوان IP الخاص بك. بل يستخدم منظومة كشف متعددة الطبقات:

  • بصمة TLS (JA3): مكتبة requests في Python تملك بصمة TLS مميزة يمكن لـDataDome اكتشافها فورًا.
  • فحص رؤوس HTTP/البروتوكول: يتحقق من رؤوس متصفح كاملة ومتسقة — والرؤوس الناقصة أو المرتبة بشكل غير صحيح علامة خطر.
  • بصمة JavaScript (بروتوكول Picasso): يشغّل تحديات JS داخل المتصفح للتأكد أنك مستخدم حقيقي.
  • تعلم آلي سلوكي: يحلل أكثر من 35 إشارة لكل طلب، مع أكثر من 85,000 نموذج خاص بكل موقع.
  • تقييم سمعة IP: تُعلَّم عناوين مراكز البيانات فورًا.
  • التحقق من ملف تعريف الارتباط: يجب أن تكون cookie datadome موجودة وصحيحة.

علامات أنك حُظرت (وكيف تتحقق)

من أكثر الأخطاء شيوعًا: أن تحصل على استجابة 200 OK، لكن HTML في الحقيقة صفحة CAPTCHA، وليس البيانات التي تريدها. من العلامات الأخرى:

  • أخطاء 403 Forbidden
  • حلقات إعادة توجيه
  • يحتوي جسم الاستجابة على كائن JavaScript باسم dd أو HTML خاص بـ slider CAPTCHA

افحص دائمًا جسم الاستجابة، وليس رمز الحالة فقط. تحقق سريع:

if "captcha" in resp.text.lower() or "datadome" in resp.text.lower():
    print("تم الحظر! حصلت على صفحة CAPTCHA بدلًا من البيانات.")

الرؤوس وملفات الارتباط التي تقلل من الاكتشاف

لا يمكنك ضمان عدم الحظر، لكن الرؤوس الواقعية وإدارة ملفات الارتباط تقطع شوطًا طويلًا:

session = requests.Session()
session.headers.update({
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/133.0.0.0 Safari/537.36",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
    "Accept-Language": "en-US,en;q=0.9",
    "Accept-Encoding": "gzip, deflate, br",
    "Sec-Ch-Ua": '"Chromium";v="133", "Not-A.Brand";v="99", "Google Chrome";v="133"',
    "Sec-Ch-Ua-Mobile": "?0",
    "Sec-Ch-Ua-Platform": '"Windows"',
    "Sec-Fetch-Dest": "document",
    "Sec-Fetch-Mode": "navigate",
    "Sec-Fetch-Site": "none",
    "Upgrade-Insecure-Requests": "1",
})

أمور مهمة أيضًا:

  • احتفظ بملفات الارتباط بين الطلبات باستخدام requests.Session().
  • أضف تأخيرات عشوائية (2–7 ثوانٍ) بين الطلبات.
  • حاكِ سلسلة الإحالة: زر الصفحة الرئيسية أولًا، ثم البحث، ثم صفحات المنتجات.
  • على نطاق واسع، تدوير بروكسيات سكنية أمر أساسي. عناوين IP لمراكز البيانات تُعلَّم تقريبًا فورًا.

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

إعداد بيئة Python لاستخراج بيانات Etsy

قبل أن تبدأ:

  • مستوى الصعوبة: متوسط
  • الوقت المطلوب: نحو 30–60 دقيقة (الإعداد + أول عملية استخراج)
  • ما ستحتاجه: Python 3.8+، وpip، ومحرر كود، ومتصفح Chrome (لفحص DevTools)

تثبيت الاعتمادات

أنشئ مجلد مشروع، واضبط بيئة افتراضية، وثبّت المكتبات التي ستحتاجها:

mkdir etsy-scraper && cd etsy-scraper
python -m venv venv
source venv/bin/activate  # على Windows: venv\Scripts\activate

pip install requests beautifulsoup4 lxml pandas
  • requests — لجلب صفحات الويب
  • beautifulsoup4 — لتحليل HTML
  • lxml — محلل HTML أسرع (اختياري لكنه موصى به)
  • pandas — لتنظيم البيانات وتصديرها إلى CSV/Excel

إذا احتجت لاحقًا إلى أتمتة المتصفح (لتسجيل الدخول أو الصفحات الثقيلة بـ JS)، فثبّت أيضًا:

pip install selenium

افهم بنية صفحات Etsy قبل أن تكتب الكود

هذه نصيحة توفر وقتًا هائلًا: يضمّن Etsy بيانات المنتجات المنظمة داخل وسوم <script type="application/ld+json"> في معظم الصفحات. بيانات JSON-LD هذه منظمة أصلًا — اسم المنتج، السعر، التقييم، الصور — لذا لا تحتاج إلى معاناة محددات CSS الهشة لكل حقل.

افتح أي صفحة منتج في Etsy، ثم انقر بزر الفأرة الأيمن، واختر "عرض مصدر الصفحة"، وابحث عن application/ld+json. ستجد كتلة تحتوي على @type: Product وتتضمن معظم البيانات التي تحتاجها. أما صفحات نتائج البحث فتحتوي على @type: ItemList.

لا تزال محددات CSS مفيدة كخيار احتياطي (للبيانات غير الموجودة في JSON-LD، مثل تفاصيل الشحن أو نص المراجعات)، لكن JSON-LD يجب أن يكون محطتك الأولى.

الخطوة 1: استخراج نتائج بحث Etsy باستخدام Python

نتائج البحث هي نقطة البداية لمعظم مشاريع استخراج Etsy — سواء كنت تراقب مجالًا متخصصًا، أو تتابع أسعار المنافسين، أو تبني قاعدة بيانات منتجات.

بناء رابط البحث

روابط البحث في Etsy تتبع هذا النمط:

https://www.etsy.com/search?q={keyword}&ref=pagination&page={page_number}

في الاستعلامات متعددة الكلمات، قم بترميز المسافات في الرابط (مثلًا: handmade+jewelry أو handmade%20jewelry). تجعل المعلمة ref=pagination الطلب يبدو أقرب إلى تنقل طبيعي في متصفح.

ومن المعلمات المفيدة الأخرى: order (most_relevant, price_asc, price_desc, date_desc)، وmin_price، وmax_price، وship_to، وfree_shipping=true. كل صفحة تعيد 48 عنصرًا.

أرسل الطلب وحلل HTML

import requests
from bs4 import BeautifulSoup
import json
import time
import random

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124.0.0.0 Safari/537.36",
    "Accept-Language": "en-US,en;q=0.9",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
}

def scrape_etsy_search(query, max_pages=3):
    all_products = []
    for page in range(1, max_pages + 1):
        url = f"https://www.etsy.com/search?q={query}&ref=pagination&page={page}"
        resp = requests.get(url, headers=headers, timeout=30)
        if "captcha" in resp.text.lower():
            print(f"تم الحظر في الصفحة {page}. جرّب إضافة تأخيرات أو بروكسيات.")
            break
        soup = BeautifulSoup(resp.text, "lxml")
        for script in soup.find_all("script", type="application/ld+json"):
            data = json.loads(script.string)
            if data.get("@type") == "ItemList":
                for item in data.get("itemListElement", []):
                    all_products.append({
                        "name": item.get("name"),
                        "url": item.get("url"),
                        "image": item.get("image"),
                        "price": item.get("offers", {}).get("price"),
                        "currency": item.get("offers", {}).get("priceCurrency"),
                        "position": item.get("position"),
                    })
        time.sleep(random.uniform(2, 5))
    return all_products

استخراج بيانات القوائم من JSON-LD

يمنحك مصفوفة itemListElement اسم كل قائمة ورابطها وصورتها وسعرها وعملتها. وإذا كنت تحتاج أيضًا إلى تقييم النجوم أو عدد النتائج (وهي ليست موجودة دائمًا في JSON-LD)، فارجع إلى محددات CSS:

  • بطاقة القائمة: .v2-listing-card
  • العنوان: h3.v2-listing-card__title
  • السعر: span.currency-value
  • الرابط: a.listing-link (href)

التعامل مع الترقيم الصفحي

كرر عبر الصفحات وأضف تأخيرًا عشوائيًا بين كل طلب. عادةً يعرض Etsy ما يصل إلى 20–250 صفحة بحسب الاستعلام.

results = scrape_etsy_search("handmade+jewelry", max_pages=5)
print(f"تم استخراج {len(results)} منتجًا.")

في اختباري، استغرق استخراج 5 صفحات نحو 20 ثانية — مقارنةً بأكثر من 30 دقيقة من النسخ واللصق اليدوي.

الخطوة 2: استخراج صفحات منتجات Etsy باستخدام Python

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

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

def scrape_etsy_product(url):
    resp = requests.get(url, headers=headers, timeout=30)
    soup = BeautifulSoup(resp.text, "lxml")
    for script in soup.find_all("script", type="application/ld+json"):
        data = json.loads(script.string)
        if data.get("@type") == "Product":
            offers = data.get("offers", {})
            price = offers.get("price") or offers.get("lowPrice")
            rating_data = data.get("aggregateRating", {})
            return {
                "name": data.get("name"),
                "description": data.get("description", "")[:500],
                "brand": data.get("brand", {}).get("name") if isinstance(data.get("brand"), dict) else data.get("brand"),
                "category": data.get("category"),
                "price": price,
                "currency": offers.get("priceCurrency"),
                "availability": offers.get("availability"),
                "rating": rating_data.get("ratingValue"),
                "review_count": rating_data.get("reviewCount"),
                "images": data.get("image", []),
                "sku": data.get("sku"),
                "material": data.get("material"),
            }
    return None

التعامل مع اختلافات الأسعار

بعض المنتجات لها offers.price واحد. وأخرى — مثل التي تحتوي على متغيرات كالحجم أو اللون — تستخدم offers.lowPrice وoffers.highPrice. الكود أعلاه يعالج الحالتين بالانتقال من price إلى lowPrice.

تحليل حقول إضافية عبر محددات CSS

بالنسبة للبيانات غير الموجودة في JSON-LD — مثل معلومات الشحن، وخيارات المتغيرات، وتفاصيل البائع الكاملة — ستحتاج إلى محددات CSS:

  • العنوان: h1[data-buy-box-listing-title]
  • المتغيرات: select[data-selector-id] أو div[data-option-set]
  • الشحن: div.wt-text-caption قرب قسم الشحن

المقايضة هنا: JSON-LD أنظف وأكثر ثباتًا عبر تغييرات التصميم. أما محددات CSS فهي هشة لكنها تغطي حقولًا أكثر.

الخطوة 3: استخراج صفحات متاجر Etsy باستخدام Python

هذا هو القسم الذي يتجاهله معظم الأدلة المنافسة تمامًا — ومع ذلك فهو ربما الأكثر قيمة لفرق المبيعات والمحللين التنافسيين.

بناء رابط المتجر وجلب الصفحة

def scrape_etsy_shop(shop_name):
    url = f"https://www.etsy.com/shop/{shop_name}"
    resp = requests.get(url, headers=headers, timeout=30)
    soup = BeautifulSoup(resp.text, "lxml")

    # بيانات المتجر من HTML (ليست في JSON-LD)
    sales_el = soup.select_one("div.shop-sales-reviews a")
    rating_el = soup.find("input", {"name": "initial-rating"})
    location_el = soup.select_one("div.shop-location")

    shop_data = {
        "name": shop_name,
        "sales": sales_el.text.strip() if sales_el else None,
        "rating": rating_el["value"] if rating_el else None,
        "location": location_el.text.strip() if location_el else None,
    }

    # القوائم من JSON-LD
    listings = []
    for script in soup.find_all("script", type="application/ld+json"):
        data = json.loads(script.string)
        if data.get("@type") == "ItemList":
            for item in data.get("itemListElement", []):
                listings.append({
                    "name": item.get("name"),
                    "url": item.get("url"),
                    "price": item.get("offers", {}).get("price"),
                })
    shop_data["listings"] = listings
    return shop_data

ما الذي يمكنك استخراجه من صفحات المتاجر؟

JSON-LD في صفحات المتاجر يكون @type: ItemList — وهو يغطي قوائم المنتجات، لكنه لا يغطي بيانات على مستوى المتجر مثل عدد المبيعات أو الموقع أو التقييم. لهذه البيانات، تحتاج إلى محددات CSS:

نقطة البياناتالمحددملاحظات
اسم المتجرh1 أو عنوان الصفحةيكون عادةً في عنوان الصفحة
إجمالي المبيعاتdiv.shop-sales-reviews aنص مثل "12,345 sales"
تقييم النجومقيمة input[name="initial-rating"]رقم من 1 إلى 5
الموقعdiv.shop-locationالمدينة، الدولة
عضو منذdiv.shop-infoنص التاريخ

تعد بيانات المتجر ذات قيمة فريدة لبناء قوائم العملاء المحتملين، أو مقارنة أداء المنافسين، أو تحديد أفضل البائعين في مجال متخصص.

الخطوة 4: استخراج مراجعات Etsy باستخدام Python

المراجعات من أكثر نقاط البيانات قيمة — والأصعب — في Etsy. نص المراجعة الكامل، والتقييمات، والتواريخ ليست موجودة في HTML الأولي للصفحة؛ بل تُحمَّل عبر نقطة نهاية داخلية للواجهة البرمجية.

الأسلوب 1: اكتشاف نقطة نهاية API الداخلية للمراجعات في Etsy

افتح صفحة منتج في Chrome، وافتح DevTools (F12)، واذهب إلى تبويب Network، ثم مرّر إلى أسفل قسم المراجعات. ستشاهد طلب POST إلى شيء مثل:

https://www.etsy.com/api/v3/ajax/bespoke/member/neu/specs/deep_dive_reviews

تعيد هذه النقطة شذرات HTML تحتوي على بطاقات المراجعات. لاستخدامها، تحتاج إلى:

  • listing_id — المعرف الرقمي من رابط المنتج
  • shop_id — استخرجه من HTML صفحة المنتج باستخدام regex
  • csrf_nonce — استخرجه من وسم <meta> في الصفحة

استخراج المعرفات ورمز CSRF

import re

def get_review_params(product_url):
    resp = requests.get(product_url, headers=headers)
    html = resp.text
    listing_id = product_url.split("/")[-1].split("?")[0]
    shop_id_match = re.search(r'"shopId"\s*:\s*(\d+)', html)
    shop_id = shop_id_match.group(1) if shop_id_match else None
    soup = BeautifulSoup(html, "lxml")
    csrf_meta = soup.find("meta", {"name": "csrf_nonce"})
    csrf = csrf_meta["content"] if csrf_meta else None
    return listing_id, shop_id, csrf

استخراج المراجعات مع الترقيم الصفحي

def scrape_reviews(listing_id, shop_id, csrf, max_pages=5):
    session = requests.Session()
    session.headers.update(headers)
    all_reviews = []
    for page in range(1, max_pages + 1):
        payload = {
            "specs": {
                "deep_dive_reviews": {
                    "module_path": "neu/specs/deep_dive_reviews",
                    "listing_id": listing_id,
                    "shop_id": shop_id,
                    "page": page,
                }
            }
        }
        resp = session.post(
            "https://www.etsy.com/api/v3/ajax/bespoke/member/neu/specs/deep_dive_reviews",
            json=payload,
            headers={"x-csrf-token": csrf, "Content-Type": "application/json"},
        )
        data = resp.json()
        html_fragment = data.get("output", {}).get("deep_dive_reviews", "")
        review_soup = BeautifulSoup(html_fragment, "lxml")
        for card in review_soup.select("div.review-card"):
            rating_el = card.find("input", {"name": "rating"})
            text_el = card.select_one("div.wt-text-body")
            user_el = card.select_one("a[data-review-username]")
            date_el = card.select_one("p.wt-text-body-small")
            all_reviews.append({
                "rating": rating_el["value"] if rating_el else None,
                "text": text_el.text.strip() if text_el else None,
                "reviewer": user_el.text.strip() if user_el else None,
                "date": date_el.text.strip() if date_el else None,
            })
        time.sleep(random.uniform(2, 5))
    return all_reviews

الأسلوب 2: تحليل المراجعات من HTML (خيار احتياطي)

إذا فشل أسلوب API (مثلًا بسبب مشكلات رمز CSRF)، يمكنك تحليل الدفعة الأولى من المراجعات مباشرةً من HTML صفحة المنتج. القيد: الدفعة الأولى فقط من المراجعات موجودة في HTML الثابت. وللحصول على المزيد، تحتاج إلى API أو أداة أتمتة متصفح مثل Selenium.

التعامل مع البيانات التي تتطلب تسجيل دخول: استخراج متجرك في Etsy

هذه فجوة لا يغطيها أي دليل آخر، لكنها حاجة حقيقية — خصوصًا لبائعي Etsy الذين يريدون استخراج طلباتهم وإيراداتهم وإحصاءاتهم الخاصة.

المشكلة: requests وحده لا يستطيع الوصول إلى لوحة تحكم Etsy لأنّه لا يحمل ملفات تعريف الارتباط الخاصة بجلسة تسجيل الدخول.

الخيار 1: Selenium مع تسجيل دخول يدوي والتقاط ملفات الارتباط

استخدم Selenium لفتح متصفح، ثم سجّل الدخول يدويًا (أو آليًا)، وبعدها تابع الاستخراج أثناء وجودك في جلسة مصادقة:

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("https://www.etsy.com/signin")
# سجّل الدخول يدويًا في نافذة المتصفح، ثم:
input("اضغط Enter بعد تسجيل الدخول...")

cookies = driver.get_cookies()
# الآن استخدم driver.get() للتنقل إلى صفحات لوحة التحكم واستخراج البيانات

يمكنك أيضًا حفظ ملفات الارتباط من جلسة Selenium وإعادة استخدامها مع requests.Session() لاستخراج أسرع وأخف بعد تسجيل الدخول الأولي.

الخيار 2: تصدير ملفات تعريف الارتباط من المتصفح لاستخدامها مع Requests

استخدم إضافة متصفح (مثل "EditThisCookie") لتصدير ملفات الارتباط النشطة لجلسة Etsy، ثم حمّلها في جلسة Requests:

import requests

session = requests.Session()
# أضف ملفات الارتباط المصدّرة من متصفحك
session.cookies.set("uaid", "YOUR_UAID_VALUE", domain=".etsy.com")
session.cookies.set("user_prefs", "YOUR_USER_PREFS_VALUE", domain=".etsy.com")
# ... أضف ملفات الارتباط الأخرى حسب الحاجة

resp = session.get("https://www.etsy.com/your/orders", headers=headers)

الطريق السهل: وضع الاستخراج عبر المتصفح في Thunderbit

بما أن Thunderbit يعمل داخل متصفح Chrome، فهو يرث جلسة Etsy النشطة تلقائيًا. لا حاجة إلى كود مصادقة، ولا إلى تصدير ملفات الارتباط — فقط انتقل إلى لوحة تحكم Etsy واستخراج البيانات. هذا مفيد جدًا لاستخراج الطلبات والإيرادات والإحصاءات وغيرها من بيانات البائع فقط من دون أي كتابة للكود.

استخراج لوحة تحكم Etsy الخاصة بك بالذكاء الاصطناعي

تصدير بيانات Etsy المستخرجة واستخدامها

الحفظ إلى CSV أو JSON

import pandas as pd

df = pd.DataFrame(results)
df.to_csv("etsy_products.csv", index=False, encoding="utf-8")
df.to_json("etsy_products.json", orient="records", indent=2)

أفضل الممارسات: أدرج الطوابع الزمنية في أسماء الملفات، واستخدم ترميز UTF-8، وتعامل مع المحارف الخاصة في أسماء المنتجات (بائعو Etsy يحبون الرموز التعبيرية والأحرف المعلّمة).

التصدير إلى Google Sheets أو Airtable أو Notion

لمستخدمي Python، تتيح لك مكتبات مثل gspread (Google Sheets) أو واجهة Airtable البرمجية دفع البيانات برمجيًا. لكن إذا كنت تستخدم Thunderbit، فجميع عمليات التصدير — إلى Google Sheets وExcel وAirtable وNotion — مجانية وبنقرة واحدة. بلا مفاتيح API، ولا إعداد OAuth.

تجاوز الكود: كيف تستخرج بيانات Etsy باستخدام Thunderbit (بديل بلا كود)

ليس الجميع يريد كتابة سكربتات Python أو صيانة إعدادات البروكسي أو تصحيح محددات CSS عند الثانية صباحًا. إذا كنت من هذا النوع، فإليك طريقة الحصول على بيانات Etsy باستخدام Thunderbit.

ثبّت إضافة Thunderbit لمتصفح Chrome

اذهب إلى متجر Chrome الإلكتروني وثبّت Thunderbit. أنشئ حسابًا مجانيًا — وتمنحك الخطة المجانية 6 صفحات/شهر، وجميع عمليات التصدير مجانية.

استخدم اقتراح الحقول بالذكاء الاصطناعي في أي صفحة Etsy

انتقل إلى صفحة بحث أو منتج أو متجر في Etsy. انقر "اقتراح الحقول بالذكاء الاصطناعي" في الشريط الجانبي لـThunderbit. يقوم الذكاء الاصطناعي بفحص الصفحة ويقترح أعمدة — اسم المنتج، السعر، التقييم، الصور، اسم المتجر، الوسوم، معلومات الشحن. عدّل الأعمدة أو أضف غيرها حسب الحاجة.

انقر على الاستخراج ثم التصدير

انقر "استخراج" لاستخراج البيانات من الصفحة الحالية. وللنتائج متعددة الصفحات، استخدم استخراج الترقيم الصفحي في Thunderbit. ولإثراء قائمة بروابط المنتجات بمعلومات تفصيلية من كل صفحة منتج (الأوصاف، المراجعات، الشحن)، استخدم استخراج الصفحات الفرعية — حيث يزور Thunderbit كل رابط ويجلب البيانات الإضافية تلقائيًا.

صدّر إلى Excel أو Google Sheets أو Airtable أو Notion — كلها مجانًا.

متى يتفوق Thunderbit على Python في استخراج Etsy

  • لا حاجة لإعداد بروكسي أو كود مضاد للحظر. يعمل Thunderbit داخل متصفح Chrome الحقيقي لديك، لذا يرث جلستك ويبدو لـDataDome كمستخدم عادي.
  • يتكيف الذكاء الاصطناعي مع تغييرات التخطيط تلقائيًا. لا محددات معطلة تحتاج إلى إصلاح عندما يحدّث Etsy واجهة الواجهة الأمامية.
  • ممتاز للبحث لمرة واحدة، أو التحليل التنافسي، أو أعضاء الفريق غير التقنيين. إذا كنت تحتاج فقط إلى مجموعة بيانات سريعة، فلن تحتاج إلى بيئة Python.
  • استخراج الصفحات الفرعية يمكّنك من إثراء قائمة روابط المنتجات ببيانات تفصيلية من دون كتابة حلقات متداخلة.

للاطلاع على شرح عملي، راجع قناة Thunderbit على YouTube.

مقارنة تكلفة 6 أشهر: Python مقابل Thunderbit

العاملPython DIYThunderbit
وقت الإعداد8–20 ساعةأقل من 5 دقائق
تكلفة 6 أشهر (بما في ذلك العمل والبروكسيات)2,720–9,450 دولار90–228 دولار
الصيانة الشهرية4–10+ ساعات (تحديثات المحددات = أكثر من 80% عبء إضافي)0–1 ساعة
التعامل مع الحظربروكسيات سكنية بتكلفة ائتمان تعادل 85× المعتاديعمل داخل المتصفح ويتجاوز DataDome أصلًا
جودة البياناتعالية (مع الجهد)عالية (مدفوعة بالذكاء الاصطناعي)

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

نصائح قانونية وأخلاقية لاستخراج بيانات Etsy

يُسألني دائمًا عن قانونية الاستخراج في كل مقال، لذا إليك النسخة المختصرة:

  • شروط استخدام Etsy تحظر صراحة الوصول الآلي. ومع ذلك، يعتمد Etsy على الإنفاذ التقني (DataDome) بدلًا من الدعاوى القضائية — ولا توجد دعاوى معروفة خاصة بـEtsy تستهدف أدوات الاستخراج.
  • استخرج فقط البيانات المتاحة علنًا. لا تتجاوز المصادقة ولا تدخل لوحات البائع الخاصة التي لا تملكها.
  • استخدم معدلات طلب معقولة. تأخيرات 2–7 ثوانٍ بين الطلبات، ولا تُرهق خوادم Etsy.
  • احترم robots.txt. يسمح Etsy بصفحات البحث لكنه يقيّد بعض المسارات.
  • تعامل مع البيانات الشخصية بمسؤولية وفق قوانين الخصوصية مثل GDPR.
  • استشر مستشارًا قانونيًا في مشاريع الاستخراج التجارية واسعة النطاق.

للمزيد من الخلفية، راجع مقالنا عن الآثار القانونية لاستخراج الويب — بما في ذلك Meta v. Bright Data (2024)، حيث تم تأييد استخراج البيانات العامة.

الخلاصة: أهم النقاط

غطينا الكثير هنا. وهذا ما أريدك أن تخرج به:

  • البيانات المنظمة JSON-LD في Etsy تجعل الاستخراج أنظف من تحليل HTML الخام في معظم الحقول.
  • DataDome عقبة حقيقية — استخدم رؤوس طلبات مناسبة، وتأخيرات، وإدارة ملفات الارتباط، وبروكسيات سكنية عند الاستخراج بـPython وعلى نطاق واسع.
  • واجهة Etsy البرمجية محدودة. إذا كنت تحتاج إلى المراجعات أو متاجر المنافسين أو التحليل بين البائعين، فالاستخراج هو المسار العملي.
  • Thunderbit يوفر بديلًا بلا كود يعالج الحظر والمصادقة بشكل أصلي — يستحق التجربة إذا كنت تريد بيانات Etsy من دون صيانة السكربتات.
  • استخرج دائمًا بمسؤولية واحترم شروط Etsy.

إذا أردت البدء من دون كتابة كود، فـجرّب Thunderbit مجانًا. أو استخدم كود Python من هذا الدليل لبناء أداة استخراج مخصصة خاصة بك — ولتظل محدداتك عاملة دائمًا حتى مساء الجمعة.

للمزيد من أدلة الاستخراج، اطلع على دليل استخراج Etsy وأفضل أدوات استخراج الويب بالذكاء الاصطناعي.

جرّب Thunderbit لاستخراج بيانات Etsy بسرعة أكبر Get Started Free

الأسئلة الشائعة

1. هل استخراج بيانات Etsy باستخدام Python قانوني؟

استخراج البيانات المتاحة علنًا مسموح به عمومًا وفق السوابق القانونية الحديثة (مثل Meta v. Bright Data و hiQ v. LinkedIn). ومع ذلك، فإن شروط استخدام Etsy تحظر الوصول الآلي، لذا راجع دائمًا شروط الاستخدام وrobots.txt قبل الاستخراج. وللاستخدام التجاري أو واسع النطاق، استشر مستشارًا قانونيًا.

2. هل يمكنني استخراج Etsy من دون أن يتم حظري؟

يستخدم Etsy نظام DataDome، وهو من أصعب أنظمة الحماية ضد الروبوتات. تساعد الرؤوس الواقعية، وتأخيرات الطلبات، واستمرار ملفات الارتباط، وتدوير البروكسيات السكنية على تقليل الحظر. نهج Thunderbit داخل المتصفح يتجنب معظم أساليب الكشف لأنه يعمل داخل جلسة Chrome الحقيقية لديك.

3. هل لدى Etsy واجهة برمجية يمكنني استخدامها بدلًا من الاستخراج؟

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

4. ما مكتبات Python التي أحتاجها لاستخراج Etsy؟

على الأقل: requests وbeautifulsoup4 وpandas (للتصدير) وjson (مضمن). وللصفحات الثقيلة بـJS أو التي تتطلب تسجيل دخول، أضف selenium. ولتحليل HTML بشكل أسرع، استخدم lxml.

5. كيف أستخرج مراجعات Etsy تحديدًا؟

تُحمَّل مراجعات Etsy عبر نقطة نهاية API داخلية (/api/v3/ajax/bespoke/member/neu/specs/deep_dive_reviews). ستحتاج إلى استخراج معرف القائمة ومعرف المتجر ورمز CSRF من صفحة المنتج، ثم إرسال POST إلى النقطة مع الترقيم الصفحي. وكخيار احتياطي، يمكنك تحليل الدفعة الأولى من المراجعات من HTML صفحة المنتج — وقد غطّى هذا الدليل الطريقتين خطوة بخطوة.

اعرف المزيد

Shuai Guan
Shuai Guan
الرئيس التنفيذي في Thunderbit | خبير في أتمتة البيانات بالذكاء الاصطناعي Shuai Guan هو الرئيس التنفيذي لشركة Thunderbit وخريج كلية الهندسة بجامعة ميشيغان. وبالاستناد إلى ما يقرب من عشر سنوات من الخبرة في مجالي التقنية وبنية SaaS، يتخصص في تحويل نماذج الذكاء الاصطناعي المعقدة إلى أدوات عملية لاستخراج البيانات بدون الحاجة إلى البرمجة. في هذه المدونة، يشارك رؤى صريحة ومجرّبة ميدانيًا حول استخراج البيانات من الويب واستراتيجيات الأتمتة، لمساعدتك على بناء سير عمل أذكى يعتمد على البيانات. وعندما لا يكون منشغلاً بتحسين تدفقات العمل الخاصة بالبيانات، يوجّه نفس دقته واهتمامه بالتفاصيل إلى شغفه بالتصوير الفوتوغرافي.
جدول المحتويات

استخرج صفحة ويب بمجرد أن تطلب

قل ما تحتاجه بوضوح. أو الأفضل، لا تقل شيئًا على الإطلاق.

جرّب Thunderbit مجاني
استخرج البيانات باستخدام الذكاء الاصطناعي
انقل البيانات بسهولة إلى Google Sheets أو Airtable أو Notion
Chrome Store Rating
PRODUCT HUNT#1 Product of the Week