MediaCrawler 是什麼?

在資料驅動的時代,社群媒體平台蘊含著海量的使用者洞察、內容趨勢和輿情資訊。然而,手動收集這些資料既低效又不可持續。MediaCrawler 正是為解決這一痛點而生的開源專案——它是一個功能強大的多平台自媒體資料採集工具,由開發者 NanmiCoder 維護,在 GitHub 上已獲得數萬 Star,是目前最全面的中文社群媒體爬蟲框架。

MediaCrawler 的核心價值在於:一個工具覆蓋 7 大主流平台,無需為每個平台單獨開發爬蟲。它基於 Python 非同步架構,利用 Playwright 瀏覽器自動化處理登入態,再透過保留的 Cookie 環境呼叫平台 API 獲取簽名參數,完全無需逆向複雜的加密演算法,大幅降低了技術門檻。

專案位址:github.com/NanmiCoder/MediaCrawler

適用場景

  • 輿情分析:監控品牌在各平台的口碑和使用者回饋
  • 內容趨勢研究:追蹤熱門話題、爆款內容的共性特徵
  • 競品分析:採集競品帳號的發佈頻率、互動資料
  • 學術研究:社群媒體傳播模式、使用者行為分析
  • 資料視覺化:將採集的資料生成詞雲圖、趨勢圖表

支援的 7 大平台與功能矩陣

MediaCrawler 目前支援以下平台,且每個平台的功能覆蓋高度一致:

平台 代號 關鍵字搜尋 指定貼文爬取 二級評論 創作者主頁 登入快取 IP 代理 詞雲圖
小紅書 xhs ✅ ✅ ✅ ✅ ✅ ✅ ✅
抖音 dy ✅ ✅ ✅ ✅ ✅ ✅ ✅
快手 ks ✅ ✅ ✅ ✅ ✅ ✅ ✅
B 站 bili ✅ ✅ ✅ ✅ ✅ ✅ ✅
微博 wb ✅ ✅ ✅ ✅ ✅ ✅ ✅
百度貼吧 tieba ✅ ✅ ✅ ✅ ✅ ✅ ✅
知乎 zhihu ✅ ✅ ✅ ✅ ✅ ✅ ✅

三種爬取模式:

  • search:按關鍵字搜尋並爬取相關貼文/影片
  • detail:指定貼文 ID 或 URL,精確爬取詳情和評論
  • creator:爬取指定創作者主頁的所有內容

三種登入方式:

  • qrcode:掃描 QR Code 登入(推薦,最安全)
  • phone:手機號碼 + 驗證碼登入
  • cookie:直接填入已有 Cookie

技術架構:Python + Playwright 的巧妙設計

MediaCrawler 的技術選型體現了實用主義哲學。它沒有選擇傳統的 HTTP 請求 + 簽名逆向路線,而是採用 Playwright 瀏覽器自動化來處理登入態,再透過保留的 Cookie 環境呼叫平台 API。這種設計的核心優勢是:無需逆向複雜的加密演算法。

核心架構分層

MediaCrawler
├── main.py              # 程式入口,爬蟲工廠
├── config/              # 設定管理(平台設定、基礎設定)
├── media_platform/      # 7 大平台爬蟲實現
│   ├── xhs/            # 小紅書
│   ├── douyin/         # 抖音
│   ├── kuaishou/       # 快手
│   ├── bilibili/       # B站
│   ├── weibo/          # 微博
│   ├── tieba/          # 百度貼吧
│   └── zhihu/          # 知乎
├── store/              # 資料儲存層(CSV/JSON/SQLite/MySQL/MongoDB)
├── proxy/              # IP 代理池管理
└── cache/              # 登入態快取管理

工作流程

  1. 登入階段:Playwright 開啟瀏覽器,使用者掃碼/輸入手機號碼,獲取 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+(抖音和知乎需要)
  • Chrome 瀏覽器(推薦最新版)

方式一: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

方式二:傳統 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

# 是否啟用二級評論
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 的命令列介面統一且簡潔,核心參數只有三個:--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

首次執行會彈出瀏覽器,用手機小紅書掃碼登入。登入成功後 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

抖音採集

抖音需要 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

抖音的登入流程與小紅書類似,掃碼後 Cookie 快取到本地。

B 站採集

B 站是影片類平台的典型代表,設定 config/bilibili_config.py:

PYTHON
# 搜尋關鍵字
KEYWORDS = "開源專案,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

B 站的資料結構相對規範,採集成功率較高。

微博、快手、貼吧、知乎

其他平台的設定方式類似,只需修改 config/ 下對應的設定檔案,然後執行:

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

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

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

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

知乎和快手同樣需要 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 中等 中等 需要互動的網頁自動化
Playwright 通用 Python/Node 強 中等 現代網頁自動化

MediaCrawler 的優勢

  • 一站式覆蓋:一個工具支援 7 大中文平台,無需為每個平台單獨開發
  • 無需逆向:基於 Playwright + CDP 模式,繞過複雜的簽名演算法
  • 開箱即用:設定檔案清晰,命令列參數簡潔
  • 社群活躍:GitHub Star 數持續增長,問題回應及時

何時選擇其他工具

  • Snscrape/Tweepy:需要採集 Twitter/Instagram 等海外平台
  • Scrapy:需要建構大規模、高併發的客製化爬蟲
  • Selenium/Playwright:需要通用的網頁自動化能力,而非專門的社群媒體採集

常見問題 FAQ

1. MediaCrawler 採集資料是否合法?

MediaCrawler 本身是合法的學習工具,但使用方式決定合法性。僅採集公開資料、控制頻率、不用於商業用途、遵守平台服務條款,一般不會有法律問題。但採集個人資訊、繞過技術保護、大規模商業化使用可能觸犯《資料安全法》《個人資訊保護法》。建議參考爬蟲違法違規案件合集了解法律邊界。

2. 為什麼掃碼登入失敗或頻繁要求重新掃碼?

常見原因: - Cookie 過期:平台會定期清理登入態,重新掃碼即可 - 觸發風控:頻繁採集或異常行為導致帳號被限制,建議降低採集頻率 - 網路問題:代理 IP 不穩定或被平台標記,嘗試切換 IP 或關閉代理 - 瀏覽器版本過低:CDP 模式需要 Chrome 144+,更新瀏覽器

3. 如何提高採集成功率?

  • 啟用 CDP 模式:使用真實瀏覽器環境,降低偵測風險
  • 控制採集頻率:設定 CRAWLER_MAX_SLEEP_SEC = 2-5,避免高頻請求
  • 使用 IP 代理:大規模採集時啟用代理池,分散請求來源
  • 單帳號單 IP:避免多帳號共用一個 IP,容易觸發關聯風控
  • 錯峰採集:避開平台高峰期(如晚上 8-10 點)

4. 採集的資料可以用於商業分析嗎?

不可以。MediaCrawler 採用 NON-COMMERCIAL LEARNING LICENSE 1.1,明確禁止商業用途。如果需要商業使用,建議: - 聯絡平台官方購買資料服務 - 使用平台提供的官方 API(如微博開放平台、B 站開放平台) - 諮詢法律專家,確保資料採集和使用符合法規

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 是目前最全面的中文社群媒體爬蟲框架,一個工具覆蓋小紅書、抖音、快手、B 站、微博、貼吧、知乎 7 大平台。它的核心價值在於:

  • 降低技術門檻:基於 Playwright + CDP 模式,無需逆向複雜的加密演算法
  • 一站式採集:統一的命令列介面,設定簡單,開箱即用
  • 靈活的儲存:支援 CSV/JSON/SQLite/MySQL/MongoDB/Excel 7 種格式
  • 反偵測能力:CDP 模式 + IP 代理池,降低被封鎖風險

但也要清醒認識到:

  • 法律風險:必須遵守法律法規,僅用於學習和研究
  • 平台風控:採集頻率過高會被限制或封鎖
  • 非商業用途:LICENSE 明確禁止商業化使用

如果你是資料分析師、研究人員或開發者,需要採集中文社群媒體資料用於學習、研究或個人專案,MediaCrawler 是目前最值得嘗試的工具。但請始終牢記:合規使用,尊重平台規則,保護使用者隱私。

專案位址:github.com/NanmiCoder/MediaCrawler

如果覺得本文有幫助,歡迎給專案點個 Star 支援作者!

相關閱讀: