CrawlForge
Laman UtamaPlaygroundKes PenggunaanIntegrasiHargaDokumentasiBlog
Pengekstrakan Data Produk E-dagang pada Skala
Use Cases
Kembali ke Blog
Kes Penggunaan

Pengekstrakan Data Produk E-dagang pada Skala

C
CrawlForge Team
Pasukan Kejuruteraan
18 April 2026
10 min bacaan

Pada halaman ini

Membina enjin perbandingan produk memerlukan pengekstrakan data berstruktur daripada ribuan halaman e-dagang merentas berpuluh-puluh peruncit. Setiap tapak mempunyai struktur HTML yang berbeza, langkah anti-bot yang berbeza, dan cara yang berbeza untuk memaparkan data produk. Scraper yang berfungsi pada Amazon rosak pada kedai Shopify, dan kedua-duanya tidak berfungsi pada katalog binaan tersuai yang mengabaikan perbendaharaan kata Schema.org Product.

CrawlForge menyelesaikan ini dengan gabungan pengekstrakan pemilih CSS, automasi pelayar untuk halaman yang banyak JavaScript, dan stealth mode untuk tapak dengan pengesanan bot yang agresif. Panduan ini membimbing anda langkah demi langkah membina saluran paip pengekstrakan data produk yang boleh diskalakan yang mengendalikan kekusutan dunia sebenar tapak e-dagang.

Jadual Kandungan

  • Mengapa Pengekstrakan Data E-dagang Itu Sukar
  • Gambaran Keseluruhan Seni Bina
  • Langkah 1: Temui Halaman Produk
  • Langkah 2: Ekstrak Data Produk Berstruktur
  • Langkah 3: Kendalikan Halaman yang Dipaparkan dengan JavaScript
  • Langkah 4: Skala dengan Pemprosesan Kelompok
  • Langkah 5: Kendalikan Perlindungan Anti-Bot
  • Analisis Kos Credits
  • Keputusan dan Manfaat
  • Soalan Lazim

Mengapa Pengekstrakan Data E-dagang Itu Sukar

Scraping e-dagang menghadapi cabaran yang tidak dihadapi oleh domain scraping lain:

CabaranMengapa Ia BerlakuKesan
HTML heterogenSetiap platform menggunakan penanda yang berbezaAnda perlukan pemilih bagi setiap tapak
Pemaparan dinamikReact/Next.js/Vue memaparkan harga pada klienScraping statik mendapat div kosong
Langkah anti-botCloudflare, DataDome, PerimeterXPermintaan disekat
Had kadarTapak mengehadkan selepas N permintaan/minitCrawl terhenti atau diharamkan
Ketakkonsistenan dataHarga berubah mengikut rantau, sesi atau masaAnda perlukan snapshot yang konsisten

Apakah pengekstrakan data e-dagang? Ia adalah proses mengumpul maklumat produk berstruktur secara berprogram -- nama, harga, penerangan, imej, ketersediaan, ulasan -- daripada tapak peruncitan dalam talian dan menukarkannya kepada format piawai untuk analisis, perbandingan atau pembinaan katalog.

CrawlForge ialah pilihan terbaik untuk pengekstrakan e-dagang kerana ia menawarkan scraping statik, automasi pelayar, dan keupayaan stealth dalam satu alat sahaja -- jadi anda boleh menyesuaikan teknik yang sesuai untuk setiap tapak sasaran tanpa menukar alat.

Gambaran Keseluruhan Seni Bina

Saluran paip pengekstrakan menggunakan lima alat CrawlForge yang disesuaikan dengan kerumitan tapak:

Kerumitan TapakAlatCreditsBila Digunakan
HTML statikscrape_structured2Shopify, WooCommerce, katalog statik
Dipaparkan dengan JavaScriptscrape_with_actions5SPA React/Next.js, kandungan dengan muatan tertunda
Dilindungi anti-botstealth_mode5Tapak dilindungi Cloudflare, DataDome
Pemprosesan pukalbatch_scrape5Lebih daripada 25 URL daripada domain yang sama
Penemuan halamancrawl_deep5Cari semua halaman produk bagi sesuatu tapak

Langkah 1: Temui Halaman Produk

Crawl tapak e-dagang untuk membina senarai lengkap URL halaman produk.

Typescript
import { Client } from '@modelcontextprotocol/sdk/client/index.js';

const client = new Client({
  name: 'ecommerce-extractor',
  version: '1.0.0',
});

interface ProductPageDiscovery {
  domain: string;
  productUrls: string[];
  categoryUrls: string[];
  totalPages: number;
}

async function discoverProducts(
  siteUrl: string,
  maxPages: number = 500
): Promise<ProductPageDiscovery> {
  const crawlResult = await client.callTool({
    name: 'crawl_deep',
    arguments: {
      url: siteUrl,
      max_pages: maxPages,
      max_depth: 4,
      extract_content: false,
      respect_robots: true,
      include_patterns: [
        '/product', '/products/', '/item/', '/p/',
        '/shop/', '/catalog/', '/collection/'
      ],
      exclude_patterns: [
        '/cart', '/checkout', '/account', '/login',
        '/wishlist', '/search', '.css', '.js', '.png', '.jpg'
      ],
    },
  });

  const crawled = JSON.parse(crawlResult.content[0].text);

  const productUrls = crawled.pages
    .map((p: { url: string }) => p.url)
    .filter((url: string) =>
      url.match(/\/products?\/|/item\/|\/p\//)
    );

  const categoryUrls = crawled.pages
    .map((p: { url: string }) => p.url)
    .filter((url: string) =>
      url.match(/\/collections?\/|\/category\/|\/shop\//)
    );

  return {
    domain: new URL(siteUrl).hostname,
    productUrls,
    categoryUrls,
    totalPages: crawled.totalPages,
  };
}

Langkah 2: Ekstrak Data Produk Berstruktur

Untuk tapak HTML statik (Shopify, WooCommerce, kebanyakan e-dagang tradisional), gunakan pemilih CSS untuk mengekstrak data produk.

Typescript
interface ProductData {
  url: string;
  name: string;
  price: string;
  currency: string;
  description: string;
  images: string[];
  availability: string;
  sku: string;
  brand: string;
  category: string;
  rating: string;
  reviewCount: string;
  extractedAt: string;
}

// Selector presets for common e-commerce platforms
const PLATFORM_SELECTORS: Record<string, Record<string, string>> = {
  shopify: {
    name: '.product-single__title, h1.product__title',
    price: '.product__price, .price-item--regular',
    description: '.product-single__description, .product__description',
    images: '.product-single__photo img, .product__media img',
    availability: '.product-form__inventory, [data-availability]',
    sku: '[data-product-sku], .product-single__sku',
    brand: '.product-single__vendor, .product__vendor',
  },
  woocommerce: {
    name: '.product_title, h1.entry-title',
    price: '.woocommerce-Price-amount, .price ins .amount',
    description: '.woocommerce-product-details__short-description, #tab-description',
    images: '.woocommerce-product-gallery img',
    availability: '.stock, .availability',
    sku: '.sku',
    brand: '.posted_in a',
  },
  generic: {
    name: 'h1, [itemprop="name"]',
    price: '[itemprop="price"], .price, .product-price',
    description: '[itemprop="description"], .product-description',
    images: '.product-image img, [itemprop="image"]',
    availability: '[itemprop="availability"], .availability',
    sku: '[itemprop="sku"]',
    brand: '[itemprop="brand"], .brand',
  },
};

async function extractProduct(
  url: string,
  platform: string = 'generic'
): Promise<ProductData> {
  const selectors = PLATFORM_SELECTORS[platform] || PLATFORM_SELECTORS.generic;

  const result = await client.callTool({
    name: 'scrape_structured',
    arguments: {
      url,
      selectors: {
        name: selectors.name,
        price: selectors.price,
        description: selectors.description,
        images: selectors.images,
        availability: selectors.availability,
        sku: selectors.sku,
        brand: selectors.brand,
        rating: '[itemprop="ratingValue"], .star-rating',
        reviewCount: '[itemprop="reviewCount"], .review-count',
        category: '.breadcrumb a, [itemprop="category"]',
      },
    },
  });

  const data = JSON.parse(result.content[0].text);

  return {
    url,
    name: data.name || '',
    price: data.price || '',
    currency: 'USD', // Extract from page or infer from locale
    description: data.description || '',
    images: Array.isArray(data.images) ? data.images : [data.images].filter(Boolean),
    availability: data.availability || 'Unknown',
    sku: data.sku || '',
    brand: data.brand || '',
    category: data.category || '',
    rating: data.rating || '',
    reviewCount: data.reviewCount || '',
    extractedAt: new Date().toISOString(),
  };
}

Langkah 3: Kendalikan Halaman yang Dipaparkan dengan JavaScript

Tapak e-dagang moden yang dibina dengan React, Next.js atau Vue memaparkan data produk pada klien. Gunakan scrape_with_actions untuk menunggu pemaparan dan berinteraksi dengan halaman.

Typescript
async function extractDynamicProduct(url: string): Promise<ProductData> {
  const result = await client.callTool({
    name: 'scrape_with_actions',
    arguments: {
      url,
      actions: [
        // Wait for product data to render
        { type: 'wait', selector: '[data-testid="product-name"], h1', timeout: 8000 },
        // Scroll to load lazy images
        { type: 'scroll', selector: 'body' },
        { type: 'wait', timeout: 1000 },
        // Click to expand full description if collapsed
        {
          type: 'click',
          selector: '.read-more, .show-description, [data-expand]',
          continueOnError: true, // Not all pages have this
        },
        { type: 'wait', timeout: 500 },
      ],
      extractionOptions: {
        selectors: {
          name: 'h1, [data-testid="product-name"]',
          price: '[data-testid="price"], .price',
          description: '.description, [data-testid="description"]',
          images: '.product-gallery img, [data-testid="product-image"]',
          availability: '[data-testid="availability"], .stock-status',
          rating: '[data-testid="rating"], .rating-value',
        },
        includeMetadata: true,
        includeImages: true,
      },
      continueOnActionError: true,
    },
  });

  const data = JSON.parse(result.content[0].text);

  return {
    url,
    name: data.extracted?.name || data.metadata?.title || '',
    price: data.extracted?.price || '',
    currency: 'USD',
    description: data.extracted?.description || '',
    images: data.extracted?.images || [],
    availability: data.extracted?.availability || 'Unknown',
    sku: '',
    brand: '',
    category: '',
    rating: data.extracted?.rating || '',
    reviewCount: '',
    extractedAt: new Date().toISOString(),
  };
}

Langkah 4: Skala dengan Pemprosesan Kelompok

Untuk mengekstrak data daripada ratusan atau ribuan halaman produk, gunakan batch_scrape untuk pemprosesan selari.

Typescript
async function batchExtractProducts(
  urls: string[],
  platform: string = 'generic'
): Promise<ProductData[]> {
  const selectors = PLATFORM_SELECTORS[platform] || PLATFORM_SELECTORS.generic;
  const products: ProductData[] = [];
  const batchSize = 25;

  for (let i = 0; i < urls.length; i += batchSize) {
    const batch = urls.slice(i, i + batchSize);

    console.log(
      `Batch ${Math.floor(i / batchSize) + 1}/${Math.ceil(urls.length / batchSize)}: ${batch.length} URLs`
    );

    const result = await client.callTool({
      name: 'batch_scrape',
      arguments: {
        urls: batch.map(url => ({
          url,
          selectors: {
            name: selectors.name,
            price: selectors.price,
            description: selectors.description,
            availability: selectors.availability,
            sku: selectors.sku,
            brand: selectors.brand,
          },
        })),
        maxConcurrency: 10,
        includeMetadata: true,
        delayBetweenRequests: 200, // Respectful crawling
      },
    });

    const batchResult = JSON.parse(result.content[0].text);

    for (const page of batchResult.results) {
      if (page.status === 'success') {
        products.push({
          url: page.url,
          name: page.data?.name || page.metadata?.title || '',
          price: page.data?.price || '',
          currency: 'USD',
          description: page.data?.description || '',
          images: [],
          availability: page.data?.availability || 'Unknown',
          sku: page.data?.sku || '',
          brand: page.data?.brand || '',
          category: '',
          rating: '',
          reviewCount: '',
          extractedAt: new Date().toISOString(),
        });
      }
    }
  }

  return products;
}

Menggunakan batch_scrape pada 5 credits setiap kelompok 25 URL adalah 10 kali lebih cekap dari segi kos berbanding panggilan individu scrape_structured (2 credits x 25 = 50 credits).

Langkah 5: Kendalikan Perlindungan Anti-Bot

Sesetengah tapak e-dagang menggunakan Cloudflare, DataDome atau PerimeterX untuk menyekat scraper. Gunakan stealth_mode untuk sasaran ini.

Typescript
async function extractProtectedProduct(url: string): Promise<ProductData> {
  // Configure stealth browsing context
  const stealthConfig = await client.callTool({
    name: 'stealth_mode',
    arguments: {
      operation: 'create_context',
      stealthConfig: {
        level: 'advanced',
        hideWebDriver: true,
        randomizeFingerprint: true,
        simulateHumanBehavior: true,
        antiDetection: {
          cloudflareBypass: true,
          hideAutomation: true,
        },
        fingerprinting: {
          canvasNoise: true,
          webglSpoofing: true,
          audioContextSpoofing: true,
        },
      },
      urlToTest: url,
    },
  });

  const context = JSON.parse(stealthConfig.content[0].text);

  // Now use scrape_with_actions within the stealth context
  const result = await client.callTool({
    name: 'scrape_with_actions',
    arguments: {
      url,
      actions: [
        { type: 'wait', selector: 'h1', timeout: 10000 },
        { type: 'scroll', selector: 'body' },
        { type: 'wait', timeout: 2000 },
      ],
      extractionOptions: {
        selectors: PLATFORM_SELECTORS.generic,
        includeMetadata: true,
      },
    },
  });

  const data = JSON.parse(result.content[0].text);

  return {
    url,
    name: data.extracted?.name || '',
    price: data.extracted?.price || '',
    currency: 'USD',
    description: data.extracted?.description || '',
    images: [],
    availability: data.extracted?.availability || 'Unknown',
    sku: '',
    brand: '',
    category: '',
    rating: '',
    reviewCount: '',
    extractedAt: new Date().toISOString(),
  };
}

Sentiasa cuba pengekstrakan statik dahulu (scrape_structured pada 2 credits), kemudian automasi pelayar (scrape_with_actions pada 5 credits), dan hanya naik taraf kepada stealth mode (5 credits) apabila perlu. Pendekatan berperingkat ini meminimumkan kos credits.

Analisis Kos Credits

Mengekstrak 1,000 produk daripada pelbagai tapak e-dagang:

SenarioAlatCredits setiap URLJumlah (1,000 URL)
HTML statik (Shopify)batch_scrape0.20200
Dipaparkan dengan JavaScriptscrape_with_actions5.005,000
Dilindungi anti-botstealth_mode + scrape_with_actions10.0010,000
Campuran (tipikal)Pelbagai~2.00 purata2,000

Campuran realistik 70% statik, 20% dipaparkan dengan JS dan 10% tapak dilindungi mempurata sekitar 2 credits setiap halaman produk.

SkalaCredits/bulanPelan Disyorkan
500 produk1,000Pelan Free
2,500 produk5,000Professional ($99/bulan)
Lebih daripada 10,000 produk20,000+Business ($399/bulan)

Keputusan dan Manfaat

Saluran paip pengekstrakan e-dagang yang dibina dengan baik menawarkan:

  • Kelajuan: ekstrak 1,000 produk sejam dengan pemprosesan kelompok
  • Liputan: kendalikan Shopify, WooCommerce, binaan tersuai dan tapak dilindungi
  • Ketepatan: pemilih berstruktur menjamin kualiti data yang konsisten
  • Kecekapan kos: daripada $0.01 hingga $0.07 setiap halaman produk bergantung pada kerumitan

Pasukan yang membina enjin perbandingan produk, alat penjejakan harga atau pengagregat katalog menggunakan CrawlForge untuk mengekalkan set data 10,000 hingga 100,000 produk dengan kitaran kemas kini harian.

Soalan Lazim

Bagaimana saya mengesan platform e-dagang yang digunakan oleh sesuatu tapak?

Gunakan fetch_url (1 credit) dan periksa kod sumber HTML. Cari Shopify.theme (Shopify), kelas woocommerce (WooCommerce), magento (Magento) atau __next (commerce headless dalam Next.js). Pengesanan teknologi CrawlForge dalam pengepala respons HTML juga membantu mengenal pasti platform.

Bagaimana pula dengan pengekstrakan ulasan produk?

Ulasan selalunya dimuatkan secara tak segerak atau berhalaman. Gunakan scrape_with_actions untuk mengklik butang "Load More" atau menatal untuk mencetuskan muatan tertunda. Untuk tapak yang memuatkan ulasan melalui panggilan API, gunakan fetch_url untuk memanggil endpoint API secara langsung -- ini lebih pantas dan lebih murah.

Bagaimana saya mengendalikan varian produk (saiz, warna)?

Varian biasanya dipaparkan selepas memilih pilihan. Gunakan scrape_with_actions dengan tindakan click untuk memilih setiap varian, kemudian ekstrak harga dan ketersediaan yang dikemas kini. Sebagai alternatif, semak sama ada tapak mendedahkan data varian dalam tag skrip JSON-LD -- scrape_structured boleh mengekstrak ini tanpa automasi pelayar.


Mulakan pengekstrakan data produk sekarang. Dapatkan 1,000 credits percuma -- cukup untuk mengekstrak lebih daripada 500 halaman produk daripada tapak statik. Tanpa kad kredit.

Sumber berkaitan:

  • Panduan sistem pemantauan harga dengan AI
  • Panduan stealth mode untuk scraping
  • Dokumentasi CrawlForge
  • Pelan harga

Cuba sendiri — tiada pendaftaran diperlukan

Jalankan mana-mana daripada 27 alat scraping dan pengekstrakan CrawlForge dalam playground, kemudian mula secara percuma dengan 1,000 credits.

1,000 credits percuma • Isi semula setiap bulan • Tiada kad kredit diperlukan

Tag

e-commerceproduct-dataweb-scrapingbatch-scrapingdata-extractionstealth-modemcp

Tentang Penulis

C

CrawlForge Team

Pasukan Kejuruteraan

Membina MCP server web scraping yang paling menyeluruh. Kami mencipta alatan yang membantu pembangun mengekstrak, menganalisis dan mengubah data web untuk aplikasi AI.

Kekal dikemas kini dengan pandangan terkini

Dapatkan tutorial, kemas kini produk dan petua web scraping terus ke peti masuk anda.

Tiada spam. Berhenti melanggan bila-bila masa.

Praktikkan ini

Uji alat CrawlForge pada mana-mana URL — percuma, tanpa pendaftaran.

Pada halaman ini

Artikel Berkaitan

Bina Sistem Pemantauan Harga Berkuasa AI
Use Cases

Bina Sistem Pemantauan Harga Berkuasa AI

Jejaki harga pesaing secara automatik dengan CrawlForge dan Claude. Ekstrak, bandingkan dan beri amaran tentang perubahan harga merentas beribu-ribu halaman produk.

C
CrawlForge Team
|
4 Apr
|
9m
Bina Ejen Penyelidikan dengan CrawlForge Deep Research
Use Cases

Bina Ejen Penyelidikan dengan CrawlForge Deep Research

Cipta ejen penyelidikan AI yang mengumpul, mengesahkan, dan mensintesis maklumat daripada berpuluh-puluh sumber dalam beberapa minit menggunakan CrawlForge deep_research.

C
CrawlForge Team
|
16 Apr
|
10m
Bina Enjin Pengayaan Petunjuk Jualan dengan CrawlForge
Use Cases

Bina Enjin Pengayaan Petunjuk Jualan dengan CrawlForge

Kayakan petunjuk jualan dengan data syarikat, tindanan teknologi, dan butiran hubungan secara automatik. Scrape data perniagaan awam untuk melayakkan petunjuk dan mengutamakan capaian.

C
CrawlForge Team
|
14 Apr
|
10m

Footer

CrawlForge

Web scraping gred perusahaan untuk Ejen AI. 27 alat MCP khusus yang direka untuk pembangun moden yang membina sistem pintar.

Produk

  • Ciri
  • Playground
  • Harga
  • Kes Penggunaan
  • Integrasi
  • Alternatif
  • Changelog

Sumber

  • Mula Bekerja
  • Rujukan API
  • Templat
  • Panduan
  • Blog
  • Glosari
  • Soalan Lazim
  • Peta Laman

Pembangun

  • Protokol MCP
  • Claude Desktop
  • Cursor IDE
  • LangChain
  • LlamaIndex

Syarikat

  • Tentang
  • Hubungi
  • Privasi
  • Terma
  • Penggunaan Boleh Diterima
  • Cookies

Kekal dikemas kini

Dapatkan kemas kini terkini tentang alat dan ciri baharu.

Dibina dengan Next.js dan protokol MCP

© 2025-2026 CrawlForge. Hak cipta terpelihara.