MediaCrawlerとは?

データ駆動の時代において、ソーシャルメディアプラットフォームには膨大なユーザーインサイト、コンテンツトレンド、世論情報が蓄積されています。しかし、手動でこれらのデータを収集するのは非効率で持続可能ではありません。MediaCrawlerは、この課題を解決するために生まれたオープンソースプロジェクトです。開発者NanmiCoderがメンテナンスする強力なマルチプラットフォーム自媒体データ収集ツールで、GitHubで数万のStarを獲得しており、現在最も包括的な中国語ソーシャルメディアクローラーフレームワークです。

MediaCrawlerの核心的価値は、1つのツールで7大主流プラットフォームをカバーし、各プラットフォームごとに個別にクローラーを開発する必要がないことです。Pythonの非同期アーキテクチャに基づき、Playwrightによるブラウザ自動化でログイン状態を処理し、保持されたCookie環境を通じてプラットフォームAPIを呼び出して署名パラメータを取得します。複雑な暗号化アルゴリズムのリバースエンジニアリングは全く不要で、技術的ハードルを大幅に下げます。

プロジェクトアドレス:github.com/NanmiCoder/MediaCrawler

適用シーン

  • 世論分析:各プラットフォームでのブランド評判とユーザーフィードバックを監視
  • コンテンツトレンド研究:人気トピック、バズコンテンツの共通特徴を追跡
  • 競合分析:競合アカウントの投稿頻度、インタラクションデータを収集
  • 学術研究:ソーシャルメディア伝播パターン、ユーザー行動分析
  • データ可視化:収集したデータでワードクラウド、トレンドチャートを生成

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

MediaCrawlerは現在以下のプラットフォームに対応しており、各プラットフォームの機能カバレッジは高度に統一されています:

プラットフォーム コード キーワード検索 指定投稿取得 2次コメント クリエイターページ ログインキャッシュ IPプロキシ ワードクラウド
小紅書 xhs ✅ ✅ ✅ ✅ ✅ ✅ ✅
Douyin dy ✅ ✅ ✅ ✅ ✅ ✅ ✅
Kuaishou ks ✅ ✅ ✅ ✅ ✅ ✅ ✅
Bilibili bili ✅ ✅ ✅ ✅ ✅ ✅ ✅
Weibo wb ✅ ✅ ✅ ✅ ✅ ✅ ✅
Baidu貼吧 tieba ✅ ✅ ✅ ✅ ✅ ✅ ✅
知乎 zhihu ✅ ✅ ✅ ✅ ✅ ✅ ✅

3つのクロールモード:

  • search:キーワードで検索し、関連投稿/動画をクロール
  • detail:指定投稿IDまたはURLで、詳細とコメントを正確にクロール
  • creator:指定クリエイターページの全コンテンツをクロール

3つのログイン方法:

  • qrcode:QRコードスキャンログイン(推奨、最も安全)
  • phone:携帯電話番号 + 認証コードログイン
  • cookie:既存のCookieを直接入力

技術アーキテクチャ:Python + Playwrightの巧みな設計

MediaCrawlerの技術選定は実用主義の哲学を体現しています。従来のHTTPリクエスト + 署名リバースエンジニアリング路線ではなく、Playwrightによるブラウザ自動化でログイン状態を処理し、保持されたCookie環境を通じてプラットフォームAPIを呼び出します。この設計の核心的優位性は、複雑な暗号化アルゴリズムのリバースエンジニアリングが不要なことです。

コアアーキテクチャ階層

MediaCrawler
├── main.py              # プログラムエントリー、クローラーファクトリ
├── config/              # 設定管理(プラットフォーム設定、基本設定)
├── media_platform/      # 7大プラットフォームクローラー実装
│   ├── xhs/            # 小紅書
│   ├── douyin/         # Douyin
│   ├── kuaishou/       # Kuaishou
│   ├── bilibili/       # Bilibili
│   ├── weibo/          # Weibo
│   ├── tieba/          # Baidu貼吧
│   └── zhihu/          # 知乎
├── store/              # データ保存層(CSV/JSON/SQLite/MySQL/MongoDB)
├── proxy/              # IPプロキシプール管理
└── cache/              # ログイン状態キャッシュ管理

ワークフロー

  1. ログインフェーズ:Playwrightがブラウザを開き、ユーザーがQRコードスキャン/電話番号入力、Cookieを取得
  2. キャッシュフェーズ:Cookieをローカルに保存(cache/{platform}_cookies.json)
  3. クロールフェーズ:Cookie環境を再利用し、JS式で署名パラメータを取得、プラットフォームAPIを呼び出し
  4. 保存フェーズ:収集したデータをCSV/JSON/データベースに書き込み

CDPモード:アンチ検出の切り札

MediaCrawlerはデフォルトでCDP(Chrome DevTools Protocol)モードを有効にし、ユーザーの既存Chromeブラウザに接続します。Playwrightのヘッドレスブラウザと比較して、CDPモードの優位性は:

  • 本物のブラウザフィンガープリント:ユーザーが実際にインストールしているChromeを使用、全拡張機能、プラグイン、設定を含む
  • より低い検出リスク:ブラウザ行動パターンが実ユーザーにより近い
  • ログイン状態の継承:既存のCookieと閲覧履歴を自動再利用

有効化方法(config/base_config.py):

PYTHON
ENABLE_CDP_MODE = True           # CDPモード有効化
CDP_CONNECT_EXISTING = True      # 既存ブラウザに接続(推奨)
CDP_DEBUG_PORT = 9222            # デバッグポート

使用前にChromeアドレスバーに chrome://inspect/#remote-debugging を入力し、「Allow remote debugging for this browser instance」にチェックを入れる必要があります。

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

環境要件

  • Python 3.11+
  • Node.js 16+(Douyinと知乎に必要)
  • Chromeブラウザ(最新版推奨)

方法1:uvインストール(推奨)

uv は現在最速のPythonパッケージ管理ツールで、依存関係解決が正確で推奨されます。

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

# 2. 依存関係をインストール(仮想環境を自動作成)
uv sync

# 3. クローラーを実行(小紅書を例に)
uv run main.py --platform xhs --lt qrcode --type search

方法2:従来のvenvインストール

BASH
# 1. 仮想環境を作成
python -m venv venv
source venv/bin/activate  # Linux/macOS
# venv\Scripts\activate   # Windows

# 2. 依存関係をインストール
pip install -r requirements.txt

# 3. Playwrightブラウザドライバをインストール(非CDPモードに必要)
playwright install

# 4. クローラーを実行
python main.py --platform xhs --lt qrcode --type search

設定ファイルの説明

コア設定は config/base_config.py にあり、よく使うパラメータ:

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

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

# ログイン方法:qrcode | phone | cookie
LOGIN_TYPE = "qrcode"

# クロールモード:search | detail | creator
CRAWLER_TYPE = "search"

# IPプロキシ有効化
ENABLE_IP_PROXY = False

# コメントクロール有効化
ENABLE_GET_COMMENTS = True

# 2次コメント有効化
ENABLE_GET_SUB_COMMENTS = False

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

# 単一プラットフォーム最大クロール数
CRAWLER_MAX_NOTES_COUNT = 15

# 同時実行数
MAX_CONCURRENCY_NUM = 1

# クロール間隔(秒)
CRAWLER_MAX_SLEEP_SEC = 2

プラットフォーム固有の設定は各プラットフォーム専用ファイルにあります。例:config/xhs_config.py、config/dy_config.py など。

各プラットフォーム収集実践

MediaCrawlerのコマンドラインインターフェースは統一されており簡潔です。コアパラメータは3つだけ:--platform(プラットフォーム)、--lt(ログイン方法)、--type(クロールモード)。以下、小紅書を例に完全な収集フローを示します。

小紅書収集

1. キーワード検索モード

BASH
# config/base_config.py を修正
PLATFORM = "xhs"
KEYWORDS = "AIアート,Stable Diffusion"
CRAWLER_TYPE = "search"
ENABLE_GET_COMMENTS = True  # コメント収集有効化

# 実行
uv run main.py --platform xhs --lt qrcode --type search

初回実行時にブラウザが立ち上がり、スマホの小紅書でQRコードスキャンしてログインします。ログイン成功後Cookieは自動キャッシュされ、次回実行時に再スキャンは不要です。

2. 指定投稿詳細モード

config/xhs_config.py で対象投稿URLを設定:

PYTHON
XHS_SPECIFIED_NOTE_URL_LIST = [
    "https://www.xiaohongshu.com/explore/xxxxx?xsec_token=xxx",
    # 複数追加可能
]

そして実行:

BASH
uv run main.py --platform xhs --lt qrcode --type detail

3. クリエイターページモード

config/xhs_config.py でクリエイターページURLを設定:

PYTHON
XHS_CREATOR_ID_LIST = [
    "https://www.xiaohongshu.com/user/profile/xxxxx?xsec_token=xxx",
]

実行:

BASH
uv run main.py --platform xhs --lt qrcode --type creator

Douyin収集

DouyinはNode.js環境が必要です(JS署名用)。config/dy_config.py を設定:

PYTHON
# キーワード検索
KEYWORDS = "Pythonチュートリアル,プログラミング入門"

# 指定動画URL
DOUYIN_SPECIFIED_NOTE_URL_LIST = [
    "https://www.douyin.com/video/xxxxx",
]

コマンド実行:

BASH
uv run main.py --platform dy --lt qrcode --type search

Douyinのログインフローは小紅書と同様、QRコードスキャン後Cookieがローカルにキャッシュされます。

Bilibili収集

Bilibiliは動画系プラットフォームの典型例です。config/bilibili_config.py を設定:

PYTHON
# 検索キーワード
KEYWORDS = "OSSプロジェクト,GitHub"

# 指定動画BV番号
BILIBILI_SPECIFIED_NOTE_URL_LIST = [
    "https://www.bilibili.com/video/BVxxxxxx",
]

# UP主ページ
BILIBILI_CREATOR_ID_LIST = [
    "https://space.bilibili.com/xxxxx",
]

実行:

BASH
uv run main.py --platform bili --lt qrcode --type search

Bilibiliのデータ構造は比較的標準的で、収集成功率が高いです。

Weibo、Kuaishou、貼吧、知乎

他のプラットフォームの設定方法も同様で、config/ 下の対応する設定ファイルを変更するだけです:

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

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

# Baidu貼吧
uv run main.py --platform tieba --lt qrcode --type search

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

知乎とKuaishouもNode.js環境が必要です。

WebUI可視化インターフェース

コマンドラインを使いたくない場合、MediaCrawlerはWebUIを提供しています:

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

# ターミナル2:フロントエンド起動
cd webui
npm install
npm run dev

http://localhost:5173/ にアクセスすると、ブラウザでパラメータ設定、ログ確認、データプレビューが可能です。

データ保存とエクスポート

MediaCrawlerは7種類のデータ保存形式に対応し、SAVE_DATA_OPTION で設定します:

CSV / JSON / JSONL

最もシンプルなファイル保存方式で、データは data/{platform}/ ディレクトリに保存されます。

PYTHON
SAVE_DATA_OPTION = "csv"   # または "json" / "jsonl"

CSVはExcelで開いて確認するのに適し、JSON/JSONLはプログラム処理に適しています。

SQLite

軽量データベースで、追加インストール不要、単一マシンでの使用に適しています。

PYTHON
SAVE_DATA_OPTION = "sqlite"

初回実行時にデータベースとテーブル構造が自動作成され、重複排除をサポートします。

MySQL / PostgreSQL

本番環境推奨で、大規模データ保存とクエリをサポートします。

PYTHON
SAVE_DATA_OPTION = "mysql"  # または "postgres"

.env ファイルでデータベース接続を設定する必要があります:

BASH
MYSQL_DB_HOST=localhost
MYSQL_DB_PORT=3306
MYSQL_DB_USER=root
MYSQL_DB_PWD=your_password
MYSQL_DB_NAME=media_crawler

MongoDB

ドキュメント型データベースで、構造が固定されていないデータの保存に適しています。

PYTHON
SAVE_DATA_OPTION = "mongodb"

.env を設定:

BASH
MONGODB_HOST=localhost
MONGODB_PORT=27017
MONGODB_DB_NAME=media_crawler

Excel

直接 .xlsx ファイルを出力し、非技術者が簡単に確認できます。

PYTHON
SAVE_DATA_OPTION = "excel"

データフィールド説明

小紅書を例にすると、収集されるデータには以下が含まれます:

  • 投稿情報:タイトル、内容、いいね数、お気に入り数、コメント数、投稿時間、タグ
  • コメント情報:コメント内容、ユーザーニックネーム、いいね数、返信数、時間
  • クリエイター情報:ニックネーム、フォロワー数、獲得いいね数、作品数

全フィールドはJSON形式で保存され、後続分析に便利です。

高度な使い方

定期収集と増分更新

MediaCrawler自体にはスケジューリング機能はありませんが、cronやAPSchedulerと組み合わせることができます:

BASH
# Linux crontab 例:毎日午前10時に収集
0 10 * * * cd /path/to/MediaCrawler && uv run main.py --platform xhs --lt cookie --type search

増分更新の鍵はデータベースの重複排除機能を利用することです。SQLiteやMySQLで保存する場合、MediaCrawlerは既存レコードを自動スキップします(投稿IDベース)。同じ設定で定期的に実行するだけで、新規コンテンツのみ収集できます。

IPプロキシプール設定

大規模収集時には、プラットフォームのリスク管理を回避するためIPプロキシの有効化を推奨します:

PYTHON
# config/base_config.py
ENABLE_IP_PROXY = True
IP_PROXY_POOL_COUNT = 2  # プロキシプール数
IP_PROXY_PROVIDER_NAME = "kuaidaili"  # kuaidaili | wandouhttp | static をサポート

.env ファイルでプロキシサービスのキーを設定:

BASH
# 快代理設定
KDL_SECERT_ID=your_secret_id
KDL_SIGNATURE=your_signature
KDL_USER_NAME=your_username
KDL_USER_PWD=your_password

静的プロキシも使用可能:

PYTHON
IP_PROXY_PROVIDER_NAME = "static"
STATIC_PROXY_URL = "http://user:password@proxy.example.com:8080"

同時実行制御とリクエスト間隔

PYTHON
# 同時実行数(1-3推奨、高すぎるとリスク管理トリガーになりやすい)
MAX_CONCURRENCY_NUM = 1

# リクエスト間隔(秒、1-2秒のランダム)
CRAWLER_MAX_SLEEP_SEC = 2

# 単一プラットフォーム最大収集数
CRAWLER_MAX_NOTES_COUNT = 15

小規模からテスト開始し、徐々に収集量を増やすことを推奨します。過度な同時実行と高頻度はアカウント制限やIPブロックの原因になります。

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

MediaCrawlerには収集したコメントデータに基づくワードクラウド生成機能が組み込まれています:

PYTHON
# config/base_config.py
ENABLE_GET_WORDCLOUD = True

# カスタム単語(オプション)
CUSTOM_WORDS = {
    "AIアート": "技術",
    "Stable Diffusion": "ツール",
}

# ストップワードファイル
STOP_WORDS_FILE = "./docs/hit_stopwords.txt"

実行後、data/ ディレクトリにワードクラウド画像(PNG形式)が生成され、コメントのホットスポットを直感的に表示します。

コンプライアンスと法的リスク

重要なお知らせ:クローラー技術の使用は法律とプラットフォームの利用規約を遵守する必要があります。

法的境界線

「中華人民共和国ネットワーク安全法」「データ安全法」「個人情報保護法」および クローラー違法違法案件集 によると、以下の行為は違法となる可能性があります:

  • 許可なく個人情報を収集:ユーザープライバシーデータ(電話番号、身分証、住所など)
  • 技術的保護措置を回避:認証コードを突破、身元を偽装してリスク管理を回避
  • 大規模収集と商業化:収集データを商業目的に使用
  • プラットフォームの正常な運営を妨害:高頻度リクエストによるサーバー負荷過大

コンプライアンス推奨

  1. 公開データのみ収集:特別な権限が必要なコンテンツは収集しない
  2. 収集頻度を制御:適切なリクエスト間隔を設定し、プラットフォームに負荷をかけない
  3. 商業目的に使用しない:MediaCrawlerはNON-COMMERCIAL LEARNING LICENSEを採用、商業使用禁止
  4. robots.txtを遵守:プラットフォームのクローラープロトコルを尊重
  5. ユーザープライバシーを保護:収集したユーザー個人情報を公開しない

免責事項

MediaCrawlerプロジェクトは学習と研究目的のみ提供されています。使用者は本ツールの使用により生じるすべての法的責任を負うものとします。作者はいかなる違法行為にも責任を負いません。

他のツールとの比較

ツール 対応プラットフォーム 技術スタック アンチ検出能力 学習曲線 適用シーン
MediaCrawler 7大中国語プラットフォーム Python + Playwright CDPモード、強 中程度 中国語ソーシャルメディアデータ収集
Snscrape Twitter/Instagram等 Python 弱、ブロックされやすい 低い 海外プラットフォーム軽量収集
Tweepy Twitter専用 Python 公式API依存 低い Twitter公式API開発
Scrapy 汎用 Python + Twisted 独自実装必要 高い 大規模カスタムクローラー
Selenium 汎用 Python + WebDriver 中程度 中程度 インタラクティブなWeb自動化
Playwright 汎用 Python/Node 強 中程度 モダンWeb自動化

MediaCrawlerの優位性

  • オールインワンカバレッジ:1つのツールで7大中国語プラットフォーム対応、各プラットフォームごとの開発不要
  • リバースエンジニアリング不要:Playwright + CDPモードベース、複雑な署名アルゴリズムを回避
  • すぐに使える:設定ファイルが明確、コマンドラインパラメータが簡潔
  • アクティブなコミュニティ:GitHub Star数継続的に増加、問題対応が迅速

他のツールを選ぶべき時

  • Snscrape/Tweepy:Twitter/Instagram等の海外プラットフォームを収集する必要がある
  • Scrapy:大規模で高同時実行のカスタムクローラーを構築する必要がある
  • Selenium/Playwright:専用ソーシャルメディア収集ではなく、汎用Web自動化機能が必要

よくある質問 FAQ

1. MediaCrawlerでのデータ収集は合法ですか?

MediaCrawler自体は合法な学習ツールですが、使用方法が合法性を決定します。公開データのみ収集し、頻度を制御し、商業目的に使用せず、プラットフォームの利用規約を遵守すれば、通常法的問題はありません。しかし、個人情報収集、技術的保護回避、大規模商業利用は「データ安全法」「個人情報保護法」に抵触する可能性があります。法的境界線については クローラー違法違法案件集 を参照することをお勧めします。

2. QRコードスキャンログインが失敗したり、頻繁に再スキャンを求められたりする理由は?

よくある原因: - Cookie期限切れ:プラットフォームは定期的にログイン状態をクリアします。再スキャンで解決 - リスク管理トリガー:頻繁な収集や異常行動によりアカウント制限。収集頻度を下げることを推奨 - ネットワーク問題:プロキシIPが不安定またはプラットフォームにマークされた。IP切り替えまたはプロキシ無効化を試す - ブラウザバージョンが低い:CDPモードはChrome 144+が必要。ブラウザを更新

3. 収集成功率を上げるには?

  • CDPモード有効化:本物のブラウザ環境を使用し、検出リスクを低減
  • 収集頻度制御:CRAWLER_MAX_SLEEP_SEC = 2-5 を設定し、高頻度リクエストを回避
  • IPプロキシ使用:大規模収集時にプロキシプールを有効化、リクエストソースを分散
  • 1アカウント1IP:複数アカウントで同一IP共有を避け、関連リスク管理トリガーを防止
  • 時間帯をずらす:プラットフォームのピーク時間(夜8-10時等)を避ける

4. 収集したデータを商業分析に使用できますか?

できません。MediaCrawlerはNON-COMMERCIAL LEARNING LICENSE 1.1を採用しており、商業利用を明確に禁止しています。商業利用が必要な場合: - プラットフォーム公式に連絡しデータサービスを購入 - プラットフォームが提供する公式APIを使用(Weiboオープンプラットフォーム、Bilibiliオープンプラットフォーム等) - 法律専門家に相談し、データ収集と使用が法規に適合することを確認

5. Windows/Mac/Linuxに対応していますか?

完全対応。MediaCrawlerはPythonベースでクロスプラットフォーム互換です。Windowsユーザーの注意: - パス区切り文字はバックスラッシュ \ - 仮想環境有効化コマンド:venv\Scripts\activate - Chromeパス例:C:\Program Files\Google\Chrome\Application\chrome.exe

Mac/Linuxユーザー: - 仮想環境有効化コマンド:source venv/bin/activate - Chromeパス例:/Applications/Google Chrome.app/Contents/MacOS/Google Chrome

まとめ

MediaCrawlerは現在最も包括的な中国語ソーシャルメディアクローラーフレームワークで、1つのツールで小紅書、Douyin、Kuaishou、Bilibili、Weibo、貼吧、知乎の7大プラットフォームをカバーします。その核心的価値は:

  • 技術的ハードル低下:Playwright + CDPモードベース、複雑な暗号化アルゴリズムのリバースエンジニアリング不要
  • オールインワン収集:統一されたコマンドラインインターフェース、簡単な設定、すぐに使える
  • 柔軟な保存:CSV/JSON/SQLite/MySQL/MongoDB/Excel 7形式対応
  • アンチ検出能力:CDPモード + IPプロキシプール、ブロックリスクを低減

しかし、清醒に認識すべき点もあります:

  • 法的リスク:法律法規を遵守し、学習と研究のみに使用
  • プラットフォームリスク管理:収集頻度が高すぎると制限またはブロックされる
  • 非商業用途:LICENSEが商業化使用を明確に禁止

データアナリスト、研究者、開発者で、学習、研究、個人プロジェクトのために中国語ソーシャルメディアデータを収集する必要がある場合、MediaCrawlerは最も試す価値のあるツールです。ただし、常にコンプライアンス使用、プラットフォームルール尊重、ユーザープライバシー保護を心がけてください。

プロジェクトアドレス:github.com/NanmiCoder/MediaCrawler

この記事が役に立ったら、プロジェクトにStarを付けて作者をサポートしてください!

関連記事: