1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Crawl4AI と DeepSeek を使用して AI スクレイパーを構築する方法

1
Last updated at Posted at 2025-11-02

Medium image

Crawl4AIとDeepSeekを使ったAIスクレイパー

このガイドでは、Crawl4AIDeepSeekを使用して、AI駆動のスクレイパーを構築する方法を紹介します。Crawl4AIは、AIモデルと連携する柔軟なオープンソースのスクレイピングツールです。DeepSeekは、非構造化ウェブページから構造化データを抽出する強力なAIモデルです。この2つを組み合わせることで、ウェブサイトをインテリジェントにナビゲートし、クリーンで整理されたデータを抽出できるスクレイパーを作成できます。

Crawl4AIとは?

Crawl4AIは、大規模言語モデル(LLM)と連携するように設計されたオープンソースのAI対応ウェブスクレイパーです。従来のスクレイパーとは異なり、固定されたHTMLパースルールに依存しません。代わりに、DeepSeekのようなAIモデルを使用して構造化データを抽出できます。

Crawl4AIの特徴:

  • LLM向けに設計: AIトレーニングとリトリーバー強化生成(RAG)に最適化された構造化データを生成します。
  • スマートブラウザ制御: ブラウザセッション、プロキシ、およびカスタムフックを管理します。
  • AI駆動のパース: ヒューリスティックインテリジェンスを使用して構造化情報を抽出します。
  • オープンソース: APIキーは不要で、Dockerやクラウドプラットフォームにデプロイ可能です。

Crawl4AIとDeepSeekを使用する理由

DeepSeekは、テキストを効率的に処理する高度なオープンソースAIモデルです。Crawl4AIと組み合わせることで、ハードコーディングされたパースルールなしで動的なコンテンツ抽出が可能になります。これは特に以下のような場合に便利です:

  • 頻繁に構造が変わるサイト: AIが新しいレイアウトに自動的に適応します。
  • 非構造化コンテンツの抽出: AIモデルは自由なテキスト、ブログ投稿、顧客レビューを分析できます。
  • 異なるページフォーマットの処理: 多くのウェブサイトは、コンテンツに対して複数のテンプレートを使用しており、従来のスクレイパーはこれを管理するのが難しいです。

Crawl4AIとDeepSeekを使ったウェブスクレイピング: ステップバイステップガイド

ステップ1: プロジェクトのセットアップ

まず、新しいプロジェクトディレクトリを作成し、仮想環境をセットアップします。

mkdir ai-scraper
cd ai-scraper
python -m venv venv

仮想環境をアクティブにします:

macOS/Linuxの場合:

source venv/bin/activate

Windowsの場合:

venv\Scripts\activate

ステップ2: Crawl4AIのインストール

pipを使用してCrawl4AIとその依存関係をインストールします:

pip install crawl4ai

ブラウザの依存関係をインストールするためにセットアップコマンドを実行します:

crawl4ai-setup

このコマンドはPlaywrightブラウザをインストールし、キャッシュ用のデータベースをセットアップします。

ステップ3: スクレイパーファイルの作成

プロジェクトフォルダ内にscraper.pyという新しいファイルを作成します。

touch scraper.py

テキストエディタでscraper.pyを開き、基本的な非同期構造を追加します:

import asyncio

async def main():
    # Scraper logic will go here
    pass

if __name__ == "__main__":
    asyncio.run(main())

ステップ4: スクレイパーの設定

scraper.py内で必要なCrawl4AIコンポーネントをインポートします:

from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig, CacheMode

基本的なウェブスクレイピング関数を定義します:

async def main():
    # Browser settings
    browser_config = BrowserConfig(headless=True)
    
    # Crawler settings
    crawler_config = CrawlerRunConfig(cache_mode=CacheMode.BYPASS)
    
    # Initialize and run the AI-powered scraper
    async with AsyncWebCrawler(config=browser_config) as crawler:
        result = await crawler.arun(url="https://www.example.com", config=crawler_config)
    
    # Display the extracted data
    print(f"Extracted Data:\n{result.markdown[:1000]}")

ステップ5: ウェブサイトの制限に対処する

一部のウェブサイトは、ボットのような動作を検出してスクレイパーをブロックします。リクエストが403 Forbiddenエラーを返す場合、サイトがスクレイパーをブロックしていることを意味します。

Get Data Journal’s stories in your inbox

Join Medium for free to get updates from this writer.

制限を回避するために、Bright DataのWeb Unlocker APIを使用できます。このサービスは、プロキシのローテーションとCAPTCHAの解決を自動的に処理します。

Web Unlocker APIの設定

  1. Bright Dataアカウントを作成します。
  2. ダッシュボードで「Proxies & Scraping」に移動します。
  3. Web Unlocker APIを有効にします。
  4. プロキシの資格情報をコピーし、.envファイルに保存します:
PROXY_SERVER=https://proxy.brightdata.com:22225
PROXY_USERNAME=your_username
PROXY_PASSWORD=your_password

プロキシをスクレイパーに統合

scraper.pyを修正してプロキシ設定を使用します:

import os
from dotenv import load_dotenv

load_dotenv()

# Proxy configuration
proxy_config = {
    "server": os.getenv("PROXY_SERVER"),
    "username": os.getenv("PROXY_USERNAME"),
    "password": os.getenv("PROXY_PASSWORD")
}

browser_config = BrowserConfig(headless=True, proxy_config=proxy_config)

これで、スクレイパーはBright Dataのネットワークを通じてトラフィックをルーティングし、検出を回避します。

大規模なサイト制限の処理

スクレイパーがより高度になるにつれて、IPブロック、CAPTCHA、またはJavaScriptが重いページなどの一般的な課題に直面することがあります。スクレイパーをスムーズに動作させるために、プロキシローテーション、ブラウザエミュレーション、ボット対策システムの自動回避を提供するツールの使用を検討してください。

たとえば、CAPTCHA処理を内蔵したプロキシベースのソリューションを統合することで、最も保護されたウェブサイトへのアクセスを維持することができます。これにより、AI駆動のスクレイパーがさまざまなターゲットに対して信頼性が高く、スケーラブルであることが保証されます。私のエージェンシーは、主にBright Dataの製品をウェブスクレイピングに使用しています。

ステップ6: AIデータ抽出のためのDeepSeekの使用

意味のある情報を抽出するために、データを理解し構造化するAIモデルであるDeepSeekが必要です。

Groq APIキーの取得

  1. GroqCloudにサインアップします。
  2. API Keysの下にAPIキーを作成します。
  3. .envファイルに保存します:
LLM_API_TOKEN=your_groq_api_key
LLM_MODEL=groq/deepseek-r1-distill-llama-70b

抽出スキーマの定義

models/ディレクトリを作成し、models/data_schema.pyというファイルを作成します:

from pydantic import BaseModel

class ExtractedData(BaseModel):
    title: str
    description: str
    image_url: str

DeepSeekを使用してAIパースを行うために、scraper.pyを修正します:

from crawl4ai.extraction_strategy import LLMExtractionStrategy
from models.data_schema import ExtractedData

extraction_strategy = LLMExtractionStrategy(
    provider=os.getenv("LLM_MODEL"),
    api_token=os.getenv("LLM_API_TOKEN"),
    schema=ExtractedData.model_json_schema(),
    extraction_type="schema",
    instruction="Extract the title, description, and image URL from the content.",
    input_format="markdown"
)

crawler_config = CrawlerRunConfig(
    cache_mode=CacheMode.BYPASS,
    extraction_strategy=extraction_strategy
)

これで、AIモデルはページの内容を分析し、自動的にデータを構造化します。

ステップ7: 抽出データの保存

scraper.pyを修正して、抽出したデータをJSONファイルとして保存します:

import json

async def main():
    async with AsyncWebCrawler(config=browser_config) as crawler:
        result = await crawler.arun(url="https://www.example.com", config=crawler_config)

        # Parse AI-extracted data
        extracted_data = json.loads(result.extracted_content)

        # Save to JSON
        with open("output.json", "w", encoding="utf-8") as f:
            json.dump(extracted_data, f, indent=4)

if __name__ == "__main__":
    asyncio.run(main())

最終ステップ: スクレイパーの実行

次のコマンドでスクレイパーを実行します:

python scraper.py

これにより:

  1. ウェブサイトからデータを抽出します。
  2. AIを使用してコンテンツを構造化します。
  3. データをJSONファイルに保存します。

これで、Crawl4AIとDeepSeekを使用してAI駆動のウェブスクレイパーを構築しました。通常のスクレイパーとは異なり、これはよりスマートで柔軟です。ウェブサイトの変更に適応し、ボット対策を回避し、複雑なパースルールなしでデータを抽出できます。

結論

この設定を使えば、最も保護されたウェブサイトでも簡単にスクレイピングできます。サイトが更新されるたびにスクレイパーが壊れることはもうありません!これで、ウェブスクレイピングをより速く、賢く、信頼性の高いものにする強力なツールを手に入れました。

さあ、さまざまなウェブサイトで試してみてください。コーディングを楽しんで、スクレイピングを楽しんでください!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?