1. MediaCrawlerとは?

MediaCrawlerは、中国のSNSプラットフォームに対応した最も包括的なオープンソースクローラーツールで、GitHubで64,000以上のスターを獲得し、開発者NanmiCoderによってメンテナンスされています。Python + Playwright ブラウザ自動化フレームワークをベースに、ログイン状態を維持したままプラットフォームAPIを直接呼び出す方式を採用しており、複雑なJS暗号化アルゴリズムをリバースエンジニアリングする必要がなく、技術的ハードルを大幅に下げています。

核心的な位置づけ:データアナリスト、世論調査研究者、コンテンツ運営者向けの学習ツールとして、7大中国SNSプラットフォームの公開コンテンツデータを一括取得できます。

Crawl4AIのような汎用Webクローラーとは異なり、MediaCrawlerは中国のSNSプラットフォームに特化しており、各プラットフォームの署名ロジックとデータ解析ルールが組み込まれているため、すぐに使い始められます。海外プラットフォームのデータ収集が必要な場合は、Wiseflow 徹底解説をご覧ください。

2. 対応7プラットフォームと機能マトリクス

プラットフォーム キーワード検索 指定投稿の取得 2階層コメント クリエイターページ ログイン状態キャッシュ IPプロキシプール コメントワードクラウド
小紅書 ✅ ✅ ✅ ✅ ✅ ✅ ✅
抖音 ✅ ✅ ✅ ✅ ✅ ✅ ✅
快手 ✅ ✅ ✅ ✅ ✅ ✅ ✅
Bilibili ✅ ✅ ✅ ✅ ✅ ✅ ✅
微博 ✅ ✅ ✅ ✅ ✅ ✅ ✅
百度贴吧 ✅ ✅ ✅ ✅ ✅ ✅ ✅
知乎 ✅ ✅ ✅ ✅ ✅ ✅ ✅

7つのプラットフォームで全く同じ機能が利用できます——これがMediaCrawlerの最大のアーキテクチャ上の利点です:統一されたインターフェース設計により、プラットフォームの切り替えは1つのパラメータを変更するだけです。

3. 技術アーキテクチャ解説

MediaCrawlerの技術スタックは「検出回避リスクの低減」を中心に設計されています:

┌─────────────────────────────────────────────┐
│           MediaCrawler アーキテクチャ         │
├─────────────────────────────────────────────┤
│  ユーザー層    CLI コマンドライン / WebUI      │
├─────────────────────────────────────────────┤
│  スケジューリング層  プラットフォームスケジューラー → 統一クローラーインターフェース │
├─────────────────────────────────────────────┤
│  実行層        Playwright (CDP モード)        │
│           ├─ ログイン状態管理 (QR/電話/Cookie) │
│           ├─ JS署名計算 (ブラウザコンテキスト再利用) │
│           └─ 検出回避 (実際のブラウザフィンガープリント) │
├─────────────────────────────────────────────┤
│  データ層      CSV / JSON / JSONL / Excel     │
│           SQLite / MySQL / PostgreSQL         │
└─────────────────────────────────────────────┘

コア技術原理:

  1. CDPモード(推奨):Chrome DevTools Protocol経由で既存のChromeブラウザに接続し、実際のブラウザのCookie、拡張機能、閲覧履歴を再利用することで、最高の検出回避効果を実現
  2. 署名の再利用:ログイン状態を維持したブラウザコンテキスト環境を利用し、JS式でプラットフォームの署名パラメータを直接取得、暗号化アルゴリズムのリバースエンジニアリング不要
  3. ログイン状態のキャッシュ:初回のQRコードログイン後にCookieを保存し、以降の実行で自動的に再利用、再ログイン不要

4. インストールとクイックスタート

4.1 環境準備

BASH
# 1. uvのインストール(推奨Pythonパッケージマネージャー)
curl -LsSf https://astral.sh/uv/install.sh | sh

# 2. Node.js >= 16を確認(抖音と知乎の署名に必要)
node --version

# 3. プロジェクトのクローン
git clone https://github.com/NanmiCoder/MediaCrawler.git
cd MediaCrawler

# 4. 依存関係のインストール(uvがPythonバージョンと依存関係を自動処理)
uv sync

4.2 Chromeブラウザの設定(CDPモード)

MediaCrawlerはデフォルトでCDPモードを使用するため、Chromeの設定が必要です:

  1. Chrome >= 144をインストール
  2. アドレスバーに chrome://inspect/#remote-debugging を入力
  3. "Allow remote debugging for this browser instance" をチェック
  4. Server running at: 127.0.0.1:9222 が表示されることを確認

CDPモードを使用しない場合は、config/base_config.py で ENABLE_CDP_MODE = False を設定します。

4.3 初回実行

BASH
# 小紅書キーワード検索(デフォルトで15件のノートを取得)
uv run main.py --platform xhs --lt qrcode --type search

# 初回実行時にQRコードが表示されるので、小紅書アプリでスキャンしてログイン
# ログイン状態は自動的にキャッシュされ、以降は再スキャン不要

5. 主要設定の詳細

config/base_config.py が主要な設定ファイルです。以下はよく使う設定項目です:

PYTHON
# 対象プラットフォーム:xhs | dy | ks | bili | wb | tieba | zhihu
PLATFORM = "xhs"

# 検索キーワード(英文カンマ区切り)
KEYWORDS = "Pythonチュートリアル,プログラミング副業,AIツール推薦"

# ログイン方式:qrcode(QRコード)| phone(携帯電話)| cookie(手動入力)
LOGIN_TYPE = "qrcode"

# クロールタイプ:search(キーワード検索)| detail(指定投稿)| creator(クリエイターページ)
CRAWLER_TYPE = "search"

# データ保存形式:csv | db | json | jsonl | sqlite | excel | postgres
SAVE_DATA_OPTION = "jsonl"

# 各キーワードの最大取得ノート数
CRAWLER_MAX_NOTES_COUNT = 15

# 同時実行数(1に設定してリスク制御を回避)
MAX_CONCURRENCY_NUM = 1

# コメント取得の有効化
ENABLE_GET_COMMENTS = True

# 2階層コメントの有効化
ENABLE_GET_SUB_COMMENTS = False

# IPプロキシ設定
ENABLE_IP_PROXY = False
IP_PROXY_PROVIDER_NAME = "kuaidaili"

6. 各プラットフォームでのデータ取得実践

6.1 小紅書(RED)での取得

BASH
# キーワードでノートを検索
uv run main.py --platform xhs --lt qrcode --type search

# 指定したノートIDの詳細を取得
uv run main.py --platform xhs --lt qrcode --type detail

# クリエイターページの全ノートを取得
uv run main.py --platform xhs --lt qrcode --type creator

小紅書のデータフィールドには:ノートタイトル、本文、画像リスト、いいね数、お気に入り数、コメント数、投稿者情報、投稿日時などが含まれます。

6.2 抖音(TikTok中国版)での取得

BASH
# 動画を検索
uv run main.py --platform dy --lt qrcode --type search

# 指定した動画ID
uv run main.py --platform dy --lt qrcode --type detail

抖音での取得には署名計算にNode.js環境が必要です。データフィールドには:動画タイトル、再生URL、カバー画像、いいね数、コメント数、シェア数などが含まれます。

6.3 Bilibiliでの取得

BASH
# 動画を検索
uv run main.py --platform bili --lt qrcode --type search

# 指定した動画(BV番号)
uv run main.py --platform bili --lt qrcode --type detail

Bilibiliのデータには:動画タイトル、BV番号、再生数、弾幕数、いいね・コイン・お気に入り数、UP主情報などが含まれます。

6.4 微博 / 百度贴吧 / 知乎 / 快手

BASH
# 微博
uv run main.py --platform wb --lt qrcode --type search

# 百度贴吧
uv run main.py --platform tieba --lt qrcode --type search

# 知乎
uv run main.py --platform zhihu --lt qrcode --type search

# 快手
uv run main.py --platform ks --lt qrcode --type search

すべてのプラットフォームでコマンド形式は同じで、--platform パラメータを変更するだけです。

7. データの保存とエクスポート

MediaCrawlerは7種類のデータ保存形式に対応しており、データはデフォルトで data/ ディレクトリに保存されます:

形式 用途 特徴
JSONL 日常取得(デフォルト) 1行ずつ書き込み、中断再開に対応
CSV Excel分析 表計算ソフトで直接開く
JSON プログラム連携 標準形式、ネスト構造
Excel レポート出力 書式付きスプレッドシート
SQLite ローカルデータベース 軽量クエリ、追加サービス不要
MySQL 本番環境 重複排除対応、大規模データ向け
PostgreSQL エンタープライズ 完全なリレーショナルデータベース対応
PYTHON
# MySQL保存に切り替え
SAVE_DATA_OPTION = "db"

# db_config.py で接続情報を設定
DB_HOST = "localhost"
DB_PORT = 3306
DB_USER = "root"
DB_PASSWORD = "your_password"
DB_NAME = "media_crawler"

8. 高度な使い方

8.1 WebUIでの操作

BASH
# ターミナル1:バックエンドAPIを起動
uv run uvicorn api.main:app --port 8080 --reload

# ターミナル2:フロントエンドを起動(開発モード)
cd webui && npm install && npm run dev
# http://localhost:5173/ にアクセス

# または本番ビルド
cd webui && npm install && npm run build
# APIサーバーのみ起動し、http://localhost:8080 にアクセス

WebUIはビジュアル設定インターフェースを提供し、コマンドラインなしでクローラーを操作できます。

8.2 IPプロキシプールの設定

大規模取得時にはプロキシプールの有効化を推奨します:

PYTHON
ENABLE_IP_PROXY = True
IP_PROXY_POOL_COUNT = 2
IP_PROXY_PROVIDER_NAME = "kuaidaili"  # kuaidaili | wandouhttp | static をサポート

# 静的プロキシ設定
IP_PROXY_PROVIDER_NAME = "static"
STATIC_PROXY_URL = "http://user:password@your_proxy:port"

8.3 並列処理と頻度制御

PYTHON
# 同時実行数(慎重に設定、高すぎるとリスク制御が作動)
MAX_CONCURRENCY_NUM = 1

# 各キーワードの最大取得数
CRAWLER_MAX_NOTES_COUNT = 50

# ページネーション開始位置
START_PAGE = 1

8.4 コメントワードクラウドの生成

MediaCrawlerにはコメントワードクラウド機能が組み込まれており、視覚的なワードクラウドを自動生成できます:

PYTHON
# base_config.py で有効化
# wordcloudなどの依存関係の事前インストールが必要
ENABLE_WORD_CLOUD = True

9. 法令順守と法的リスクについて

重要なお知らせ:MediaCrawlerを使用する前に、以下のリスクを必ず理解してください:

  1. 法的遵守:サイバーセキュリティ法、データセキュリティ法、個人情報保護法を遵守し、商業目的での使用は禁止
  2. プラットフォームルール:各プラットフォームのrobots.txtと利用規約を尊重し、大規模クロールを避ける
  3. 頻度制御:リクエスト頻度を適切に制御し、プラットフォームに負担をかけない
  4. データの用途:学習・研究目的のみ、違法な用途には使用しない
  5. プライバシー保護:他人の個人情報を取得・拡散しない

参考:クローラー関連違法事例集

10. 他のツールとの比較

機能 MediaCrawler Snscrape Tweepy 自作クローラー
対象プラットフォーム 7大中国プラットフォーム Twitter/X Twitter/X 任意のプラットフォーム
検出回避 CDP実際のブラウザ なし 公式API 独自実装が必要
ログイン管理 QR/電話/Cookie 不要 OAuth 手動実装
データ保存 7形式 コンソール出力 JSON 独自実装
習得難易度 低(設定してすぐ使える) 低 中 高
コメント取得 ✅ 2階層コメント対応 ❌ ✅ 開発が必要
メンテナンス状況 活発(64K+ スター) 停滞 活発 自分次第

汎用Webクロール機能が必要な場合は Crawl4AI を、情報フィード監視とAI要約が必要な場合は Wiseflow をお勧めします。MediaCrawlerの独自の価値は、中国SNSへの深い適応にあります。

11. よくある質問(FAQ)

MediaCrawlerはどのPythonバージョンに対応していますか?

Python 3.11を推奨します。これはプロジェクトの依存パッケージの主要なテストバージョンです。uvを使用すると、正しいPythonバージョンが自動的に選択されます。

QRコードログインが失敗した場合は?

CDPモードを使用している場合、Chromeバージョン >= 144でリモートデバッグが有効になっていることを確認してください。繰り返しQRコードを要求される場合は、ブラウザを閉じてリモートデバッグを再度有効にしてください。HEADLESS = False に切り替えて、スライド検証を手動で通過することもできます。

複数のプラットフォームで同時にクロールできますか?

可能ですが、逐次実行を推奨します。実行ごとに1つの --platform パラメータを指定し、完了後に次のプラットフォームに切り替えます。複数プラットフォームの並列実行はリスク制御をトリガーしやすくなります。

データはどこに保存されますか?

デフォルトではプロジェクトルートディレクトリの data/ フォルダに保存され、プラットフォーム名ごとにサブディレクトリが作成されます。SAVE_DATA_PATH で保存パスをカスタマイズできます。

MediaCrawlerを商業利用できますか?

できません。このプロジェクトは非商業学習ライセンス(NON-COMMERCIAL LEARNING LICENSE 1.1)を採用しており、商業目的での使用を明示的に禁止しています。商業利用が必要な場合は、作者に連絡してライセンスを取得してください。

12. まとめ

MediaCrawlerは現在最も完成度の高い中国SNSデータ収集オープンソースツールであり、64,000以上のGitHubスターがその実用性を証明しています。主な利点は:

  • 広範なカバー:7大プラットフォーム統一インターフェース、切り替えコストゼロ
  • 強力な検出回避:CDPモードで実際のブラウザ環境を再利用
  • 簡単な導入:uvでワンクリックインストール、設定してすぐ使える
  • 柔軟な保存:7種類のデータ形式で様々なシーンに対応
  • 活発なコミュニティ:継続的な更新、迅速な問題対応

データアナリスト、世論調査研究者、コンテンツ運営者にとって、MediaCrawlerはSNSデータ収集技術を学ぶための最適な出発点です。ただし、法令を遵守し、プラットフォームルールとユーザープライバシーを尊重して使用してください。