يُعد Amazon منجمًا ذهبيًا لمراقبة الأسعار والبحث عن المنتجات، وهو في الوقت نفسه أحد أكثر المواقع تحصينًا على الويب. اكشط بياناته من عنوان IP تابع لمركز بيانات وسترى رموز CAPTCHA، وجدار "Robot Check"، وأسعارًا متغيرة، أو خطأ 503 خلال عدد قليل من الطلبات. يغطي هذا الدليل ما الذي يفحصه Amazon، واستراتيجية البروكسي التي تصمد أمامه، وانضباط الجلسات الذي يحافظ على دقة الأسعار وبيانات Buy Box.
بروكسيات مراكز البيانات طريق مسدود على Amazon عند أي حجم حقيقي — منافذ الخروج السكنية ذات ASN النظيفة هي ما يديم العملية. وبنفس القدر من الأهمية: طابِق بلد منفذ الخروج مع السوق الذي تكشطه. سحب أسعار amazon.de عبر منفذ خروج أمريكي يمنحك تسعير الولايات المتحدة وعملتها و Buy Box الخاص بها، مما يُفسد مجموعة بياناتك بهدوء. منفذ خروج جغرافي واحد لكل سوق.
يُخصِّص Amazon حسب الجلسة — الإضافة إلى السلة، وموقع التسليم، واختبارات الأسعار كلها تعيش في ملفات تعريف الارتباط. إذا قمت بتدوير عنوان IP في كل طلب، فإنك تُعيد ضبط ذلك السياق باستمرار وتحصل على أسعار وفائزين بـ Buy Box غير متسقين. احتفظ بـجلسة لاصقة طوال عملية كشط المنتج بالكامل، ثم قم بالتدوير عند حدود المنتج أو المهمة:
import itertools, time, random
from curl_cffi import requests
PROXIES = ["socks5h://USERNAME:[email protected]:913", "..."]
pool = itertools.cycle(PROXIES)
def scrape_product(asin, proxy):
# Same sticky exit for every page of this product
s = requests.Session(impersonate="chrome",
proxies={"http": proxy, "https": proxy})
detail = s.get(f"https://www.amazon.com/dp/{asin}")
offers = s.get(f"https://www.amazon.com/gp/offer-listing/{asin}")
return detail.text, offers.text
for asin in asins:
proxy = next(pool) # new sticky exit per product
if "Robot Check" in scrape_product(asin, proxy)[0]:
# flagged - back off, rotate, retry on a fresh exit
...
time.sleep(random.uniform(2.0, 5.0))
كما هو الحال مع كشط نتائج بحث Google، فإن الانضباط الذي يبقيك على قيد الحياة هو معدل الطلبات لكل منفذ خروج، وليس حجم المجموعة. عشوِّ الفواصل الزمنية، وحُدَّ من التزامن لكل عنوان IP، وعندما ترى "Robot Check" أو خطأ 503، توقّف عن استهداف ذلك المنفذ وتراجع — فإعادة المحاولة على عنوان IP موسوم يطيل الحظر فحسب.
استدعاء requests العادي يُرسل بصمة JA3 تَسِمك كأتمتة قبل أن يُطبَّق تقييم عنوان IP أصلًا. أرسل بصمة متصفح باستخدام curl_cffi (أعلاه) أو متصفحًا حقيقيًا — راجع تجاوز بصمات TLS باستخدام curl_cffi. إذا رمى Amazon جدار CAPTCHA يعمل بـ JS، فصعِّد إلى محرك متصفح حقيقي.
يحصل المستخدمون الجدد على 500MB عند التسجيل، بالإضافة إلى مكافأة على أول عملية شحن. العرض لفترة محدودة.