تعلّم كيفية استخراج منتجات Amazon باستخدام Python

آخر تحديث في April 16, 2026

إذا جرّبتَ أي شرح لاستخراج بيانات Amazon ثم اصطدمتَ بحواجز CAPTCHAs أو أخطاء 503 أو نتائج فارغة تمامًا — فأهلاً بك في النادي. معظم أدلة Python الخاصة بـ Amazon المنتشرة على الإنترنت كُتبت في 2022 أو 2023، وتعتمد على selectors وتقنيات عالجتها Amazon منذ زمن.

لقد أمضيتُ سنوات في بناء أدوات استخراج البيانات في Thunderbit، وأستطيع أن أقول لك من واقع التجربة: Amazon من أصعب المواقع في الاستخراج بشكل موثوق. المنصة تغيّر بنية HTML باستمرار، وتستخدم دفاعًا متعدد الطبقات ضد الروبوتات، بل وتعرض تخطيطات صفحات مختلفة لمستخدمين مختلفين عبر اختبارات A/B. في هذا الدليل، سأشرح لك scraper بلغة Python يعمل فعلًا في 2025 — مع CSS selectors مُتَحقَّق منها، واستراتيجية متعددة الطبقات لتفادي الحظر، وإرشادات للجدولة والتصدير غالبًا ما تتجاهلها الشروحات الأخرى تمامًا. ولمن يريد البيانات مباشرة من دون عناء Python، سأوضح أيضًا كيف يمكن لـ تنفيذ المهمة نفسها في خطوتين تقريبًا.

ما المقصود باستخراج منتجات Amazon؟

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

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

لماذا تستخدم Python لاستخراج منتجات Amazon؟

تضم Amazon ما يقارب عبر أكثر من 30 فئة، مدعومة بحوالي . ويمثل البائعون من طرف ثالث الآن 69% من إجمالي GMV. من المستحيل متابعة حتى جزء بسيط من هذا الحجم يدويًا. إليك لماذا تلجأ الفرق إلى استخراج بيانات Amazon:

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

إن حجم تغيّر الأسعار في Amazon وحده يجعل الأتمتة ضرورية: فـ Amazon تغيّر الأسعار ، ويتحدث سعر المنتج الواحد تقريبًا كل 10 دقائق. بالمقارنة، تغيّر متاجر مثل Best Buy وWalmart الأسعار نحو 50 ألف مرة فقط شهريًا. لا يمكن لأي فريق بشري مجاراة ذلك.

amazon-product-price-monitor-dashboard.webp

تمنحك Python تحكمًا كاملًا في عملية الاستخراج — أنت تحدد ما الذي تريد استخراجه، وكيفية التعامل مع الأخطاء، وأين تُخزن البيانات. لكن ذلك يعني أيضًا أنك مسؤول عن الصيانة، وتفادي الحظر، ومواكبة التغييرات المتكررة في HTML الخاص بـ Amazon.

ماذا يمكنك أن تستخرج من Amazon وما الذي لا ينبغي لك استهدافه؟

من صفحات المنتجات المتاحة للعامة، يمكنك عادة استخراج:

  • عنوان المنتج (الاسم، العلامة التجارية)
  • السعر (الحالي، الأصلي، سعر العرض)
  • التقييم (متوسط النجوم)
  • عدد المراجعات
  • صور المنتج (رابط الصورة الرئيسية)
  • التوفر / حالة المخزون
  • ASIN (رقم التعريف القياسي لمنتجات Amazon)
  • وصف المنتج والنقاط الرئيسية
  • معلومات البائع
  • تنويعات المنتج (الحجم، اللون، إلخ)

أما ما ينبغي تجنبه:

  • البيانات خلف تسجيل الدخول: صفحات المراجعات الموسعة، بيانات الحساب الشخصي، سجل الطلبات
  • المعلومات الشخصية: أسماء المشترين، العناوين، معلومات الدفع
  • المحتوى المحمي بحقوق نشر لإعادة النشر: أوصاف المنتجات والصور مناسبة للتحليل، لكن لا تعِد نشرها على أنها من إنتاجك

يقوم ملف الخاص بـ Amazon بحظر أكثر من 50 روبوتًا مسمى (بما في ذلك GPTBot وScrapy وClaudeBot)، كما يمنع مسارات مثل الحسابات، العربات، وقوائم الرغبات. صفحات تفاصيل المنتج ليست محظورة صراحةً، لكن شروط خدمة Amazon تمنع الوصول الآلي. وقد فرّقت المحاكم عادة بين مخالفة شروط الخدمة (مسألة مدنية) والمخالفات الجنائية وفق CFAA — وسأتناول جانب القانونية في نهاية هذا الدليل.

الأدوات والمكتبات التي ستحتاجها

إليك حزمة Python المستخدمة في هذا الشرح:

المكتبةالغرضسبب استخدامها
requestsطلبات HTTPبسيطة، ومدعومة على نطاق واسع
beautifulsoup4تحليل HTMLاستخراج سهل عبر CSS selectors
lxmlمحلل HTML سريعيُستخدم كخلفية تحليل لـ BeautifulSoup
curl_cffiمحاكاة بصمة TLSمهم جدًا لتجاوز رصد Amazon
pandasتنظيم البيانات وتصديرهاDataFrames وتصدير CSV/Excel

اختياريًا (للمحتوى المُولّد عبر JavaScript):

  • selenium أو playwright — أتمتة متصفح بلا واجهة

إعداد بيئة Python

افتح الطرفية ونفّذ:

1mkdir amazon-scraper && cd amazon-scraper
2python -m venv venv
3source venv/bin/activate  # على Windows: venv\Scripts\activate
4pip install requests beautifulsoup4 lxml curl_cffi pandas

وتحقق من نجاح التثبيت:

1import requests, bs4, curl_cffi, pandas
2print("All good!")

إذا ظهرت لك رسالة "All good!" من دون أخطاء، فأنت جاهز.

laptop-coding-workspace.webp

لماذا تفشل معظم شروحات استخراج Amazon (ولماذا هذا الدليل مختلف)

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

تحدّث Amazon بنية HTML، وأسماء الأصناف، ومعرّفات العناصر بشكل متكرر. وتشير تقارير مجتمع الاستخراج إلى أن بسبب تغيّرات DOM وبصمة المتصفح. وأكثر الضحايا شهرة؟ المحدد #priceblock_ourprice، الذي ظهر في مئات الشروحات بين 2018 و2023. هذا المعرّف لم يعد موجودًا في صفحات منتجات Amazon.

إليك مقارنة سريعة بين ما تعطل وما يعمل الآن:

نقطة البياناتالمحدد المعطّل (قبل 2024)المحدد العامل في 2025
السعر#priceblock_ourpricediv#corePriceDisplay_desktop_feature_div span.a-price .a-offscreen
العنوان#productTitlespan#productTitle (ما زال يعمل)
التقييمspan.a-icon-alt (أحيانًا في سياق خاطئ)#acrPopover span.a-icon-alt
عدد المراجعات#acrCustomerReviewCountspan#acrCustomerReviewText
التوفر#availability spandiv#availability span.a-size-medium

تم اختبار كل مقتطف برمجي في هذا الدليل على صفحات Amazon الحية في 2025. سأعرض لك CSS selectors الفعلية إلى جانب المخرجات المتوقعة — من دون نسخ ولصق من 2022.

قبل أن تبدأ

  • مستوى الصعوبة: متوسط (يفترض معرفة أساسية بـ Python)
  • الوقت المطلوب: نحو 30–45 دقيقة للشرح الكامل؛ ونحو 10 دقائق للسكريبر الأساسي
  • ما ستحتاجه: Python 3.9+، ومتصفح Chrome (لفحص صفحات Amazon)، وطرفية، واختياريًا إذا أردت مقارنة الطريقة بلا كود

الخطوة 1: أرسل أول طلب إلى Amazon

افتح أي صفحة منتج على Amazon في متصفحك وانسخ الرابط. سنبدأ بطلب بسيط عبر requests.get():

1import requests
2url = "https://www.amazon.com/dp/B0DGNFM9YJ"
3response = requests.get(url)
4print(response.status_code)
5print(response.text[:500])

عند تشغيله، ستحصل على الأغلب على رمز حالة 503 أو على صفحة تقول شيئًا مثل "To discuss automated access to Amazon data please contact…". هذا هو جدار الحماية WAF في Amazon وهو يلتقط سكربت Python الخاص بك. إن استخدام requests.get() فقط من دون ترويسات مناسبة يحقق معدل نجاح يقارب ضد Amazon.

من المتوقع أن ترى شيئًا مثل: 503 وصفحة حظر داخل HTML. هذا طبيعي — سنعالج المشكلة في الخطوة التالية.

الخطوة 2: إعداد ترويسات مخصصة ومحاكاة TLS

إضافة ترويسة User-Agent وحدها لم تعد كافية. تقارن Amazon بين HTTP headers وبصمة TLS الخاصة بك. فإذا ادعيت أنك Chrome 120 لكن handshake الخاص بك كشف مكتبة requests في Python، فسيتم .

الطريقة الأكثر موثوقية في 2025 هي استخدام curl_cffi مع محاكاة المتصفح:

1from curl_cffi import requests as cfreq
2headers = {
3    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
4    "Accept-Language": "en-US,en;q=0.9",
5    "Accept-Encoding": "gzip, deflate, br",
6    "Referer": "https://www.google.com/",
7    "DNT": "1",
8    "Connection": "keep-alive",
9    "Upgrade-Insecure-Requests": "1",
10}
11url = "https://www.amazon.com/dp/B0DGNFM9YJ"
12response = cfreq.get(url, headers=headers, impersonate="chrome124")
13print(response.status_code)
14print(len(response.text))

مع curl_cffi ومحاكاة Chrome 124، يقفز معدل النجاح إلى نحو — أي تحسن بمقدار 47 مرة مقارنة بـ requests العادي. ينبغي أن ترى الآن رمز حالة 200 واستجابة HTML أطول بكثير (أكثر من 100,000 حرف).

إذا استمر ظهور 503، جرّب قيمة impersonate مختلفة (مثل "chrome131") أو أضف تأخيرًا قصيرًا قبل إعادة المحاولة.

الخطوة 3: تحليل HTML واستخراج بيانات المنتج

الآن بعد حصولنا على HTML الكامل، لنستخرج البيانات باستخدام BeautifulSoup مع selectors 2025 المتحقق منها:

1from bs4 import BeautifulSoup
2soup = BeautifulSoup(response.text, "lxml")
3# عنوان المنتج
4title_el = soup.select_one("span#productTitle")
5title = title_el.get_text(strip=True) if title_el else None
6# السعر
7price_el = soup.select_one(
8    "div#corePriceDisplay_desktop_feature_div span.a-price .a-offscreen"
9)
10if not price_el:
11    price_el = soup.select_one("span.priceToPay .a-offscreen")
12if not price_el:
13    price_el = soup.select_one(".apexPriceToPay .a-offscreen")
14price = price_el.get_text(strip=True) if price_el else None
15# التقييم
16rating_el = soup.select_one("#acrPopover span.a-icon-alt")
17rating = rating_el.get_text(strip=True) if rating_el else None
18# عدد المراجعات
19reviews_el = soup.select_one("span#acrCustomerReviewText")
20reviews = reviews_el.get_text(strip=True) if reviews_el else None
21# التوفر
22avail_el = soup.select_one("div#availability span")
23availability = avail_el.get_text(strip=True) if avail_el else None
24# رابط الصورة الرئيسية
25img_el = soup.select_one("#landingImage")
26image_url = img_el.get("src") if img_el else None
27print(f"Title: {title}")
28print(f"Price: {price}")
29print(f"Rating: {rating}")
30print(f"Reviews: {reviews}")
31print(f"Availability: {availability}")
32print(f"Image: {image_url}")

المخرجات المتوقعة (مثال):

1Title: Apple AirPods Pro (2nd Generation) with USB-C
2Price: $189.99
3Rating: 4.7 out of 5 stars
4Reviews: 98,432 ratings
5Availability: In Stock
6Image: https://m.media-amazon.com/images/I/61SUj2...

لاحظ وجود عدة بدائل لاختيار السعر — فـ Amazon تستخدم حاويات مختلفة بحسب نوع المنتج، وحالة العرض، ونسخة اختبار A/B. وضع كل عملية استخراج داخل تحقق شرطي يمنع انهيار scraper عندما لا يطابق selector العنصر.

الخطوة 4: استخراج عدة منتجات من نتائج البحث

لبناء مجموعة بيانات حقيقية، ستبدأ عادة من صفحة نتائج البحث في Amazon، ثم تجمع ASINs، وبعدها تزور صفحة تفاصيل كل منتج.

1import time
2import random
3def get_search_asins(keyword, max_pages=1):
4    """جمع ASINs من نتائج بحث Amazon."""
5    asins = []
6    for page in range(1, max_pages + 1):
7        search_url = f"https://www.amazon.com/s?k={keyword}&page={page}"
8        resp = cfreq.get(search_url, headers=headers, impersonate="chrome124")
9        if resp.status_code != 200:
10            print(f"Search page {page} returned {resp.status_code}")
11            break
12        search_soup = BeautifulSoup(resp.text, "lxml")
13        results = search_soup.select('div[data-component-type="s-search-result"]')
14        for r in results:
15            asin = r.get("data-asin")
16            if asin:
17                asins.append(asin)
18        print(f"Page {page}: found {len(results)} products")
19        time.sleep(random.uniform(2, 5))  # تأخير مهذب
20    return asins
21asins = get_search_asins("wireless+earbuds", max_pages=2)
22print(f"Collected {len(asins)} ASINs")

كل ASIN يقابل رابط منتج نظيفًا: https://www.amazon.com/dp/{ASIN}. وهذا أكثر موثوقية من استخدام روابط نتائج البحث الكاملة، لأنها قد تحتوي على معاملات خاصة بجلسة المستخدم.

الخطوة 5: التعامل مع التصفح الصفحي والاستخراج على نطاق واسع

لنربط الآن جمع نتائج البحث واستخراج صفحة التفاصيل في خط أنابيب كامل:

1import pandas as pd
2def scrape_product(asin):
3    """استخراج صفحة تفاصيل منتج Amazon واحدة."""
4    url = f"https://www.amazon.com/dp/{asin}"
5    try:
6        resp = cfreq.get(url, headers=headers, impersonate="chrome124")
7        if resp.status_code != 200:
8            return None
9        soup = BeautifulSoup(resp.text, "lxml")
10        title_el = soup.select_one("span#productTitle")
11        price_el = (
12            soup.select_one("div#corePriceDisplay_desktop_feature_div span.a-price .a-offscreen")
13            or soup.select_one("span.priceToPay .a-offscreen")
14            or soup.select_one(".apexPriceToPay .a-offscreen")
15        )
16        rating_el = soup.select_one("#acrPopover span.a-icon-alt")
17        reviews_el = soup.select_one("span#acrCustomerReviewText")
18        avail_el = soup.select_one("div#availability span")
19        img_el = soup.select_one("#landingImage")
20        return {
21            "asin": asin,
22            "title": title_el.get_text(strip=True) if title_el else None,
23            "price": price_el.get_text(strip=True) if price_el else None,
24            "rating": rating_el.get_text(strip=True) if rating_el else None,
25            "reviews": reviews_el.get_text(strip=True) if reviews_el else None,
26            "availability": avail_el.get_text(strip=True) if avail_el else None,
27            "image_url": img_el.get("src") if img_el else None,
28            "url": url,
29        }
30    except Exception as e:
31        print(f"Error scraping {asin}: {e}")
32        return None
33# استخراج جميع ASINs التي جمعناها
34products = []
35for i, asin in enumerate(asins):
36    print(f"Scraping {i+1}/{len(asins)}: {asin}")
37    product = scrape_product(asin)
38    if product:
39        products.append(product)
40    time.sleep(random.uniform(2, 5))  # تأخير عشوائي بين الطلبات
41df = pd.DataFrame(products)
42print(f"\nScraped {len(df)} products successfully")
43print(df.head())

إن وجود تأخير عشوائي بين 2 و5 ثوانٍ أمرٌ مهم جدًا. فالتوقيت المنتظم تمامًا (مثل 3 ثوانٍ ثابتة في كل مرة) يبدو مريبًا بالنسبة لتحليل السلوك لدى Amazon. الفواصل العشوائية تحاكي أنماط التصفح البشرية.

الخطوة 6: حفظ بيانات Amazon المستخرجة إلى CSV

1df.to_csv("amazon_products.csv", index=False, encoding="utf-8-sig")
2print("Saved to amazon_products.csv")

الآن يجب أن يكون لديك ملف CSV نظيف يتضمن أعمدة ASIN والعنوان والسعر والتقييم وعدد المراجعات والتوفر ورابط الصورة ورابط المنتج. وهنا يتوقف معظم الشرح — لكن إذا كنت تبني سير عمل حقيقي، فـ CSV هو مجرد البداية.

التعمق في منع الحظر: كيف تُبقي scraper يعمل

الحظر هو يواجهها أي شخص يحاول استخراج منتجات Amazon باستخدام Python. يتضمن دفاع Amazon متعدد الطبقات تحليل سمعة IP، وبصمة TLS، وفحوصات بيئة المتصفح، وقياسات السلوك، وCAPTCHAs، وكشف الشذوذ المدعوم بالتعلم الآلي. فيما يلي استراتيجية متعددة الطبقات لمعالجة كل منها.

تدوير User-Agents والترويسات الكاملة

إبقاء User-Agent واحدًا ثابتًا يجعلك مكشوفًا بسرعة. بدّل بين سلاسل متصفحات حديثة:

1import random
2USER_AGENTS = [
3    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36",
4    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36",
5    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0",
6    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Safari/605.1.15",
7]
8def get_headers():
9    return {
10        "User-Agent": random.choice(USER_AGENTS),
11        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
12        "Accept-Language": "en-US,en;q=0.9",
13        "Accept-Encoding": "gzip, deflate, br",
14        "Referer": "https://www.google.com/",
15        "DNT": "1",
16        "Connection": "keep-alive",
17    }

تفصيل صغير يربك الكثيرين: يجب أن يتوافق Accept-Language مع الموقع الجغرافي المفترض لعنوان IP. إرسال Accept-Language: en-US من IP ألماني يُعد إشارة خطر.

محاكاة بصمة TLS باستخدام curl_cffi

تحدثنا عن هذا في الخطوة 2، لكنه يستحق التأكيد: هذه التقنية وحدها تحقق أكبر قفزة في معدل النجاح. يحقق requests في Python معدل نجاح يقارب 2% فقط على Amazon. مع محاكاة curl_cffi ترتفع النسبة إلى نحو 94%. هذا هو الفارق بين scraper يعمل وآخر معطّل.

1from curl_cffi import requests as cfreq
2# بدّل أهداف المحاكاة أيضًا
3BROWSERS = ["chrome120", "chrome124", "chrome131"]
4response = cfreq.get(
5    url,
6    headers=get_headers(),
7    impersonate=random.choice(BROWSERS),
8)

تدوير البروكسيات

إذا كنت ستُجري استخراجًا لأكثر من عدد قليل من الصفحات، فستحتاج إلى تدوير البروكسيات. تتبع Amazon عناوين IP وستحظر أي عنوان واحد يرسل عددًا كبيرًا من الطلبات.

1PROXIES = [
2    "http://user:pass@proxy1.example.com:8080",
3    "http://user:pass@proxy2.example.com:8080",
4    "http://user:pass@proxy3.example.com:8080",
5]
6proxy = random.choice(PROXIES)
7response = cfreq.get(
8    url,
9    headers=get_headers(),
10    impersonate="chrome124",
11    proxies={"http": proxy, "https": proxy},
12)

البروكسيات السكنية أكثر فاعلية من بروكسيات مراكز البيانات (لأن Amazon تحظر نطاقاتها بشكل استباقي)، لكنها أيضًا أغلى. في المشاريع الصغيرة، يمكنك البدء بـ ثم التوسع عند الحاجة.

تحديد المعدّل والتراجع الأُسّي

لا أرى أي مقال منافس يشرح هذا، لكنه ضروري. عندما تحصل على 503 أو CAPTCHA، لا تعِد المحاولة فورًا — فهذا طريق سريع إلى حظر دائم.

1import time
2import random
3def fetch_with_backoff(url, max_retries=3):
4    """جلب رابط مع تراجع أُسّي عند الفشل."""
5    for attempt in range(max_retries):
6        response = cfreq.get(
7            url,
8            headers=get_headers(),
9            impersonate=random.choice(BROWSERS),
10        )
11        if response.status_code == 200:
12            return response
13        # تراجع أُسّي مع قدر من العشوائية
14        wait = min(2 ** attempt + random.uniform(0, 1), 30)
15        print(f"Attempt {attempt+1} failed ({response.status_code}). Waiting {wait:.1f}s...")
16        time.sleep(wait)
17    return None  # استنفدنا كل المحاولات

المعادلة wait = min(2^attempt + jitter, max_delay) تضمن أن التأخيرات تكبر (2 ث، 4 ث، 8 ث...) لكنها لا تتجاوز حدًا معقولًا. كما أن العشوائية تمنع Amazon من بصمة نمط إعادة المحاولة.

استخدام Selenium أو Playwright كخطة بديلة للمحتوى المولّد عبر JS

بعض صفحات Amazon (خصوصًا التي تحتوي على أدوات تسعير ديناميكية أو محددات المتغيرات) تحتاج JavaScript لتكتمل. عندما يُرجع curl_cffi HTML غير مكتمل، يكون المتصفح بلا واجهة هو البديل:

1from playwright.sync_api import sync_playwright
2def scrape_with_browser(url):
3    with sync_playwright() as p:
4        browser = p.chromium.launch(headless=True)
5        page = browser.new_page()
6        page.goto(url, wait_until="domcontentloaded")
7        page.wait_for_timeout(3000)  # إتاحة الوقت لـ JS
8        html = page.content()
9        browser.close()
10        return html

هذا أبطأ — من 3 إلى 5 ثوانٍ لكل صفحة بدلًا من أقل من ثانية واحدة مع curl_cffi. استخدمه فقط عند الحاجة.

ومن واقع تجربتي، يعالج curl_cffi أكثر من 90% من صفحات منتجات Amazon من دون حاجة إلى متصفح.

ملخص منع الحظر

التقنيةالصعوبةالفعاليةمذكورة في معظم الشروحات؟
User-Agent مخصصسهلمنخفضة (Amazon تكتشف الأنماط)نعم
تدوير الترويسات الكاملةسهلمتوسطةنادرًا
محاكاة TLS (curl_cffi)متوسطعالية (~94% نجاح)شبه أبدًا
تدوير البروكسياتمتوسطعاليةباختصار، إن ذُكرت
تحديد المعدّل + التراجع الأُسّيسهلمتوسطةلا
بديل Selenium/Playwrightمتوسطعالية (للمحتوى JS)يُذكر ولا يُطبَّق

ما بعد CSV: تصدير بيانات Amazon إلى Google Sheets وAirtable والمزيد

كل شرح راجعته يتوقف عند تصدير CSV. لكن سير العمل الحقيقي يحتاج البيانات في Google Sheets أو قواعد البيانات أو أدوات مثل Airtable وNotion.

التصدير إلى Google Sheets باستخدام gspread

أولًا، أنشئ حساب خدمة Google (إعداد لمرة واحدة):

  1. انتقل إلى → APIs & Services → Credentials
  2. أنشئ Service Account وحمّل ملف JSON الخاص بالمفتاح
  3. احفظه في ~/.config/gspread/service_account.json
  4. شارك جدول البيانات المستهدف مع client_email الموجود في ملف JSON

ثم:

1import gspread
2from gspread_dataframe import set_with_dataframe
3gc = gspread.service_account()
4sh = gc.open("Amazon Scrape Data")
5worksheet = sh.sheet1
6set_with_dataframe(worksheet, df)
7print("Data exported to Google Sheets!")

هذا يكتب DataFrame بالكامل مباشرةً إلى Google Sheet — حيّ، قابل للمشاركة، وجاهز للوحة التحكم.

التخزين في SQLite للتحليل المحلي

لمجموعات البيانات الأكبر أو التتبع التاريخي، SQLite مثالية — لا إعداد لخادم، فقط ملف واحد:

1import sqlite3
2conn = sqlite3.connect("amazon_products.db")
3df.to_sql("products", conn, if_exists="append", index=False)
4print(f"Stored {len(df)} products in SQLite")
5# الاستعلام لاحقًا:
6historical = pd.read_sql_query(
7    "SELECT * FROM products WHERE price IS NOT NULL ORDER BY rowid DESC LIMIT 100",
8    conn,
9)

البديل بلا كود

إذا لم ترغب في صيانة سكربتات تصدير Python، فإن يوفّر تصديرًا مجانيًا إلى Google Sheets وAirtable وNotion وExcel وCSV وJSON — بما في ذلك حقول الصور التي تظهر مباشرة في Airtable وNotion. لا حاجة لإعداد gspread، ولا بيانات اعتماد API، ولا أي كود أصلًا. بالنسبة للفرق التي تحتاج وصول البيانات إلى أدواتها الحالية، فهذا يوفر وقتًا كبيرًا.

جدولة عمليات استخراج Amazon تلقائيًا — الفصل المفقود

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

Cron Jobs (Linux/macOS)

افتح crontab:

1crontab -e

أضف سطرًا لتشغيل scraper يوميًا الساعة 6 صباحًا:

10 6 * * * cd /path/to/amazon-scraper && /path/to/venv/bin/python scraper.py >> ~/scraper.log 2>&1

أو كل 6 ساعات:

10 */6 * * * cd /path/to/amazon-scraper && /path/to/venv/bin/python scraper.py >> ~/scraper.log 2>&1

Windows Task Scheduler

أنشئ ملف دفعي run_scraper.bat:

1@echo off
2cd /d "C:\path\to\amazon-scraper"
3call venv\Scripts\activate
4python scraper.py
5deactivate

ثم افتح Task Scheduler → Create Basic Task → حدّد المشغّل (Daily, Hourly) → Action: "Start a program" → اختر run_scraper.bat.

GitHub Actions (الخطة المجانية)

لجدولة سحابية من دون بنية تحتية:

1name: Amazon Scraper
2on:
3  schedule:
4    - cron: "0 6 * * *"  # يوميًا الساعة 6 صباحًا UTC
5  workflow_dispatch:       # تشغيل يدوي
6jobs:
7  scrape:
8    runs-on: ubuntu-latest
9    steps:
10      - uses: actions/checkout@v3
11      - name: Set up Python
12        uses: actions/setup-python@v4
13        with:
14          python-version: "3.11"
15      - name: Install dependencies
16        run: pip install -r requirements.txt
17      - name: Run scraper
18        run: python scraper.py
19      - name: Commit results
20        run: |
21          git config user.name 'GitHub Actions'
22          git config user.email 'actions@github.com'
23          git add data/
24          git diff --staged --quiet || git commit -m "Update scraped data"
25          git push

خزّن بيانات اعتماد البروكسي في GitHub Secrets، وستحصل على خط أنابيب استخراج آلي مجاني.

البديل بلا كود: Scheduled Scraper من Thunderbit

للـفرق التي لا تريد التعامل مع صياغة cron أو البنية السحابية، يوفّر Thunderbit أداة مدمجة. تصف الجدول الزمني بلغة طبيعية (مثل: "every day at 8 AM" أو "every Monday")، ثم تضيف روابط Amazon وتضغط "Schedule". لا طرفية، لا ملفات YAML، ولا خط نشر. هذا مفيد جدًا لفرق التجارة الإلكترونية التي تدير مراقبة مستمرة للأسعار أو المخزون.

Python DIY أم Scraper API أم No-Code: أي نهج تختار؟

هذا سؤال أراه باستمرار في المنتديات، ولا يقدم أي مقال متصدر إجابة منظمة. لذا إليك رأيي بصراحة:

المعيارPython + BS4/curl_cffiScraper API (ScraperAPI, Oxylabs)No-Code (Thunderbit)
وقت الإعداد30–60 دقيقة10–20 دقيقةنحو دقيقتين
الحاجة إلى البرمجةنعم (Python)نعم (استدعاءات API)لا
منع الحظر مدمجلا (تبنيه بنفسك)نعمنعم
التعامل مع JSفقط مع Selenium/Playwrightيختلف حسب المزودنعم (وضع Browser أو Cloud)
الجدولةيدوية (cron/السحابة)بعضها يوفّرهامدمجة
التكلفةمجاني (+ تكلفة البروكسي)30–100 دولار+ شهريًاخطة مجانية متاحة
الصيانةمرتفعة (selectors تتعطل)منخفضةشبه معدومة (الذكاء الاصطناعي يتكيّف)
الأنسب لـالمطورين الذين يريدون تحكمًا كاملًاالتوسع والموثوقية على نطاق كبيرالسرعة، غير المطورين، المستخدمين التجاريين

Python هو الخيار المناسب إذا كنت تريد التعلّم وتخصيص كل التفاصيل ولا تمانع الصيانة المستمرة. أما Scraper APIs فتتولى منع الحظر نيابةً عنك لكنها ما تزال تتطلب كودًا. وThunderbit هو الطريق الأسرع لفرق المبيعات أو التجارة الإلكترونية أو أي شخص يريد البيانات فقط — بلا selectors، بلا كود، وبلا صيانة عندما تغيّر Amazon HTML.

كيف يستخرج Thunderbit منتجات Amazon في خطوتين فقط

أنا متحيز قليلًا، بالطبع — فريقي هو من بنى هذا. لكن سير العمل فعلًا بهذه البساطة:

  1. ثبّت
  2. افتح صفحة نتائج بحث أو صفحة منتج في Amazon
  3. انقر "AI Suggest Fields" (أو استخدم قالب Amazon الجاهز)
  4. انقر "Scrape"

يقرأ ذكاء Thunderbit الاصطناعي الصفحة، ويتعرّف على بنية البيانات، ويستخرج كل شيء في جدول نظيف. يمكنك التصدير إلى Excel أو Google Sheets أو Airtable أو Notion مجانًا. والفائدة الحقيقية: عندما تغيّر Amazon HTML في الأسبوع القادم (وهذا سيحدث)، يتكيف الذكاء الاصطناعي في Thunderbit تلقائيًا. لا سكربتات مكسورة، ولا تحديثات selectors.

ولإغناء قوائم المنتجات ببيانات صفحات التفاصيل، تتيح لك ميزة Subpage Scraping في Thunderbit تتبع الروابط إلى صفحات المنتج تلقائيًا وجلب حقول إضافية مثل الصور والوصف والتنوعات — وهو أمر يتطلب كودًا إضافيًا كبيرًا في Python.

نصائح لإبقاء scraper الخاص بـ Python يعمل على المدى الطويل

إذا اخترت طريق Python، فإليك كيفية تقليل صداع الصيانة:

  • تحقق من selectors بانتظام. Amazon تغيّرها كثيرًا. احفظ هذه المقالة — سأحدّث جدول selectors مع تغيّر الأمور.
  • راقب معدل النجاح. تابع نسبة الاستجابات 200 مقابل 503/‏CAPTCHA. ضع تنبيهًا (حتى بريدًا إلكترونيًا بسيطًا) عندما ينخفض معدل النجاح تحت 80%.
  • خزّن HTML الخام. احفظ الاستجابة الكاملة للـ HTML إلى جانب البيانات المحللة. إذا تغيّرت selectors، يمكنك إعادة تحليل البيانات التاريخية من دون إعادة الاستخراج.
  • دوّر البروكسيات وUser-Agents كثيرًا. البصمات الثابتة تُكتشف خلال ساعات عند العمل على نطاق واسع.
  • استخدم التراجع الأُسّي. لا تُعد المحاولة فورًا بعد الحظر.
  • ضعه داخل حاوية Docker. غلّف scraper داخل Docker لتسهيل النشر ونقل البيئة.
  • أضف التحقق من صحة البيانات. تأكد أن الأسعار رقمية، والتقييمات بين 1 و5، والعناوين غير فارغة. أفاد أحد الفرق بانخفاض بعد إضافة طبقات التحقق.

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

الاعتبارات القانونية والأخلاقية عند استخراج Amazon

بما أن هذا السؤال يظهر في كل نقاش حول استخراج Amazon، فإليك ملخصًا سريعًا للمشهد القانوني:

  • استخراج البيانات المتاحة للعامة قانوني عمومًا في الولايات المتحدة. فقد أرست قضية التاريخية (2022) أن الوصول إلى البيانات العامة لا ينتهك CFAA. ومؤخرًا، عززت قضيتي (2024) و (2024) هذا المبدأ.
  • شروط خدمة Amazon تمنع الوصول الآلي. وهذا يُعد مسألة مدنية (خرق عقد)، لا جنائية. وقد فرّقت المحاكم عادة بين الأمرين.
  • Amazon v. Perplexity (2025) قضية نشطة تتعلق باستخراج صفحات Amazon بواسطة الذكاء الاصطناعي. وقد صدر أمر زجري أولي في مارس 2026. من المهم متابعتها.
  • التزم بالصفحات العامة. لا تستخرج محتوى محميًا بتسجيل الدخول، أو بيانات شخصية، أو أي شيء خلف المصادقة.
  • احترم معدلات الطلب. لا تُرهق خوادم Amazon. التأخير بين 2 و5 ثوانٍ بين الطلبات معقول.
  • استخدم البيانات بمسؤولية. اجمعها للتحليل، لا لإعادة نشر محتوى محمي بحقوق نشر.
  • استشر مستشارًا قانونيًا إذا كان الاستخدام تجاريًا واسع النطاق، خاصةً إن كنت في الاتحاد الأوروبي (حيث يطبَّق GDPR على البيانات الشخصية).

ولمزيد من التفاصيل، راجع دليلنا حول .

الخلاصة

أصبح لديك الآن scraper عامل بلغة Python لاستخراج Amazon مع selectors 2025 المتحققة، واستراتيجية متعددة الطبقات لتفادي الحظر تتجاوز بكثير مجرد "إضافة User-Agent"، وخيارات عملية للجدولة من أجل المراقبة المستمرة، وطرق تصدير تنقل بياناتك إلى Google Sheets أو قواعد البيانات أو أي أداة يستخدمها فريقك.

ملخص سريع:

  • Python + curl_cffi + BeautifulSoup تمنحك تحكمًا كاملًا ومعدل نجاح يقارب 94% عند دمجها مع محاكاة TLS
  • مكافحة الحظر تحتاج عدة طبقات: تدوير الترويسات، محاكاة TLS، تدوير البروكسيات، تحديد المعدّل، والتراجع الأُسّي
  • الجدولة تحوّل سكربتًا لمرة واحدة إلى خط مراقبة مستمر (cron، GitHub Actions، أو المجدول المدمج في Thunderbit)
  • التصدير بما يتجاوز CSV — إلى Google Sheets أو SQLite أو Airtable أو Notion — هو المكان الذي تكمن فيه القيمة الحقيقية للأعمال
  • Thunderbit يقدّم بديلًا بخطوتين لغير المطورين أو لأي شخص يفضّل قضاء وقته في تحليل البيانات بدلًا من تصحيح selectors

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

ولمزيد من المعلومات، راجع أدلتنا حول ، و، و. كما يمكنك مشاهدة شروحات خطوة بخطوة على .

استخراجًا موفقًا — ولعل selectors الخاصة بك تصمد حتى تحديث Amazon التالي.

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

1. لماذا يتم حظر scraper Amazon المكتوب بـ Python بعد بضع طلبات؟

تستخدم Amazon نظام دفاع من ست طبقات: تحليل سمعة IP، وبصمة TLS (JA3/JA4)، وكشف بيئة المتصفح، وقياسات سلوكية، وتحديات CAPTCHA، وكشف الشذوذ المعتمد على التعلم الآلي. إن سكربت requests بسيطًا مع ترويسة User-Agent فقط يحقق نجاحًا يقارب . تحتاج إلى محاكاة TLS (curl_cffi)، وتدوير كامل للترويسات، وتدوير البروكسيات، وتحديد المعدّل مع عشوائية في التأخير للحفاظ على وصول موثوق.

2. ما أفضل مكتبات Python لاستخراج منتجات Amazon في 2025؟

curl_cffi لطلبات HTTP مع محاكاة TLS (أكبر تحسن منفرد)، وBeautifulSoup4 مع lxml لتحليل HTML، وpandas لتنظيم البيانات وتصديرها، وSelenium أو Playwright كخطة بديلة للمحتوى الذي يتطلب JavaScript. تُستخدم Python من قبل من مطوري الاستخراج.

3. هل استخراج بيانات منتجات Amazon قانوني؟

استخراج البيانات المتاحة للعامة قانوني عمومًا في الولايات المتحدة، كما تؤيده أحكام مثل hiQ ضد LinkedIn وMeta ضد Bright Data. تحظر شروط خدمة Amazon الوصول الآلي، لكن المحاكم تفرّق بين مخالفة الشروط (مدنية) والمخالفة الجنائية. تجنب دائمًا المحتوى المحمي بتسجيل الدخول، واحترم معدلات الطلب، واستشر مستشارًا قانونيًا للاستخدام التجاري واسع النطاق.

4. هل يمكنني استخراج Amazon من دون كتابة أي كود؟

نعم. أدوات مثل تتيح لك استخراج منتجات Amazon في خطوتين فقط عبر إضافة Chrome. يتعرّف الذكاء الاصطناعي تلقائيًا على الحقول وينظّم البيانات، ويمكنك التصدير إلى Excel أو Google Sheets أو Airtable أو Notion مجانًا. وعندما تغيّر Amazon HTML، يتكيف Thunderbit تلقائيًا من دون أي تحديث يدوي.

5. كم مرة تغيّر Amazon محددات HTML، وكيف أحافظ على تحديث scraper؟

بشكل متكرر ومن دون إشعار. تشير تقارير مجتمع الاستخراج إلى أن من الزواحف تحتاج إصلاحات أسبوعية بسبب تغيّرات DOM. لتبقى متقدمًا، راقب معدل نجاح scraper، وخزّن HTML الخام لإعادة التحليل، وتحقق من selectors على صفحات حية بانتظام. أو استخدم أدوات مدعومة بالذكاء الاصطناعي مثل Thunderbit التي تتكيف تلقائيًا، فتزيل عنك عبء الصيانة.

المزيد للتعرّف عليه

جدول المحتويات

جرّب Thunderbit

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

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