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 │
└─────────────────────────────────────────────┘
コア技術原理:
- CDPモード(推奨):Chrome DevTools Protocol経由で既存のChromeブラウザに接続し、実際のブラウザのCookie、拡張機能、閲覧履歴を再利用することで、最高の検出回避効果を実現
- 署名の再利用:ログイン状態を維持したブラウザコンテキスト環境を利用し、JS式でプラットフォームの署名パラメータを直接取得、暗号化アルゴリズムのリバースエンジニアリング不要
- ログイン状態のキャッシュ:初回のQRコードログイン後にCookieを保存し、以降の実行で自動的に再利用、再ログイン不要
4. インストールとクイックスタート
4.1 環境準備
# 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の設定が必要です:
- Chrome >= 144をインストール
- アドレスバーに
chrome://inspect/#remote-debuggingを入力 - "Allow remote debugging for this browser instance" をチェック
Server running at: 127.0.0.1:9222が表示されることを確認
CDPモードを使用しない場合は、config/base_config.py で ENABLE_CDP_MODE = False を設定します。
4.3 初回実行
# 小紅書キーワード検索(デフォルトで15件のノートを取得)
uv run main.py --platform xhs --lt qrcode --type search
# 初回実行時にQRコードが表示されるので、小紅書アプリでスキャンしてログイン
# ログイン状態は自動的にキャッシュされ、以降は再スキャン不要
5. 主要設定の詳細
config/base_config.py が主要な設定ファイルです。以下はよく使う設定項目です:
# 対象プラットフォーム: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)での取得
# キーワードでノートを検索
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中国版)での取得
# 動画を検索
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での取得
# 動画を検索
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 微博 / 百度贴吧 / 知乎 / 快手
# 微博
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 | エンタープライズ | 完全なリレーショナルデータベース対応 |
# 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での操作
# ターミナル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プロキシプールの設定
大規模取得時にはプロキシプールの有効化を推奨します:
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 並列処理と頻度制御
# 同時実行数(慎重に設定、高すぎるとリスク制御が作動)
MAX_CONCURRENCY_NUM = 1
# 各キーワードの最大取得数
CRAWLER_MAX_NOTES_COUNT = 50
# ページネーション開始位置
START_PAGE = 1
8.4 コメントワードクラウドの生成
MediaCrawlerにはコメントワードクラウド機能が組み込まれており、視覚的なワードクラウドを自動生成できます:
# base_config.py で有効化
# wordcloudなどの依存関係の事前インストールが必要
ENABLE_WORD_CLOUD = True
9. 法令順守と法的リスクについて
重要なお知らせ:MediaCrawlerを使用する前に、以下のリスクを必ず理解してください:
- 法的遵守:サイバーセキュリティ法、データセキュリティ法、個人情報保護法を遵守し、商業目的での使用は禁止
- プラットフォームルール:各プラットフォームのrobots.txtと利用規約を尊重し、大規模クロールを避ける
- 頻度制御:リクエスト頻度を適切に制御し、プラットフォームに負担をかけない
- データの用途:学習・研究目的のみ、違法な用途には使用しない
- プライバシー保護:他人の個人情報を取得・拡散しない
参考:クローラー関連違法事例集
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データ収集技術を学ぶための最適な出発点です。ただし、法令を遵守し、プラットフォームルールとユーザープライバシーを尊重して使用してください。