🥳Scrapeless Communityに参加して、強力なWebスクレイピングツールキットにアクセスするために無料トライアルを取得してください!
ブログに戻ります

スクレイプレスとGoogle Geminiを使用してインテリジェント検索分析を構築する方法

Emily Chen
Emily Chen

Advanced Data Extraction Specialist

26-Jun-2025

このチュートリアルでは、Scrapelessのウェブスクレイピング機能とGoogle GeminiのAI分析を組み合わせて、高度な検索分析システムを構築します。Google検索データを抽出し、自動的に実用的な洞察を生成する方法を学びます。

前提条件

  • Python 3.8以上
  • Scrapeless APIキー
  • Google Gemini APIキー
  • 基本的なPythonの知識

ステップ1: 環境の設定

1. Python仮想環境の作成

パッケージをインストールする前に、プロジェクト依存関係を隔離するために仮想環境を作成することをお勧めします。

Windowsの場合:

Copy
# 仮想環境を作成
python -m venv scrapeless-gemini-env

# 環境をアクティブにする
scrapeless-gemini-env\Scripts\activate

macOSの場合:

Copy
# 仮想環境を作成
python3 -m venv scrapeless-gemini-env

# 環境をアクティブにする
source scrapeless-gemini-env/bin/activate

Linuxの場合:

Copy
# 仮想環境を作成
python3 -m venv scrapeless-gemini-env

# 環境をアクティブにする
source scrapeless-gemini-env/bin/activate

注意: 仮想環境がアクティブな場合、ターミナルプロンプトに (scrapeless-gemini-env) と表示されます。

2. 必要なパッケージのインストール

仮想環境がアクティブになったら、必要なパッケージをインストールします。

Copy
pip install requests google-generativeai python-dotenv pandas

3. 環境設定

プロジェクトディレクトリに .env ファイルを作成してAPIキーを設定します。

Copy
SCRAPELESS_API_TOKEN=your_token_here
GEMINI_API_KEY=your_gemini_key_here

4. APIキーの取得

Gemini APIキーについて: (AIzaSyBGhCVNdBsVVHlRNLEPEADGVQeKmDvDEfI)
Google AI Studioにアクセスして無料のGemini APIキーを生成します。Googleアカウントでサインインし、新しいAPIキーを作成してください。

Scrapeless APIトークンの取得:

ScrapelessにサインアップしてAPIトークンを取得します。このプラットフォームは、SERPデータ収集を開始するのに最適な魅力的な無料プランを提供しています。

How to get Scrapeless API key

ステップ2: Scrapelessクライアントの作成

ScrapelessのGoogle検索APIと対話するための簡単なクライアントを作成しましょう。

Copy
import json
import requests
import os
from dotenv import load_dotenv

load_dotenv()

class ScrapelessClient:
    def __init__(self):
        self.token = os.getenv('SCRAPELESS_API_TOKEN')
        self.host = "api.scrapeless.com"
        self.url = f"https://{self.host}/api/v1/scraper/request"
        self.headers = {"x-api-token": self.token}
    
    def search_google(self, query, **kwargs):
        """Scrapelessを使ったGoogle検索を実行"""
        payload = {
            "actor": "scraper.google.search",
            "input": {
                "q": query,
                "gl": kwargs.get("gl", "us"),
                "hl": kwargs.get("hl", "en"),
                "google_domain": kwargs.get("google_domain", "google.com"),
                "location": kwargs.get("location", ""),
                "tbs": kwargs.get("tbs", ""),
                "start": str(kwargs.get("start", 0)),
                "num": str(kwargs.get("num", 10))
            }
        }
        
        response = requests.post(
            self.url, 
            headers=self.headers, 
            data=json.dumps(payload)
        )
        
        if response.status_code != 200:
            print(f"エラー: {response.status_code} - {response.text}")
            return None
            
        return response.json()

ステップ3: Google Geminiによる分析の統合

次に、検索結果にAIによる分析を追加しましょう。

Copy
import google.generativeai as genai

class SearchAnalyzer:
    def __init__(self):
        genai.configure(api_key=os.getenv('GEMINI_API_KEY'))
        self.model = genai.GenerativeModel('gemini-1.5-flash')
        self.scraper = ScrapelessClient()
    
    def analyze_topic(self, topic):
        """トピックを検索して分析"""
        # ステップ1: 検索結果を取得
        print(f"検索中: {topic}")
        search_results = self.scraper.search_google(topic, num=20)
        
        if not search_results:
            return None
        
        # ステップ2: 主要情報を抽出
        extracted_data = self._extract_results(search_results)
        
        # ステップ3: Geminiで分析
        prompt = f"""
        「{topic}」に関するこれらの検索結果を分析してください:
        
        {json.dumps(extracted_data, indent=2)}
        
        提供すべき内容:
        1. 主要なテーマとトレンド
        2. 主な情報源
        3. 注目すべき洞察
        4. 推奨される行動
        
        レスポンスを明確で実用的なレポートとしてフォーマットしてください。
        """
        
        response = self.model.generate_content(prompt)
        
        return {
            "topic": topic,
            "search_data": extracted_data,
            "analysis": response.text
        }
python Copy
def _extract_results(self, search_data):
        """検索結果から関連データを抽出する"""
        results = []
        
        if "organic_results" in search_data:
            for item in search_data["organic_results"][:10]:
                results.append({
                    "title": item.get("title", ""),
                    "snippet": item.get("snippet", ""),
                    "link": item.get("link", ""),
                    "source": item.get("displayed_link", "")
                })
        
        return results

ステップ4: 実用的なユースケースの構築

ユースケース1: 競合分析

重要: 競合分析を実行する前に、以下のコード内の例示企業名を実際の企業と競合に置き換えてください。

Copy
class CompetitorMonitor:
    def __init__(self):
        self.analyzer = SearchAnalyzer()
    
    def analyze_competitors(self, company_name, competitors):
        """企業を競合に対して分析する"""
        all_data = {}
        
        # 各企業を検索
        for comp in [company_name] + competitors:
            print(f"\n分析中: {comp}")
            
            # 最近のニュースや更新を検索
            news_query = f"{comp} 最新ニュース 更新 2025"
            data = self.analyzer.analyze_topic(news_query)
            
            if data:
                all_data[comp] = data
        
        # 比較分析を生成
        comparative_prompt = f"""
        このデータに基づいて{company_name}を競合と比較してください:
        
        {json.dumps(all_data, indent=2)}
        
        提供内容:
        1. 競争上の位置づけ
        2. 各企業の独自の強み
        3. 市場機会
        4. {company_name}のための戦略的勧告
        """
        
        response = self.analyzer.model.generate_content(comparative_prompt)
        
        return {
            "company": company_name,
            "competitors": competitors,
            "analysis": response.text,
            "raw_data": all_data
        }

ユースケース2: トレンドモニタリング

Copy
class TrendMonitor:
    def __init__(self):
        self.analyzer = SearchAnalyzer()
        self.scraper = ScrapelessClient()
    
    def monitor_trend(self, keyword, time_range="d"):
        """キーワードのトレンドをモニタリングする"""
        # 時間範囲をGoogleのtbsパラメータにマッピング
        time_map = {
            "h": "qdr:h",  # 最後の1時間
            "d": "qdr:d",  # 最後の1日
            "w": "qdr:w",  # 最後の1週間
            "m": "qdr:m"   # 最後の1ヶ月
        }
        
        # 時間フィルターを使って検索
        results = self.scraper.search_google(
            keyword, 
            tbs=time_map.get(time_range, "qdr:d"),
            num=30
        )
        
        if not results:
            return None
        
        # トレンドを分析
        prompt = f"""
        最近の検索結果に基づいて「{keyword}」のトレンドを分析してください:
        
        {json.dumps(results.get("organic_results", [])[:15], indent=2)}
        
        特定内容:
        1. 新たに出現するパターン
        2. 主要な動向
        3. 感情(ポジティブ/ネガティブ/ニュートラル)
        4. 未来の予測
        5. 実行可能な洞察
        """
        
        response = self.analyzer.model.generate_content(prompt)
        
        return {
            "keyword": keyword,
            "time_range": time_range,
            "analysis": response.text,
            "result_count": len(results.get("organic_results", []))
        }

ステップ5: メインアプリケーションを作成する

Copy
def main():
    # コンポーネントの初期化
    competitor_monitor = CompetitorMonitor()
    trend_monitor = TrendMonitor()
    
    # 例1: 競合分析
    # 重要: これらの例示企業を実際の企業および競合に置き換えてください
    print("=== 競合分析 ===")
    analysis = competitor_monitor.analyze_competitors(
        company_name="OpenAI",  # 自社名に置き換えてください
        competitors=["Anthropic", "Google AI", "Meta AI"]  # 競合に置き換えてください
    )
    
    print("\n競争分析結果:")
    print(analysis["analysis"])
    
    # 結果を保存
    with open("competitor_analysis.json", "w") as f:
        json.dump(analysis, f, indent=2)
    
    # 例2: トレンドモニタリング
    # 重要: キーワードを業界特有の用語に置き換えてください
    print("\n\n=== トレンドモニタリング ===")
    trends = trend_monitor.monitor_trend(
        keyword="人工知能の規制",  # キーワードに置き換えてください
        time_range="w"  # 最後の1週間
    )
    
    print("\nトレンド分析結果:")
    print(trends["analysis"])
    
    # 例3: 複数話題の分析
    # 重要: これらの話題を業界特有のトピックに置き換えてください
    print("\n\n=== 複数話題の分析 ===")
    topics = [
        "生成AIビジネスアプリケーション",  # テーマに置き換えてください
        "AIサイバーセキュリティ脅威",

機械学習 医療
if not search_results:
return None

Copy
    # ステップ 2: 重要な情報を抽出
    extracted_data = self._extract_results(search_results)

    # ステップ 3: Gemini で分析
    prompt = f"""
    「{topic}」に関するこれらの検索結果を分析してください:

    {json.dumps(extracted_data, indent=2)}

    提供内容:
    1. 主要なテーマとトレンド
    2. 主要な情報源
    3. 注目すべき洞察
    4. 推奨アクション

    返答を明確で実行可能なレポートとしてフォーマットしてください。
    """

    response = self.model.generate_content(prompt)

    return {
        "topic": topic,
        "search_data": extracted_data,
        "analysis": response.text
    }

def _extract_results(self, search_data):
    """検索結果から関連データを抽出"""
    results = []

    if "organic_results" in search_data:
        for item in search_data["organic_results"][:10]:
            results.append({
                "title": item.get("title", ""),
                "snippet": item.get("snippet", ""),
                "link": item.get("link", ""),
                "source": item.get("displayed_link", "")
            })

    return results

class CompetitorMonitor:
def init(self):
self.analyzer = SearchAnalyzer()

Copy
def analyze_competitors(self, company_name, competitors):
    """企業を競合他社と比較分析する"""
    all_data = {}

    # 各企業を検索
    for comp in [company_name] + competitors:
        print(f"\n分析中: {comp}")

        # 最近のニュースや更新を検索
        news_query = f"{comp} 最新 ニュース 更新 2025"
        data = self.analyzer.analyze_topic(news_query)

        if data:
            all_data[comp] = data

        # リクエストの間に遅延を追加
        time.sleep(2)

    # 比較分析を生成
    comparative_prompt = f"""
    このデータに基づいて {company_name} と競合他社を比較してください:

    {json.dumps(all_data, indent=2)}

    提供内容:
    1. 競争状況
    2. 各企業のユニークな強み
    3. 市場機会
    4. {company_name} のための戦略的推奨
    """

    response = self.analyzer.model.generate_content(comparative_prompt)

    return {
        "company": company_name,
        "competitors": competitors,
        "analysis": response.text,
        "raw_data": all_data
    }

class TrendMonitor:
def init(self):
self.analyzer = SearchAnalyzer()
self.scraper = ScrapelessClient()

Copy
def monitor_trend(self, keyword, time_range="d"):
    """キーワードのトレンドを監視する"""
    # 時間範囲を Google の tbs パラメータにマッピング
    time_map = {
        "h": "qdr:h",  # 過去1時間
        "d": "qdr:d",  # 過去1日
        "w": "qdr:w",  # 過去1週間
        "m": "qdr:m"   # 過去1ヶ月
    }

    # 時間フィルターを使用して検索
    results = self.scraper.search_google(
        keyword, 
        tbs=time_map.get(time_range, "qdr:d"),
        num=30
    )

    if not results:
        return None

    # トレンドを分析
    prompt = f"""
    最近の検索結果に基づいて「{keyword}」のトレンドを分析してください:

    {json.dumps(results.get("organic_results", [])[:15], indent=2)}

    特定事項:
    1. 新たなパターン
    2. 主要な発展
    3. 感情(ポジティブ/ネガティブ/ニュートラル)
    4. 将来の予測
    5. 実行可能な洞察
    """

    response = self.analyzer.model.generate_content(prompt)

    return {
        "keyword": keyword,
        "time_range": time_range,
        "analysis": response.text,
        "result_count": len(results.get("organic_results", []))
    }

class DataExporter:
@staticmethod
def export_to_csv(data, filename=None):
"""検索結果をCSVにエクスポート"""
if filename is None:
filename = f"search_results_{datetime.now().strftime('%Y%m%d_%H%M%S')}.csv"

Copy
    # データ構造をフラット化
    rows = []
    for item in data:
        if isinstance(item, dict) and "search_data" in item:
            for result in item["search_data"]:
                rows.append({
                    "topic": item.get("topic", ""),
                    "title": result.get("title", ""),
                    "snippet": result.get("snippet", ""),
                    "link": result.get("link", ""),
                    "source": result.get("source", "")
                })

    df = pd.DataFrame(rows)
ja Copy
df.to_csv(filename, index=False)
        print(f"データを {filename} にエクスポートしました。")
        
        return filename
    
    @staticmethod
    def create_html_report(analysis_data, filename="report.html"):
        """分析データからHTMLレポートを作成します"""
        html = f"""
        <!DOCTYPE html>
        <html>
        <head>
            <title>検索分析レポート</title>
            <style>
                body {{ font-family: Arial, sans-serif; margin: 40px; }}
                .section {{ margin-bottom: 30px; padding: 20px; 
                           background-color: #f5f5f5; border-radius: 8px; }}
                h1 {{ color: #333; }}
                h2 {{ color: #666; }}
                pre {{ white-space: pre-wrap; word-wrap: break-word; }}
            </style>
        </head>
        <body>
            <h1>検索分析レポート</h1>
            <p>生成日: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}</p>
            
            <div class="section">
                <h2>分析結果</h2>
                <pre>{analysis_data.get('analysis', '利用可能な分析はありません')}</pre>
            </div>
            
            <div class="section">
                <h2>データサマリー</h2>
                <p>トピック: {analysis_data.get('topic', '該当なし')}</p>
                <p>分析された結果: {len(analysis_data.get('search_data', []))}</p>
            </div>
        </body>
        </html>
        """
        
        with open(filename, 'w') as f:
            f.write(html)
        
        print(f"HTMLレポートを作成しました: {filename}")

def main():
    # コンポーネントの初期化
    competitor_monitor = CompetitorMonitor()
    trend_monitor = TrendMonitor()
    exporter = DataExporter()
    
    # 例 1: 競合分析
    print("=== 競合分析 ===")
    analysis = competitor_monitor.analyze_competitors(
        company_name="OpenAI",
        competitors=["Anthropic", "Google AI", "Meta AI"]
    )
    
    print("\n競合分析結果:")
    print(analysis["analysis"])
    
    # 結果の保存
    with open("competitor_analysis.json", "w") as f:
        json.dump(analysis, f, indent=2)
    
    # 例 2: トレンド監視
    print("\n\n=== トレンド監視 ===")
    trends = trend_monitor.monitor_trend(
        keyword="人工知能の規制",
        time_range="w"  # 過去1週間
    )
    
    print("\nトレンド分析結果:")
    print(trends["analysis"])
    
    # 例 3: 複数トピック分析
    print("\n\n=== 複数トピック分析 ===")
    topics = [
        "生成AIのビジネスアプリケーション",
        "AIサイバーセキュリティの脅威",
        "機械学習とヘルスケア"
    ]
    
    analyzer = SearchAnalyzer()
    all_results = []
    
    for topic in topics:
        print(f"\n分析中: {topic}")
        result = analyzer.analyze_topic(topic)
        
        if result:
            all_results.append(result)
            # 個別の分析を保存
            filename = f"{topic.replace(' ', '_')}_analysis.txt"
            with open(filename, "w") as f:
                f.write(result["analysis"])
            print(f"分析結果を {filename} に保存しました。")
        
        # リクエスト間の遅延
        time.sleep(2)
    
    # 全結果をCSVにエクスポート
    if all_results:
        csv_file = exporter.export_to_csv(all_results)
        print(f"\n全結果をエクスポートしました: {csv_file}")
        
        # 最初の結果のためのHTML報告を作成
        if all_results[0]:
            exporter.create_html_report(all_results[0])

if __name__ == "__main__":
    main()

結論

おめでとうございます!あなたは、Scrapelessのエンタープライズクラスのウェブスクレイピング機能とGoogle Geminiの高度なAI分析を活用した包括的な検索分析システムを成功裏に構築しました。このインテリジェントなソリューションは、生の検索データを自動的に行動可能なビジネスインサイトに変換します。

あなたが達成したこと

このチュートリアルを通じて、あなたは次のようなモジュラーでプロダクション向けのシステムを作成しました:

  • 自動データ取得:Scrapeless API経由でリアルタイムのGoogle検索結果
  • AIによる分析:Google Geminiを使用したインテリジェントなインサイト生成
  • 競合情報:包括的な競争環境の監視
  • トレンド検出:リアルタイムの市場トレンドの特定と分析
  • 複数フォーマットの報告:ステークホルダー共有用のCSVエクスポートとHTMLレポート
  • スケーラブルなアーキテクチャ:簡単にカスタマイズと拡張ができるモジュール設計

あなたのビジネスへの主な利点

戦略的意思決定:検索データを戦略的インサイトに変換し、情報に基づいたビジネス決定と競争的位置付けを促進します。

時間の効率:手動研究の何時間もを数分の自動分析に自動化し、あなたのチームをより高価値な戦略的作業に集中させます。

市場認識:リアルタイムの監視機能を利用して、業界のトレンド、競合の動き、新たな機会に先んじて遅れを取らないようにします。

コスト効率の良いインテリジェンス:従来のマーケットリサーチソリューションのわずかなコストでエンタープライズグレードのツールを活用。

システムの拡張

モジュラーアーキテクチャにより、機能を簡単に拡張できます:

  • 追加データソース:ソーシャルメディアAPI、ニュースフィード、業界データベースを統合
  • 高度な分析:感情分析、エンティティ認識、予測モデリングを追加
  • 可視化:StreamlitやDashなどのツールを使用してインタラクティブなダッシュボードを作成
  • アラート:重要な市場の変化に対するリアルタイム通知を実装
  • 多言語サポート:ローカライズされた検索でグローバル市場の監視を拡大

成功のためのベストプラクティス

  1. 小さく始める:特定のキーワードから始めて、監視の範囲を徐々に拡大
  2. プロンプトを反復:出力品質に基づいてAIプロンプトを継続的に改善
  3. 結果を検証:初期段階ではAIの洞察を手動で照合
  4. 定期的な更新:競合リストとキーワードを最新の状態に保つ
  5. 利害関係者からのフィードバック:最終利用者から意見を集めて報告の関連性を向上

最後の考え

この検索分析システムは、データ駆動型ビジネスインテリジェンスに向けた重要なステップを表しています。Scrapelessの信頼できるデータ収集とGeminiの分析能力を組み合わせることで、ほぼすべての業界や使用ケースに適応できる強力なツールが作成されました。

このシステムの構築への投資は、市場の認識、競争情報、戦略的意思決定能力の改善を通じて利益をもたらします。システムを精緻化し、拡張し続けることで、ビジネス成長のための検索データを活用する新しい機会を発見するでしょう。

成功した実装は技術だけでなく、これらの洞察をビジネスプロセスや意思決定ワークフローにどれだけうまく統合するかに依存することを忘れないでください。


追加リソース、高度な機能、APIドキュメントについては、Scrapeless Documentationをご覧ください。

Scrapelessでは、適用される法律、規制、およびWebサイトのプライバシーポリシーを厳密に遵守しながら、公開されているデータのみにアクセスします。 このブログのコンテンツは、デモンストレーションのみを目的としており、違法または侵害の活動は含まれません。 このブログまたはサードパーティのリンクからの情報の使用に対するすべての責任を保証せず、放棄します。 スクレイピング活動に従事する前に、法律顧問に相談し、ターゲットウェブサイトの利用規約を確認するか、必要な許可を取得してください。

最も人気のある記事

カタログ