في عطلة نهاية الأسبوع الماضية، قضيت وقتًا طويلًا وأنا أرتشف القهوة وأجرّب أربع طرق مختلفة لـ استخراج Amazon Best Sellers. طريقتان نجحتا بشكل ممتاز، وإحداهما كادت تتسبب بحظر عنوان IP الخاص بي، بينما نجحت طريقة أخرى من أول محاولتين تقريبًا بخطوتين فقط. إليك كل ما تعلمته.
Amazon منصة عملاقة بكل معنى الكلمة — ، ، ونظام Best Sellers Rank (BSR) الذي يتحدث كل ساعة. إذا كنت تعمل على أبحاث منتجات FBA، أو تحليل التسعير التنافسي، أو تحاول رصد الاتجاهات قبل منافسيك، فبيانات Best Sellers تعتبر كنزًا حقيقيًا.
لكن إخراج هذه البيانات من Amazon إلى جدول بيانات؟ هنا يبدأ التحدي. جرّبت requests + BeautifulSoup، وSelenium، وواجهة scraping API، و (أداة AI web scraper بلا كود من تطويرنا) لأرى أي نهج ينجح فعلًا — وأيها سيتركني أمام صفحة CAPTCHA.
ما هي Amazon Best Sellers ولماذا ينبغي أن تهتم بها؟
Best Sellers Rank (BSR) من Amazon هو لوحة ترتيب مباشرة تُصنّف المنتجات بحسب حجم المبيعات داخل كل فئة. يمكنك اعتباره سباق شعبية يتجدد كل ساعة، ويعتمد على بيانات المبيعات الحديثة والتاريخية معًا. وتصف Amazon الأمر بهذه الصياغة:
"يعتمد احتساب Amazon Best Sellers على مبيعات Amazon ويتم تحديثه كل ساعة ليعكس المبيعات الحديثة والتاريخية لكل عنصر يُباع على Amazon." —
تعرض صفحة Best Sellers أفضل 100 منتج في كل فئة، موزعة على صفحتين، 50 منتجًا في كل صفحة. الصفحة الأولى تغطي الترتيب من #1 إلى #50، والصفحة الثانية من #51 إلى #100. وقد أكدت Amazon أن مشاهدات الصفحة ومراجعات العملاء لا تؤثر على BSR — فالمعيار الأساسي هنا هو المبيعات فقط.
من الذي يستفيد من هذه البيانات؟ بائعو التجارة الإلكترونية الذين يبحثون عن منتجات لـ FBA، وفرق المبيعات التي تبني ذكاءً تنافسيًا، وفرق العمليات التي تراقب اتجاهات التسعير، وباحثو السوق الذين يتابعون نمو الفئات. ومن واقع تجربتي، أي شخص يبيع على Amazon أو ينافسها ينتهي به الأمر إلى الحاجة لهذه البيانات داخل جدول بيانات.
لماذا نستخدم Python لاستخراج Amazon Best Sellers؟
البحث اليدوي عن المنتجات يستهلك وقتًا كبيرًا. أظهرت أن الموظفين يقضون 9.3 ساعات أسبوعيًا فقط في البحث عن المعلومات وجمعها. وفي فرق التجارة الإلكترونية، يعني ذلك ساعات من التنقل بين صفحات Amazon، ونسخ أسماء المنتجات وأسعارها، ثم لصقها في جداول البيانات — ثم إعادة كل هذا من جديد في الأسبوع التالي.
إليك نظرة سريعة على أهم حالات الاستخدام التي تجعل استخراج Best Sellers مفيدًا فعلًا:
| حالة الاستخدام | ما الذي تحصل عليه | من يستفيد |
|---|---|---|
| أبحاث منتجات FBA | تحديد المنتجات عالية الطلب ومنخفضة المنافسة عبر BSR وعدد المراجعات | بائعو Amazon، الدروبشبرز |
| متابعة التسعير التنافسي | تتبع تغيرات الأسعار عبر المنتجات الأعلى في فئتك | فرق التجارة الإلكترونية، محللو التسعير |
| مراقبة اتجاهات السوق | رصد الفئات الصاعدة والتغيرات الموسمية | مدراء المنتجات، باحثو السوق |
| توليد العملاء المحتملين | بناء قوائم بالعلامات التجارية الأكثر مبيعًا وخطوط منتجاتها | فرق المبيعات، التواصل مع الشركات |
| تحليل المنافسين | مقارنة منتجاتك مع روّاد الفئة | مدراء العلامات التجارية، فرق الاستراتيجية |
العائد واضح: أظهر شمل 2700 متخصص في التجارة أن أدوات الذكاء الاصطناعي توفّر لمتخصصي التجارة الإلكترونية في المتوسط . كما أن البائعين الذين يستخدمون تتبع الأسعار بشكل آلي يحتفظون بـ Buy Box مقابل 42% فقط لمن يتابعون يدويًا — أي زيادة مبيعات بنسبة 37% بفضل سرعة الاستجابة لتغيّر الأسعار.
4 طرق لاستخراج Amazon Best Sellers باستخدام Python: مقارنة سريعة
قبل أن ندخل في الشرح العملي خطوة بخطوة، إليك مقارنة جانبية كنت أتمنى لو كانت لدي قبل أن أبدأ التجربة. سيساعدك هذا الجدول على اختيار الطريقة الأنسب لحالتك:
| المعيار | requests + BS4 | Selenium | Scraping API (مثل Scrape.do) | Thunderbit (بلا كود) |
|---|---|---|---|---|
| سهولة الإعداد | متوسطة | عالية (driver، متصفح) | منخفضة (مفتاح API) | منخفضة جدًا (إضافة Chrome) |
| التعامل مع Lazy Loading | لا | نعم (محاكاة التمرير) | نعم (HTML مُعالج) | نعم (الذكاء الاصطناعي يتولى العرض) |
| مقاومة أنظمة الحظر | منخفضة (حظر IP) | متوسطة (قابلة للاكتشاف) | عالية (بروكسيات دوّارة) | عالية (وضع السحابة + المتصفح) |
| عبء الصيانة | مرتفع (تتغير selectors) | مرتفع (تحديثات driver + selectors) | منخفض | منخفض جدًا (الذكاء يتكيف مع تغيّر التخطيط) |
| التكلفة | مجانية | مجانية | مدفوعة (حسب الطلب) | خطة مجانية + خطط مدفوعة |
| الأفضل لـ | استخراج لمرة واحدة، التعلّم | صفحات تعتمد على JavaScript، جلسات تتطلب تسجيل دخول | الاستخدام على نطاق واسع / الإنتاج | غير المطورين، البحث السريع، المراقبة المتكررة |
إذا كنت تريد تعلم أساسيات Python scraping، فابدأ بالطريقة 1 أو 2. وإذا كنت تحتاج إلى موثوقية على مستوى الإنتاج، فاختر الطريقة 3. أما إذا كنت تريد النتائج بخطوتين فقط من دون كتابة أي كود، فانتقل مباشرة إلى الطريقة 4.
قبل أن تبدأ
- مستوى الصعوبة: مبتدئ إلى متوسط (بحسب الطريقة)
- الوقت المطلوب: حوالي 15 دقيقة لـ Thunderbit، وحوالي 45 دقيقة لطرق Python
- ما ستحتاج إليه: Python 3.8+ (للطُرق 1–3)، متصفح Chrome، (للطريقة 4)، ورابط صفحة فئة Amazon Best Sellers المستهدفة
الطريقة 1: استخراج Amazon Best Sellers باستخدام requests + BeautifulSoup
هذا هو الأسلوب الخفيف والمناسب للمبتدئين — لا أتمتة للمتصفح، فقط طلبات HTTP وتحليل HTML. كما أنه علّمني أكثر شيء عن دفاعات Amazon ضد scraping.
الخطوة 1: إعداد البيئة
ثبّت الحزم المطلوبة:
1pip install requests beautifulsoup4 pandas
ثم أضف الاستيرادات:
1import requests
2from bs4 import BeautifulSoup
3import pandas as pd
4import random
5import time
الخطوة 2: إرسال طلب مع ترويسات واقعية
Amazon تحظر الطلبات التي تبدو كأنها صادرة عن روبوتات. أبسط وسيلة دفاع هي استخدام User-Agent يحاكي متصفحًا حقيقيًا. إليك مثالًا يتضمن مجموعة من سلاسل User-Agent حديثة وواقعية (بحسب ، مارس 2026):
1USER_AGENTS = [
2 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
3 "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36",
4 "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:149.0) Gecko/20100101 Firefox/149.0",
5 "Mozilla/5.0 (Macintosh; Intel Mac OS X 15.7; rv:149.0) Gecko/20100101 Firefox/149.0",
6 "Mozilla/5.0 (Macintosh; Intel Mac OS X 15_7_5) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/26.0 Safari/605.1.15",
7]
8headers = {"User-Agent": random.choice(USER_AGENTS)}
9url = "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/"
10response = requests.get(url, headers=headers)
11print(response.status_code) # ينبغي أن تكون 200
إذا ظهر لك رمز 200، فهذا جيد. أما إذا ظهرت 503 أو تم تحويلك إلى صفحة CAPTCHA، فهذا يعني أن Amazon رصدت الطلب.
الخطوة 3: تحليل بيانات المنتجات باستخدام BeautifulSoup
افتح HTML الخاص بصفحة Amazon في أدوات المطوّر داخل المتصفح (زر الفأرة الأيمن → Inspect). ستجد أن حاويات المنتجات تستخدم المعرف gridItemRoot. وداخل كل حاوية ستجد اسم المنتج والسعر والتقييم والرابط.
1soup = BeautifulSoup(response.text, "html.parser")
2products = []
3for item in soup.find_all("div", id="gridItemRoot"):
4 title_tag = item.find("div", class_="_cDEzb_p13n-sc-css-line-clamp-3_g3dy1")
5 price_tag = item.find("span", class_="_cDEzb_p13n-sc-price_3mJ9Z")
6 link_tag = item.find("a", class_="a-link-normal")
7 title = title_tag.get_text(strip=True) if title_tag else "N/A"
8 price = price_tag.get_text(strip=True) if price_tag else "N/A"
9 url = "https://www.amazon.com" + link_tag["href"] if link_tag else "N/A"
10 products.append({"Title": title, "Price": price, "URL": url})
تحذير: أسماء الفئات التي تبدأ بـ
_cDEzb_هي hashes خاصة بـ CSS modules وتقوم Amazon بتجديدها دوريًا. أماgridItemRootوa-link-normalفهما أكثر ثباتًا، لكن يجب دائمًا التحقق من selectors عبر DevTools قبل تشغيل scraper.
الخطوة 4: التصدير إلى CSV
1df = pd.DataFrame(products)
2df.to_csv("amazon_best_sellers.csv", index=False)
3print(f"Scraped {len(products)} products")
ماذا تتوقع — وما الذي قد يفشل
في تجربتي، أعادت هذه الطريقة نحو 30 منتجًا بدلًا من 50. وهذه ليست مشكلة في الكود، بل بسبب lazy loading في Amazon. فحوالي 30 منتجًا فقط تُعرض عند التحميل الأولي للصفحة، أما البقية فتظهر بعد التمرير، وهذا يتطلب تنفيذ JavaScript وهو ما لا يستطيع requests التعامل معه.
قيود أخرى:
- قد يحدث حظر IP بسرعة إذا لم تستخدم تدوير البروكسيات (تم حجبي بعد نحو 15 طلبًا متتاليًا بسرعة)
- تتعطل CSS selectors عندما تُحدّث Amazon تخطيط الصفحة — وهذا يحدث باستمرار
- لا يوجد دعم تلقائي للتنقّل بين الصفحات
هذه الطريقة ممتازة لتعلّم scraping باستخدام Python، لكنها هشة للاستخدام الإنتاجي.
الطريقة 2: استخراج Amazon Best Sellers باستخدام Selenium
يحل Selenium مشكلة lazy loading عبر تشغيل متصفح حقيقي — إعدادُه أثقل، لكنه يجلب جميع المنتجات الخمسين في الصفحة.
الخطوة 1: تثبيت Selenium
1pip install selenium pandas
والخبر الجيد: بدءًا من Selenium 4.6+ لم تعد بحاجة إلى webdriver-manager. إذ يتولى Selenium Manager تنزيل driver تلقائيًا.
1from selenium import webdriver
2from selenium.webdriver.chrome.options import Options
3from selenium.webdriver.common.by import By
4from selenium.webdriver.common.keys import Keys
5import time
6import pandas as pd
7options = Options()
8options.add_argument("--headless=new")
9options.add_argument("--window-size=1920,1080")
10options.add_argument("--disable-blink-features=AutomationControlled")
11driver = webdriver.Chrome(options=options)
الخيار --headless=new (المقدّم في Chrome 109+) يستخدم نفس آلية العرض الموجودة في Chrome العادي، ما يجعل اكتشافه أصعب على Amazon.
الخطوة 2: التمرير لتجاوز الـ Lazy Loading
هذه هي الخطوة التي تبرر استخدام Selenium رغم عبء الإعداد. صفحة Amazon Best Sellers تعرض عادةً نحو 30 منتجًا فقط في البداية، والباقي يظهر بعد التمرير.
1def scroll_page(driver, scrolls=5, delay=2):
2 for _ in range(scrolls):
3 driver.find_element(By.TAG_NAME, "body").send_keys(Keys.PAGE_DOWN)
4 time.sleep(delay)
5driver.get("https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/")
6time.sleep(3)
7scroll_page(driver)
بعد التمرير، ينبغي أن تُعرض المنتجات الخمسون كلها داخل DOM. وجدت أن خمس مرات Page Down مع تأخير ثانيتين كانت كافية، لكن قد تحتاج إلى تعديلها حسب سرعة اتصالك.
الخطوة 3: استخراج بيانات المنتجات
1items = driver.find_elements(By.ID, "gridItemRoot")
2products = []
3for item in items:
4 try:
5 title = item.find_element(By.CSS_SELECTOR, "div._cDEzb_p13n-sc-css-line-clamp-3_g3dy1").text
6 except:
7 title = "N/A"
8 try:
9 price = item.find_element(By.CSS_SELECTOR, "span._cDEzb_p13n-sc-price_3mJ9Z").text
10 except:
11 price = "N/A"
12 try:
13 url = item.find_element(By.CSS_SELECTOR, "a.a-link-normal").get_attribute("href")
14 except:
15 url = "N/A"
16 products.append({"Title": title, "Price": price, "URL": url})
استخدام try/except مع كل حقل مهم جدًا — فبعض المنتجات قد تكون غير متوفرة أو تفتقد لبعض البيانات، ولا تريد أن يتسبب عنصر واحد مشكل في تعطيل عملية الاستخراج بالكامل.
الخطوة 4: التعامل مع تعدد الصفحات
تقسم Amazon أفضل 100 منتج إلى صفحتين بروابط مختلفة:
1urls = [
2 "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/",
3 "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/ref=zg_bs_pg_2_electronics?_encoding=UTF8&pg=2"
4]
5all_products = []
6for url in urls:
7 driver.get(url)
8 time.sleep(3)
9 scroll_page(driver)
10 # ... استخراج المنتجات كما في الأعلى ...
11 all_products.extend(products)
12driver.quit()
ماذا تتوقع
في تجربتي، استطاع Selenium التقاط جميع المنتجات الخمسين في كل صفحة — وهذا أفضل بوضوح من requests + BS4. لكن العيب أنه استغرق نحو 45 ثانية لكل صفحة (بما في ذلك التأخيرات أثناء التمرير)، كما تم رصدي بعد تشغيله مرات كثيرة من دون تدوير البروكسيات. كما أن Amazon قد تكتشف Selenium رغم خيارات تقليل الاكتشاف — وللاستخدام الجاد على نطاق واسع ستحتاج إلى إجراءات إضافية (راجع قسم خطة مكافحة الحظر أدناه).
مشكلات أخرى:
- قد تحدث أحيانًا عدم مطابقة في إصدارات WebDriver، رغم أن Selenium Manager قلّل هذا كثيرًا
- تحتاج CSS selectors إلى تحديث كلما غيّرت Amazon بنية DOM
- استهلاك الذاكرة مرتفع — كل مثيل للمتصفح يستهلك 200–400MB من RAM
الطريقة 3: استخراج Amazon Best Sellers باستخدام Scraping API
واجهات Scraping API هي خيار "دع شخصًا آخر يتولى الأجزاء الصعبة". خدمات مثل Scrape.do وOxylabs وScrapingBee تتكفل بتدوير البروكسيات، وعرض JavaScript، وإجراءات مكافحة الروبوتات — وكل ما عليك هو إرسال الرابط واستلام HTML أو JSON.
كيف تعمل
ترسل الرابط المستهدف إلى نقطة نهاية الـ API. تقوم الخدمة بعرض الصفحة عبر متصفح حقيقي على بنيتها التحتية، وتدور البروكسيات، وتتعامل مع CAPTCHA، ثم تعيد HTML نظيفًا. بعدها يمكنك تحليل HTML باستخدام BeautifulSoup كالمعتاد.
الخطوة 1: إرسال طلب عبر الـ API
إليك مثالًا باستخدام Scrape.do (الأسعار تبدأ من 29 دولارًا شهريًا مقابل 150,000 رصيد، والرصد = طلب واحد بغض النظر عن العرض):
1import requests
2from bs4 import BeautifulSoup
3api_token = "YOUR_API_TOKEN"
4target_url = "https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/"
5api_url = f"https://api.scrape.do?token={api_token}&url={target_url}&render=true&geoCode=us"
6response = requests.get(api_url)
7soup = BeautifulSoup(response.text, "html.parser")
من هنا، تكون عملية التحليل مماثلة تمامًا للطريقة 1 — نفس selectors، ونفس منطق الاستخراج.
نظرة واقعية على الأسعار
إليك ما تفرضه أشهر واجهات API لكل 1000 طلب من Amazon بأفضل سعر متاح:
| المزوّد | التكلفة لكل 1000 طلب | ملاحظات |
|---|---|---|
| Scrape.do | حوالي $0.19 | سعر ثابت، بلا مضاعفات رصيد |
| Oxylabs | حوالي $1.80 | مضاعف ×5 لعرض JavaScript |
| ScrapingBee | حوالي $4.90 | مضاعفات ×5 إلى ×25 للميزات المميزة |
| Bright Data | $5.00+ | أكثر البيانات شمولًا (686 حقلًا/منتج) لكن الأبطأ (~66 ثانية/طلب) |
الإيجابيات والسلبيات
الإيجابيات: موثوقية عالية ( على Amazon لدى أفضل المزوّدين)، لا حاجة لصيانة driver، يتعامل مع أنظمة الحظر تلقائيًا، وقابل للتوسع جيدًا.
السلبيات: الدفع يكون لكل طلب، والتكاليف تتراكم مع التوسع، وما زلت بحاجة إلى كتابة كود التحليل، كما تظل عرضة لتغيّر CSS selectors. بالنسبة إلى 100,000 صفحة شهريًا، الفارق في التكلفة كبير جدًا: البناء الداخلي يكلف تقريبًا — أي توفير بنسبة 71%.
نقطة التعادل تكون عادة بين 500 ألف ومليون طلب شهريًا. وما دون ذلك، تكون وفورات الوقت باستخدام الـ API أكبر بكثير من التكلفة.
الطريقة 4: استخراج Amazon Best Sellers باستخدام Thunderbit (من دون Python)
للتوضيح فقط: أنا أعمل في Thunderbit، لذا خذ هذا القسم مع هذا السياق. ومع ذلك، اختبرت الطرق الأربع فعلًا بشكل متتابع، وكان الفرق في سرعة الحصول على البيانات واضحًا جدًا.
هو AI web scraper يعمل كإضافة على Chrome. الفكرة الأساسية: بدلًا من كتابة CSS selectors أو كود Python، يقوم الذكاء الاصطناعي بقراءة الصفحة وتحديد البيانات المطلوب استخراجها. وبالنسبة إلى Amazon Best Sellers تحديدًا، لدى Thunderbit قوالب جاهزة تعمل بنقرة واحدة.
الخطوة 1: تثبيت Thunderbit Chrome Extension
انتقل إلى ثم اضغط "Add to Chrome." سجّل حسابًا مجانيًا — فالباقة المجانية تمنحك عددًا كافيًا من الرصيد لتجربته.
الخطوة 2: افتح صفحة Amazon Best Sellers
افتح أي صفحة فئة من Amazon Best Sellers في Chrome. على سبيل المثال:
https://www.amazon.com/Best-Sellers-Electronics/zgbs/electronics/
الخطوة 3: اضغط على "AI Suggest Fields"
افتح الشريط الجانبي لـ Thunderbit ثم اضغط "AI Suggest Fields." سيحلل الذكاء الاصطناعي بنية الصفحة ويقترح أعمدة مثل: اسم المنتج، السعر، التقييم، رابط الصورة، البائع، رابط المنتج، والترتيب. وفي تجربتي، تعرّف على جميع الحقول ذات الصلة خلال نحو 3 ثوانٍ.

يمكنك إعادة تسمية الأعمدة أو حذفها أو إضافة أعمدة جديدة. كما يمكنك إضافة prompts مخصصة لكل حقل — مثلًا: "صنّف المنتج إلى Electronics/Apparel/Home" لإضافة وسم فئة لكل منتج.
الخطوة 4: اضغط على "Scrape"
اضغط زر "Scrape". سيملأ Thunderbit جدولًا منظمًا بجميع بيانات المنتجات الموجودة في الصفحة. وفي وضع السحابة، يمكنه معالجة ما يصل إلى 50 صفحة دفعة واحدة بالتوازي، مع التعامل تلقائيًا مع lazy loading وتعدد الصفحات.
الخطوة 5: التصدير مجانًا
اضغط "Export" واختر الوجهة: Excel أو Google Sheets أو Airtable أو Notion. جميع عمليات التصدير مجانية في كل الخطط — من دون رسوم خفية.

استغرقت العملية بالكامل نحو 90 ثانية من لحظة فتح الصفحة إلى الحصول على جدول بيانات كامل. وللمقارنة، استغرقت الطريقة 1 حوالي 20 دقيقة (بما في ذلك إصلاح مشكلة الـ lazy loading)، والطريقة 2 نحو 35 دقيقة (بما في ذلك إعداد Selenium)، والطريقة 3 حوالي 15 دقيقة (بما في ذلك إنشاء حساب API).
لماذا Thunderbit مناسب جدًا لـ Amazon؟
لأن الذكاء الاصطناعي يقرأ الصفحة من جديد في كل مرة، فإنه يتكيف تلقائيًا مع تغييرات التخطيط — من دون الحاجة إلى صيانة CSS selectors. وهذا يعالج مباشرةً أكثر الشكاوى شيوعًا في منتديات scraping: "لن يكفي scraper عادي، ستحتاج إلى الكثير من 'الالتقاطات' لمعالجة تغييرات العناصر." عندما تغيّر Amazon بنية DOM الخاصة بها — وهو أمر يحدث باستمرار — لن تضطر إلى تعديل أي شيء.
وضع الـ cloud scraping يتولى تدوير البروكسيات، والعرض، وإجراءات مكافحة الحظر بشكل شفاف. وللمستخدمين الذين يريدون حلًا يعمل مباشرة، فهذا يزيل صداع مكافحة الحظر بالكامل.
خطة مكافحة الحظر: كيف تتجنب أن تحظر Amazon وصولك
أنظمة الكشف عن الروبوتات في Amazon صارمة جدًا. تعرّض عنوان IP الخاص بي للحظر المؤقت أثناء الاختبار، ويذكر مستخدمو المنتديات الشيء نفسه: "أخطاء في كل مكان، Amazon بدأت تعيد توجيهي إلى الصفحة الرئيسية." إذا كنت ستسلك طريق Python (الطرق 1–3)، فهذا القسم بالغ الأهمية.
إليك استراتيجية متعددة الطبقات، مرتبة من الأساسية إلى المتقدمة:
1. تدوير سلاسل User-Agent
إرسال نفس User-Agent مرارًا يعد علامة تحذير. استخدم مجموعة السلاسل الخمس أو أكثر من مثال الطريقة 1، واختر واحدة عشوائيًا لكل طلب:
1headers = {"User-Agent": random.choice(USER_AGENTS)}
2. أضف فترات تأخير عشوائية بين الطلبات
الفواصل الثابتة يسهل اكتشافها (الأنماط). الأفضل استخدام فترات عشوائية:
1time.sleep(random.uniform(2, 5))
وجدت أن الفاصل بين 2 و5 ثوانٍ بين الطلبات أبقى عملي بعيدًا عن الرصد في الدُفعات الصغيرة (أقل من 50 طلبًا). أما في التشغيلات الأكبر، فرفعه إلى 3–7 ثوانٍ يكون أفضل.
3. استخدم تدوير البروكسيات
هذه هي النقطة الأهم. تُظهر أن البروكسيات السكنية تحقق في المتوسط نحو 94% نجاح على Amazon، مقابل نحو 59% للبروكسيات الخاصة بمراكز البيانات — فرق يبلغ 35 نقطة مئوية. يعتمد نظام الكشف لدى Amazon على بصمة TLS، وتحليل السلوك، وتحديد المعدل لكل IP، لذا يتم رصد عناوين IP التقليدية الخاصة بمراكز البيانات خلال ثوانٍ.
البروكسيات السكنية أغلى ($2–$12 لكل GB حسب المزوّد)، لكنها أكثر موثوقية بشكل كبير. مثال:
1proxies = {
2 "http": "http://user:pass@residential-proxy.example.com:8080",
3 "https": "http://user:pass@residential-proxy.example.com:8080"
4}
5response = requests.get(url, headers=headers, proxies=proxies)
4. تعزيز بصمة المتصفح في Selenium
1options.add_argument('--disable-blink-features=AutomationControlled')
2options.add_experimental_option("excludeSwitches", ["enable-automation"])
3options.add_experimental_option('useAutomationExtension', False)
4# بعد تهيئة driver، أزل وسم navigator.webdriver
5driver.execute_cdp_command('Page.addScriptToEvaluateOnNewDocument', {
6 'source': "Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"
7})
5. إدارة الجلسات والكوكيز
الاحتفاظ بالكوكيز عبر الطلبات يجعل scraper يبدو أقرب إلى مستخدم حقيقي:
1session = requests.Session()
2# زر الصفحة الرئيسية أولًا للحصول على كوكيز واقعية
3session.get("https://www.amazon.com", headers=headers)
4time.sleep(2)
5# ثم اسحب الصفحة المستهدفة
6response = session.get(target_url, headers=headers)
6. متى تتجاوز هذه المتاعب بالكامل
إذا كنت لا تريد إدارة أي من هذا، فإن cloud scraping في Thunderbit يتولى تدوير البروكسيات والعرض وإجراءات مكافحة الحظر بشفافية. كما أن Scraping APIs تتكفل بمعظم هذه الأمور افتراضيًا. ومن واقع تجربتي، فإن الوقت الذي يُهدر في حل مشكلات الحظر يتجاوز غالبًا الوقت اللازم لكتابة كود الاستخراج نفسه — لذلك فإن نهج "يعمل مباشرة" يملك عائدًا حقيقيًا.
إثراء الصفحات الفرعية: استخراج صفحات تفاصيل المنتج للحصول على بيانات أغنى
صفحة Best Sellers تعرض معلومات أساسية فقط — العنوان، السعر، التقييم، والترتيب. لكن القيمة الحقيقية لأبحاث FBA تكمن في صفحات تفاصيل المنتج الفردية. إليك ما يفوتك إذا اكتفيت بصفحة القائمة:
| الحقل | صفحة القائمة | صفحة تفاصيل المنتج |
|---|---|---|
| اسم المنتج | ✅ | ✅ |
| السعر | ✅ | ✅ |
| التقييم | ✅ | ✅ |
| ترتيب BSR | ✅ | ✅ (مع ترتيبات الفئات الفرعية) |
| العلامة التجارية | ❌ | ✅ |
| ASIN | ❌ | ✅ |
| تاريخ الإتاحة لأول مرة | ❌ | ✅ |
| الأبعاد/الوزن | ❌ | ✅ |
| عدد البائعين | ❌ | ✅ |
| ميزات بنقاط | ❌ | ✅ |
| مالك Buy Box | ❌ | ✅ |
حقل "تاريخ الإتاحة لأول مرة" مفيد بشكل خاص — لأنه يوضح منذ متى كان المنتج موجودًا في السوق، وهو مؤشر مهم لتحليل المنافسة. ومعرفة عدد البائعين ومالك Buy Box تساعدك على تقييم ما إذا كانت الفئة تستحق الدخول أصلًا (إذا كانت Amazon نفسها تملك أكثر من 30% من حصة Buy Box، فإن المنافسة تصبح شديدة الصعوبة).
النهج باستخدام Python: المرور على روابط المنتجات
بعد جمع روابط المنتجات من صفحة القائمة، كرر المرور على كل رابط مع تأخير:
1for product in products:
2 time.sleep(random.uniform(3, 6))
3 detail_response = session.get(product["URL"], headers={"User-Agent": random.choice(USER_AGENTS)})
4 detail_soup = BeautifulSoup(detail_response.text, "html.parser")
5 # استخراج العلامة التجارية
6 brand_tag = detail_soup.find("a", id="bylineInfo")
7 product["Brand"] = brand_tag.get_text(strip=True) if brand_tag else "N/A"
8 # استخراج ASIN من مصدر الصفحة أو الرابط
9 # استخراج تاريخ الإتاحة لأول مرة من جدول تفاصيل المنتج
10 # ... حقول إضافية ...
تحذير مهم: زيارة 100 صفحة منتج منفصلة ترفع خطر الحظر بشكل ملحوظ. لذا احسب حسابك لتدوير البروكسيات وفترات التأخير الأطول.
نهج Thunderbit: استخراج الصفحات الفرعية بنقرة واحدة
بعد استخراج صفحة القائمة إلى جدول، اضغط "Scrape Subpages" في Thunderbit. سيزور الذكاء الاصطناعي كل رابط منتج ويثري الجدول بأعمدة إضافية — العلامة التجارية، ASIN، المواصفات، الميزات — تلقائيًا. من دون أي كود إضافي أو selectors أو إعدادات. وهذا مفيد خصوصًا لفرق التجارة الإلكترونية التي تحتاج الصورة الكاملة لاتخاذ قرارات التوريد، لكنها لا تريد كتابة أو صيانة محلل لصفحات التفاصيل.
أتمتة الاستخراج المتكرر: راقب Best Sellers بمرور الوقت
الاستخراج لمرة واحدة مفيد، لكن المراقبة المستمرة هي حيث تكمن الميزة التنافسية الحقيقية. تتبع المنتجات الصاعدة والهابطة، ورصد الاتجاهات مبكرًا، ومتابعة تغيّر الأسعار عبر أسابيع أو أشهر — هذا ما يميز البحث العابر عن اتخاذ القرار المبني على البيانات.
نهج Python: الجدولة باستخدام Cron
على Linux/Mac، يمكنك جدولة سكربت Python باستخدام cron. إليك إدخال crontab لاستخراج يومي الساعة 8 صباحًا:
10 8 * * * /usr/bin/python3 /home/user/amazon_scraper.py >> /home/user/logs/scrape.log 2>&1
ولإجراء استخراج أسبوعي كل يوم اثنين الساعة 9 صباحًا:
10 9 * * 1 /usr/bin/python3 /home/user/amazon_scraper.py >> /home/user/logs/scrape.log 2>&1
على Windows، استخدم Task Scheduler لتحقيق الأمر نفسه. وإذا أردت الجدولة المستمرة من دون إبقاء اللابتوب يعمل، فقم بالنشر على VPS أو AWS Lambda — مع ملاحظة أن ذلك يضيف تعقيدًا بنيويًا.
أضف تسجيلًا للأحداث وإشعارات عند الأخطاء لاكتشاف التشغيلات الفاشلة. لا شيء أسوأ من أن تكتشف أن scraper توقف بصمت قبل أسبوعين.
نهج Thunderbit: Scheduled Scraper بلغة بسيطة
تتيح لك ميزة Scheduled Scraper في Thunderbit وصف التكرار بلغة طبيعية — اكتب "every Monday at 9am" أو "every day at 8am" وسيفهم الذكاء الاصطناعي الجدول. يتم تشغيل عمليات الاستخراج على خوادم Thunderbit السحابية (من دون الحاجة إلى تشغيل متصفح أو جهاز)، وتُصدَّر البيانات تلقائيًا إلى Google Sheets أو Airtable. وهذا يخلق لوحة متابعة مباشرة من دون إدارة خوادم — وهو مثالي لفرق العمليات التي تريد رؤية مستمرة من دون عبء DevOps.
اعتبارات قانونية وأخلاقية عند استخراج بيانات Amazon
لستُ محاميًا، وهذا ليس استشارة قانونية. لكن تجاهل الجانب القانوني في شرح scraping سيكون تصرفًا غير مسؤول — فمستخدمو المنتديات يثيرون بوضوح مخاوف شروط الاستخدام، ولسبب وجيه.
ملف robots.txt الخاص بـ Amazon: اعتبارًا من 2026، يحتوي robots.txt لدى Amazon على أكثر من 80 مسارًا محظورًا، لكن /gp/bestsellers/ ليس محظورًا صراحةً بالنسبة إلى user agents العادية. ومع ذلك، فإن أكثر من 35 user agents خاصة بالذكاء الاصطناعي (ClaudeBot وGPTBot وScrapy وغيرها) تتلقى حظرًا عامًا Disallow: /. لكن غياب الحظر الصريح لا يعني أن Amazon تؤيد scraping.
شروط استخدام Amazon: تنص الخاصة بـ Amazon (المحدثة في مايو 2025) بوضوح على حظر "استخدام أي عملية أو تقنية آلية للوصول إلى أي جزء من موقع Amazon الإلكتروني أو الحصول عليه أو نسخه أو مراقبته" من دون إذن كتابي. هذا ليس مجرد افتراض نظري — فقد في نوفمبر 2025 بسبب الوصول الآلي غير المصرح به وحصلت على أمر قضائي أولي.
سابقة hiQ v. LinkedIn: في (الدائرة التاسعة، 2022)، رأت المحكمة أن استخراج البيانات المتاحة للعامة لا يُخالف على الأرجح قانون CFAA. لكن hiQ انتهت في النهاية بتسوية والتزام بالتوقف عن scraping — أي إن الفوز في CFAA لا يحميك من دعاوى خرق العقد.
إرشادات عملية:
- استخرج فقط البيانات المتاحة للعامة (الأسعار، BSR، عناوين المنتجات — وليس البيانات الشخصية)
- احترم معدلات الطلب ولا تُرهق الخوادم
- استخدم البيانات لأغراض ذكاء تنافسي مشروعة
- استشر مستشارك القانوني قبل الاستخراج على نطاق واسع
- كن على دراية بأن لديها الآن تشريعات خصوصية شاملة
يستخدم cloud scraping في Thunderbit أنماط طلبات شبيهة بالمتصفح العادي، لكن يجب عليك دائمًا التأكد من الامتثال مع مستشارك القانوني.
أي طريقة ينبغي أن تستخدم؟ دليل قرار سريع
الخلاصة السريعة:
- "أنا أتعلم Python وأريد مشروعًا في عطلة نهاية الأسبوع." → الطريقة 1 (requests + BeautifulSoup). ستتعلم الكثير عن طلبات HTTP، وتحليل HTML، ودفاعات Amazon ضد الروبوتات.
- "أحتاج إلى استخراج صفحات تعتمد على JavaScript أو جلسات مسجّلة الدخول." → الطريقة 2 (Selenium). هو أثقل، لكنه يتعامل مع المحتوى الديناميكي.
- "أشغّل عمليات استخراج على نطاق إنتاجي." → الطريقة 3 (Scraping API). دع شخصًا آخر يدير البروكسيات والعرض. يصب في مصلحة الـ APIs عندما يكون الحجم أقل من 500 ألف طلب شهريًا.
- "لست مطورًا وأريد البيانات خلال دقيقتين." → الطريقة 4 (). لا كود، لا selectors، لا صيانة.
- "أحتاج إلى مراقبة مستمرة من دون إدارة خوادم." → Thunderbit Scheduled Scraper. اضبطه وانسَه.
الخاتمة وأهم النتائج
بعد عطلة نهاية أسبوع كاملة من الاختبار، هذه هي الخلاصة الحقيقية:
requests + BeautifulSoup ممتاز للتعلّم، لكن محدودية الـ lazy loading (فقط نحو 30 من أصل 50 منتجًا) وهشاشة CSS selectors تجعله غير عملي للاستخدام الإنتاجي.
Selenium يحل مشكلة الـ lazy loading ويجلب جميع المنتجات الخمسين في كل صفحة، لكنه بطيء، ويستهلك الذاكرة، ولا يزال قابلًا للاكتشاف من أنظمة الحظر لدى Amazon.
Scraping APIs توفر أفضل موثوقية للاستخراج على مستوى الإنتاج — على Amazon — لكن التكلفة تتراكم، وما زلت تحتاج إلى كتابة كود التحليل.
Thunderbit قدّم أسرع وقت للوصول إلى البيانات بفارق واضح. الذكاء الاصطناعي يتعامل مع تغييرات التخطيط، والـ lazy loading، وتعدد الصفحات، وإجراءات مكافحة الحظر من دون أي إعداد. بالنسبة للمستخدمين غير التقنيين أو الفرق التي تحتاج بيانات متكررة من دون عبء DevOps، فهو الخيار الأكثر عملية.
والدرس الأكبر؟ دفاعات Amazon ضد الروبوتات وتغييرات التخطيط المتكررة تعني أن الحلول التي لا تحتاج صيانة توفّر أكبر قدر من الوقت على المدى الطويل. فكل ساعة تقضيها في تصحيح selectors المعطلة وتدوير البروكسيات هي ساعة لا تقضيها في التحليل الحقيقي.
هل تريد تجربة النهج بلا كود؟ تمنحك رصيدًا كافيًا لاستخراج بضع فئات من Best Sellers ورؤية النتائج بنفسك. تفضّل طريق Python؟ الأمثلة البرمجية أعلاه ستضعك على الطريق. في كلتا الحالتين، ستحصل على بيانات Amazon Best Seller داخل جدول بيانات بدلًا من التحديق في تبويب المتصفح.
لمزيد من المعلومات حول أساليب web scraping، اطلع على أدلتنا حول ، و، و. ويمكنك أيضًا مشاهدة شروحات خطوة بخطوة على .
اعرف المزيد