首頁 > 後端開發 > Python教學 > 使用 Pydantic、Crawl 和 Gemini 建立非同步電子商務網路爬蟲

使用 Pydantic、Crawl 和 Gemini 建立非同步電子商務網路爬蟲

Mary-Kate Olsen
發布: 2025-01-12 06:25:42
原創
239 人瀏覽過

Building an Async E-Commerce Web Scraper with Pydantic, Crawl & Gemini

簡而言之: 本指南示範如何使用crawl4ai 的人工智慧擷取和 Pydantic 資料模型建立電子商務抓取工具。 抓取工具非同步檢索產品清單(名稱、價格)和詳細的產品資訊(規格、評論)。

在 Google Colab 上存取完整程式碼


厭倦了電子商務資料分析的傳統網路抓取的複雜性?本教學使用現代 Python 工具簡化了這個過程。我們將利用 crawl4ai 進行智慧資料擷取,並利用 Pydantic 進行穩健的資料建模和驗證。

為什麼選擇 Crawl4AI 和 Pydantic?

  • crawl4ai:使用人工智慧驅動的提取方法來簡化網路爬行和抓取。
  • Pydantic:提供資料驗證和模式管理,確保抓取的資料結構化且準確。

為什麼瞄準 Tokopedia?

印尼主要電商平台Tokopedia就是我們的例子。 (註:作者是印尼人,也是該平台的用戶,但不隸屬於該平台。)這些原則適用於其他電子商務網站。 這種抓取方法對於對電子商務分析、市場研究或自動資料收集感興趣的開發人員來說是有益的。

是什麼讓這種方法與眾不同?

我們不依賴複雜的CSS選擇器或XPath,而是利用crawl4ai基於LLM的提取。這提供:

  • 增強了對網站結構變化的適應能力。
  • 更清晰、更結構化的資料輸出。
  • 減少維修開銷。

設定您的開發環境

先安裝必要的軟體包:

<code class="language-bash">%pip install -U crawl4ai
%pip install nest_asyncio
%pip install pydantic</code>
登入後複製
登入後複製

對於筆記本中的非同步程式碼執行,我們也會使用 nest_asyncio:

<code class="language-python">import crawl4ai
import asyncio
import nest_asyncio
nest_asyncio.apply()</code>
登入後複製

使用 Pydantic 定義資料模型

我們使用 Pydantic 來定義預期的資料結構。 以下是型號:

<code class="language-python">from pydantic import BaseModel, Field
from typing import List, Optional

class TokopediaListingItem(BaseModel):
    product_name: str = Field(..., description="Product name from listing.")
    product_url: str = Field(..., description="URL to product detail page.")
    price: str = Field(None, description="Price displayed in listing.")
    store_name: str = Field(None, description="Store name from listing.")
    rating: str = Field(None, description="Rating (1-5 scale) from listing.")
    image_url: str = Field(None, description="Primary image URL from listing.")

class TokopediaProductDetail(BaseModel):
    product_name: str = Field(..., description="Product name from detail page.")
    all_images: List[str] = Field(default_factory=list, description="List of all product image URLs.")
    specs: str = Field(None, description="Technical specifications or short info.")
    description: str = Field(None, description="Long product description.")
    variants: List[str] = Field(default_factory=list, description="List of variants or color options.")
    satisfaction_percentage: Optional[str] = Field(None, description="Customer satisfaction percentage.")
    total_ratings: Optional[str] = Field(None, description="Total number of ratings.")
    total_reviews: Optional[str] = Field(None, description="Total number of reviews.")
    stock: Optional[str] = Field(None, description="Stock availability.")</code>
登入後複製

這些模型充當模板,確保資料驗證並提供清晰的文件。

抓取過程

刮刀分兩階段運作:

1.抓取產品清單

首先,我們先檢索搜尋結果頁:

<code class="language-python">async def crawl_tokopedia_listings(query: str = "mouse-wireless", max_pages: int = 1):
    # ... (Code remains the same) ...</code>
登入後複製

2.正在取得產品詳細資訊

接下來,對於每個產品 URL,我們會取得詳細資訊:

<code class="language-python">async def crawl_tokopedia_detail(product_url: str):
    # ... (Code remains the same) ...</code>
登入後複製

結合各階段

最後,我們整合兩個階段:

<code class="language-python">async def run_full_scrape(query="mouse-wireless", max_pages=2, limit=15):
    # ... (Code remains the same) ...</code>
登入後複製

運行爬蟲

執行抓取工具的方法如下:

<code class="language-bash">%pip install -U crawl4ai
%pip install nest_asyncio
%pip install pydantic</code>
登入後複製
登入後複製

專業提示

  1. 速率限制:尊重 Tokopedia 的伺服器;在大規模抓取請求之間引入延遲。
  2. 快取:在開發過程中啟用crawl4ai的快取(cache_mode=CacheMode.ENABLED)。
  3. 錯誤處理:為生產使用實現全面的錯誤處理和重試機制。
  4. API 金鑰: 將 Gemini API 金鑰安全地儲存在環境變數中,而不是直接儲存在程式碼中。

後續步驟

這個刮刀可以擴展到:

  • 將資料儲存在資料庫中。
  • 監控價格隨時間的變化。
  • 分析產品趨勢與模式。
  • 比較多家商店的價格。

結論

crawl4ai 基於 LLM 的提取與傳統方法相比顯著提高了網頁抓取的可維護性。 與 Pydantic 的整合確保了數據的準確性和結構。

在抓取之前始終遵守網站的robots.txt和服務條款。


重要連結:

爬4AI

皮丹蒂克


注意:完整的程式碼可以在Colab筆記本中找到。 請隨意嘗試並根據您的具體需求進行調整。

以上是使用 Pydantic、Crawl 和 Gemini 建立非同步電子商務網路爬蟲的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板