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

تعلم كيف تخرّب بيانات منتجات الأمازون بما في ذلك الأسعار، والاستعراضات، والتربوات التي تستخدم شركات سكنية. Compython and Node.js code examples with anti-detection strategies.

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

لماذا بيانات منتجات "سكرابي أمازون"؟

وتستضيف الأمازون أكثر من 350 مليون منتج عبر عشرات الأسواق في جميع أنحاء العالم. وبالنسبة للأعمال التجارية التجارية الإلكترونية، فإن هذه البيانات لا تقدر بثمن: تسعير المنافسين، ووصف المنتجات، واستعراضات العملاء، وأفضل شركة سيلر رانك، وإشارات الجرد يمكن أن تؤدي جميعها إلى اتخاذ قرارات أذكى. سواء كنت تبني أداة رصد الأسعار(أ) إن إجراء بحوث في الأسواق، أو تدريب نموذج " AI " ، بيانات منتجات الأمازون هي أحد الأهداف ذات القيمة العليا على الشبكة العالمية.

التحدي هو أن (أمازون) يستثمر بشدة في دفاعات مضادة للدبابات بدون الإستراتيجية البديلة الصحيحة، الخردة الخاصة بك سوف تضرب CAPHAs، لبنات IP، والاستجابات المضللة في غضون دقائق. هذا الدليل يمشيك من خلال الهيكل، والرمز، والتشكيلات العميلة اللازمة لتخريد الأمازون بشكل موثوق به على نطاق واسع.

حماية الأمازون المضادة للدبابات

قبل كتابة خط واحد من الشفرة، تحتاج إلى فهم ما أنت ضد. وتستخدم الأمازون نظاما للكشف مطبقا يحلل كل طلب وارد.

طلب الطباعة

(أمازون) يفتش عناوين (هيتيم) وبصمات (تي إل إس) ويطلب الأوامر الطلبات المفقودة من رؤساء المصفوفين العاديين أو باستخدام توقيعات الأحذية المعروفة يتم رفعها فورا. The Accept-Language.. Accept-Encodingو User-Agent ويجب أن يكون الرعاة متسقين وواقعيين.

التحليل السلوكي

ولا يمكن لأي إنسان أن يحقق، أو يتبع أنماطاً يمكن التنبؤ بها (مثلاً نظام المعلومات المسبقة عن علم المتتابع)، مما يحد من معدل إطلاق النار. (أمازون) يتتبع سلوك الدورة عبر طلبات متعددة لذا يجب أن يتصرف كل شخص كمتسوق حقيقي

CAPTCHA Challenges

When Amazon suspects automated traffic, it serves a CAPTCHA page instead of product data. ويحصل شركاء التنفيذ المقيمين على عدد أقل بكثير من شركاء التنفيذ في مراكز البيانات لأنهم يتقاسمون نفس مجمعات شركاء التنفيذ مثل متسوقي الأمازون الحقيقيين. لنظرة أعمق لأساليب الكشف كَمْ نُظُم مضادة للدباباتِ تَكتشفُ المحترفين.

الوجبات الرئيسية: تعتبر الوكلاء المقيمين الذين يتناوبون على نحو سليم أمراً أساسياً لتخريد الأمازون المستمر. سيُغلق عملاء مركز البيانات خلال ساعات

البيانات التي يمكنك استخراجها من الأمازون

البيانات التي يمكنك استخراجها من الأمازون
نقطة البياناتالمصدرالقضية
عنوان المنتجات والصور والوصفتوزيع المنتجاتبناء الكتالوج، تحليل المحتوى
السعر الحالي، سعر الصفقة، السعر المدرجتفاصيل المنتجات/العرضرصد الأسعار وتجديدها
استعراضات وتقييمات العملاءصفحات الاستعراضتحليل الاستشعار، بحوث المنتجات
Best Sellers Rank (BSR)توزيع المنتجاتتقدير الطلب على الأسواق
بائع صندوق، معلومات الشحنتوزيع المنتجاتتعقب الشركات
نتائج البحثصفحات نتائج البحثSEO and advertising optimization
الهيكل الهرمي للفئةنواة الحشدرسم خرائط للتحصين

جهزوا جماعتكم

بوابة (بروكسي هات) السكنية توفر التنوع في IP والتجهيز الجغرافي اللازم لخردة الأمازون اتصلوا عبر بواباتنا وتناوبوا شركاء التنفيذ تلقائياً على كل طلب أو يحتفظون بجلسات ملصقة عند الحاجة

الأساس

# HTTP proxy
http://USERNAME:PASSWORD@gate.proxyhat.com:8080
# With geo-targeting (US Amazon)
http://USERNAME-country-US:PASSWORD@gate.proxyhat.com:8080
# With sticky session (maintain same IP for a browsing session)
http://USERNAME-session-amz001:PASSWORD@gate.proxyhat.com:8080

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

Python Implementation

هنا كشطة (بيثون) كاملة لبيانات منتجات الأمازون (بروكسي هات) (بايتون) إلى جانب الطلبات والشوربة الجميلة

المنتج الأساسي

import requests
from bs4 import BeautifulSoup
import random
import time
import json
PROXY_URL = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
USER_AGENTS = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:125.0) Gecko/20100101 Firefox/125.0",
]
def get_amazon_product(asin, marketplace="com"):
    """Scrape product data from Amazon by ASIN."""
    url = f"https://www.amazon.{marketplace}/dp/{asin}"
    headers = {
        "User-Agent": random.choice(USER_AGENTS),
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
        "Accept-Language": "en-US,en;q=0.9",
        "Accept-Encoding": "gzip, deflate, br",
        "Connection": "keep-alive",
    }
    proxies = {
        "http": PROXY_URL,
        "https": PROXY_URL,
    }
    response = requests.get(url, headers=headers, proxies=proxies, timeout=30)
    if response.status_code != 200:
        return None
    soup = BeautifulSoup(response.text, "html.parser")
    product = {
        "asin": asin,
        "title": extract_title(soup),
        "price": extract_price(soup),
        "rating": extract_rating(soup),
        "review_count": extract_review_count(soup),
        "bsr": extract_bsr(soup),
        "availability": extract_availability(soup),
    }
    return product
def extract_title(soup):
    el = soup.find("span", {"id": "productTitle"})
    return el.get_text(strip=True) if el else None
def extract_price(soup):
    el = soup.find("span", {"class": "a-price-whole"})
    if el:
        fraction = soup.find("span", {"class": "a-price-fraction"})
        price = el.get_text(strip=True).rstrip(".")
        if fraction:
            price += "." + fraction.get_text(strip=True)
        return price
    return None
def extract_rating(soup):
    el = soup.find("span", {"class": "a-icon-alt"})
    if el and "out of" in el.get_text():
        return el.get_text(strip=True).split(" ")[0]
    return None
def extract_review_count(soup):
    el = soup.find("span", {"id": "acrCustomerReviewCount"})
    return el.get_text(strip=True) if el else None
def extract_bsr(soup):
    el = soup.find("th", string=lambda t: t and "Best Sellers Rank" in t)
    if el:
        return el.find_next("td").get_text(strip=True)
    return None
def extract_availability(soup):
    el = soup.find("div", {"id": "availability"})
    return el.get_text(strip=True) if el else None
# Example usage
if __name__ == "__main__":
    asins = ["B0CHX3QBCH", "B0D5BKRY4R", "B0CRMZHDG7"]
    for asin in asins:
        product = get_amazon_product(asin)
        if product:
            print(json.dumps(product, indent=2))
        time.sleep(random.uniform(2, 5))  # Random delay between requests

معالجة المهد من أجل نتائج البحث

def scrape_search_results(keyword, max_pages=5):
    """Scrape Amazon search results with pagination."""
    results = []
    for page in range(1, max_pages + 1):
        url = f"https://www.amazon.com/s?k={keyword}&page={page}"
        headers = {
            "User-Agent": random.choice(USER_AGENTS),
            "Accept-Language": "en-US,en;q=0.9",
        }
        proxies = {"http": PROXY_URL, "https": PROXY_URL}
        response = requests.get(url, headers=headers, proxies=proxies, timeout=30)
        if response.status_code != 200:
            print(f"Page {page}: status {response.status_code}")
            break
        soup = BeautifulSoup(response.text, "html.parser")
        items = soup.find_all("div", {"data-component-type": "s-search-result"})
        for item in items:
            asin = item.get("data-asin", "")
            title_el = item.find("h2")
            price_el = item.find("span", {"class": "a-price-whole"})
            results.append({
                "asin": asin,
                "title": title_el.get_text(strip=True) if title_el else None,
                "price": price_el.get_text(strip=True) if price_el else None,
                "page": page,
            })
        time.sleep(random.uniform(3, 7))
    return results

Node.js Implementation

(لمشاريع (نودج العميل (س.د.ك) مع مشجعات للدعارة

const axios = require("axios");
const cheerio = require("cheerio");
const { HttpsProxyAgent } = require("https-proxy-agent");
const PROXY_URL = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080";
const agent = new HttpsProxyAgent(PROXY_URL);
const USER_AGENTS = [
  "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/124.0.0.0 Safari/537.36",
  "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 Chrome/124.0.0.0 Safari/537.36",
];
async function scrapeProduct(asin, marketplace = "com") {
  const url = `https://www.amazon.${marketplace}/dp/${asin}`;
  const { data } = await axios.get(url, {
    httpsAgent: agent,
    headers: {
      "User-Agent": USER_AGENTS[Math.floor(Math.random() * USER_AGENTS.length)],
      "Accept-Language": "en-US,en;q=0.9",
      Accept: "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
    },
    timeout: 30000,
  });
  const $ = cheerio.load(data);
  return {
    asin,
    title: $("#productTitle").text().trim() || null,
    price: $(".a-price-whole").first().text().trim() || null,
    rating: $(".a-icon-alt").first().text().trim().split(" ")[0] || null,
    reviewCount: $("#acrCustomerReviewCount").text().trim() || null,
    availability: $("#availability").text().trim() || null,
  };
}
async function scrapeMultiple(asins) {
  const results = [];
  for (const asin of asins) {
    try {
      const product = await scrapeProduct(asin);
      results.push(product);
      console.log(`Scraped: ${product.title}`);
    } catch (err) {
      console.error(`Failed ${asin}: ${err.message}`);
    }
    // Random delay 2-5 seconds
    await new Promise((r) => setTimeout(r, 2000 + Math.random() * 3000));
  }
  return results;
}
// Usage
scrapeMultiple(["B0CHX3QBCH", "B0D5BKRY4R"]).then((results) => {
  console.log(JSON.stringify(results, null, 2));
});

Proxy Rotation Strategies for Amazon

كشف الأمازون يصبح أكثر عدوانية الطلبات تأتي من IP واحد. هذه هي استراتيجيات التناوب التي تعمل على أفضل وجه.

التناوب

وبالنسبة للمنتجات السائبة التي يكون فيها كل طلب مستقلاً، يتناوب شركاء التنفيذ على كل طلب. هذا هو السلوك الافتراضي مع بوابة بروكسي هات كل اتصال جديد يحصل على آي بي

التناوب على أساس الدورة

وعند تحطيم نتائج البحث عبر صفحات متعددة، احتفظ بالعدد نفسه من شركاء التنفيذ للدورة بأكملها. تبديل آي بي في المنتصف يبدو مشبوهاً للأمازون استخدمي جلسات (بروكسي ها) اللزجة

# Maintain same IP for up to 10 minutes
http://USERNAME-session-search001:PASSWORD@gate.proxyhat.com:8080

المدار الثابت بالنسبة للأرض

طابق موقعك العميل إلى سوق الأمازون الوصول إلى الأمازون. دي مِنْ a آي بي يَرْفعُ الأعلامَ. البلدان المحددة المستهدفة:

# German IPs for amazon.de
http://USERNAME-country-DE:PASSWORD@gate.proxyhat.com:8080
# Japanese IPs for amazon.co.jp
http://USERNAME-country-JP:PASSWORD@gate.proxyhat.com:8080
# UK IPs for amazon.co.uk
http://USERNAME-country-GB:PASSWORD@gate.proxyhat.com:8080

لمزيد من أساليب التناوب، قراءة دليلنا التفصيلي أفضل محترفين لخردة الإنترنت في عام 2026.

Best Practices for Amazon Scraping

  • حالات التأخير: استخدام فترات عشوائية من 2-7 ثانية بين الطلبات. لا تخدش أبداً بسعر ثابت
  • المستعملون المتناوبون: الحفاظ على مجموعة من 10 على الأقل من الخيوط الواقعية لمستعملي المستنقعات وتناوبهم.
  • Handle CAPTCHAs Gracefully: إذا إستلمتَ ردًّا من مركز (كاتشا)، تراجعوا لـ30 إلى 60 ثانية، وتراجعوا مع برنامج جديد.
  • احترام الروبوتات While not legally binding in most jurisdictions, following Robs.txt directives demonstrates good faith.
  • استخدام العملاء المقيمين: ويسهل التعرف على شركاء البيانات في مراكز البيانات ويحجبهم الأمازون. الهيئات القضائية المقيمة يتشاركون نفس نطاقات آي بي مثل المتسوقين الحقيقيين
  • رصد معدلات النجاح: تعقّب معدل الـ200 إذا انخفض إلى أقل من 90 في المائة، خفض التناسق أو تعديل استراتيجية التناوب الخاصة بك.
  • استجابات الخوخ: لا تُخرّج أبداً نفس URL مرّتين إذا البيانات لم تتغير. (ج) بيانات منتجات الشارب وتحديد فترات زمنية جديدة على أساس مدى تكرار تغير الأسعار.

Scaling your Amazon Scraper

وعند الانتقال من المئات إلى الملايين من المنتجات، يكتسي الهيكل أهمية.

بنية هيكلية ذات أساس كوي

استعملي إجابة (Redis, RabbitMQ, or SQS) لإدارة قائمتك وتسحب عمليات العمال نظام المعلومات المسبقة عن علم من الطابور، وتتخلص منها، وتدفع النتائج إلى مخزن البيانات. هذا التشاؤم يرتقي من الخردة ويجعلك تضخ العمال بشكل مستقل

مراقبة العملات

تبدأ بطلبات متزامنة من 5 إلى 10، وتزداد تدريجيا مع رصد معدلات النجاح. مع مجمّع (بروكسي هات) السكني، يمكنك عادةً إدارة 2050 جلسة متزامنة بدون مشاكل. شاهدْنا على شبكة الإنترنت للتشكيلات الموصى بها.

خط بيان البيانات

Store raw HTML in an object store (S3) for re processing, and parsed data in PostgreSQL or a data warehouse. هذا الفصلِ يَتْركُك تُعالجُ حشراتَ بدون إعادةِ التَغَيُّر.

Pro tip: Amazon product pages change structure frequently. تخزن خام HTML حتى تتمكن من إعادة استخراج البيانات عندما يتغير المختارون، دون ضرب الأمازون مرة أخرى.

الاعتبارات القانونية والأخلاقية

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

المداخل الرئيسية

  • نظام (أمازون) المضاد للطائرات يتطلب وجود شركات سكنية ذات أهداف جيولوجية لمطابقة السوق المستهدفة
  • تناوب شركاء التنفيذ لكل طلب من طلبات البحث عن السوائب؛ استخدام جلسات لاصقة للتصفير المهجور.
  • درء حالات التأخير، أيها المستعملون، وطلب أنماط لتجنب الكشف.
  • (ب) بناء هيكل يستند إلى الطين من أجل زيادة عدد المنتجات التي تتجاوز بضعة آلاف.
  • Store raw HTML for resilience against selector changes.
  • الاستخدام وكيلات النيابة السكنية لارتفاع معدلات النجاح في جميع أسواق الأمازون.

مستعد للبدء بتخريد بيانات الأمازون؟ لنا دليل جرد بيانات التجارة الإلكترونية تغطي الإستراتيجية الكاملة، ويمكنك أن تستكشف البنية التحتية لـ(بروكسي هات) الصفحة.

¿Listo para empezar?

Accede a más de 50M de IPs residenciales en más de 148 países con filtrado impulsado por IA.

Ver preciosProxies residenciales
← Volver al Blog