MediaCrawler 是什麼?
在資料驅動的時代,社群媒體平台蘊含著海量的使用者洞察、內容趨勢和輿情資訊。然而,手動收集這些資料既低效又不可持續。MediaCrawler 正是為解決這一痛點而生的開源專案——它是一個功能強大的多平台自媒體資料採集工具,由開發者 NanmiCoder 維護,在 GitHub 上已獲得數萬 Star,是目前最全面的中文社群媒體爬蟲框架。
MediaCrawler 的核心價值在於:一個工具覆蓋 7 大主流平台,無需為每個平台單獨開發爬蟲。它基於 Python 非同步架構,利用 Playwright 瀏覽器自動化處理登入態,再透過保留的 Cookie 環境呼叫平台 API 獲取簽名參數,完全無需逆向複雜的加密演算法,大幅降低了技術門檻。
適用場景
- 輿情分析:監控品牌在各平台的口碑和使用者回饋
- 內容趨勢研究:追蹤熱門話題、爆款內容的共性特徵
- 競品分析:採集競品帳號的發佈頻率、互動資料
- 學術研究:社群媒體傳播模式、使用者行為分析
- 資料視覺化:將採集的資料生成詞雲圖、趨勢圖表
支援的 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/ # 登入態快取管理
工作流程
- 登入階段:Playwright 開啟瀏覽器,使用者掃碼/輸入手機號碼,獲取 Cookie
- 快取階段:Cookie 儲存到本地(
cache/{platform}_cookies.json) - 爬取階段:複用 Cookie 環境,透過 JS 運算式獲取簽名參數,呼叫平台 API
- 儲存階段:將採集的資料寫入 CSV/JSON/資料庫
CDP 模式:反偵測的殺手鐧
MediaCrawler 預設啟用 CDP(Chrome DevTools Protocol)模式,連線使用者已有的 Chrome 瀏覽器。相比 Playwright 的無頭瀏覽器,CDP 模式的優勢在於:
- 真實瀏覽器指紋:使用使用者實際安裝的 Chrome,包含所有擴充套件、外掛程式和設定
- 更低的偵測風險:瀏覽器行為模式更接近真實使用者
- 繼承登入狀態:自動複用已有的 Cookie 和瀏覽歷史
啟用方式(config/base_config.py):
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 套件管理工具,依賴解析準確,推薦使用。
# 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 安裝
# 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,常用參數:
# 平台選擇: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. 關鍵字搜尋模式
# 修改 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:
XHS_SPECIFIED_NOTE_URL_LIST = [
"https://www.xiaohongshu.com/explore/xxxxx?xsec_token=xxx",
# 可新增多個
]
然後執行:
uv run main.py --platform xhs --lt qrcode --type detail
3. 創作者主頁模式
在 config/xhs_config.py 中設定創作者主頁 URL:
XHS_CREATOR_ID_LIST = [
"https://www.xiaohongshu.com/user/profile/xxxxx?xsec_token=xxx",
]
執行:
uv run main.py --platform xhs --lt qrcode --type creator
抖音採集
抖音需要 Node.js 環境(用於 JS 簽名)。設定 config/dy_config.py:
# 關鍵字搜尋
KEYWORDS = "Python教學,程式設計入門"
# 指定影片 URL
DOUYIN_SPECIFIED_NOTE_URL_LIST = [
"https://www.douyin.com/video/xxxxx",
]
執行命令:
uv run main.py --platform dy --lt qrcode --type search
抖音的登入流程與小紅書類似,掃碼後 Cookie 快取到本地。
B 站採集
B 站是影片類平台的典型代表,設定 config/bilibili_config.py:
# 搜尋關鍵字
KEYWORDS = "開源專案,GitHub"
# 指定影片 BV 號
BILIBILI_SPECIFIED_NOTE_URL_LIST = [
"https://www.bilibili.com/video/BVxxxxxx",
]
# UP 主主頁
BILIBILI_CREATOR_ID_LIST = [
"https://space.bilibili.com/xxxxx",
]
執行:
uv run main.py --platform bili --lt qrcode --type search
B 站的資料結構相對規範,採集成功率較高。
微博、快手、貼吧、知乎
其他平台的設定方式類似,只需修改 config/ 下對應的設定檔案,然後執行:
# 微博
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:
# 終端 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}/ 目錄下。
SAVE_DATA_OPTION = "csv" # 或 "json" / "jsonl"
CSV 適合用 Excel 開啟檢視,JSON/JSONL 適合程式處理。
SQLite
輕量級資料庫,無需額外安裝,適合單機使用。
SAVE_DATA_OPTION = "sqlite"
首次執行自動建立資料庫和表結構,支援去重。
MySQL / PostgreSQL
生產環境推薦,支援大規模資料儲存和查詢。
SAVE_DATA_OPTION = "mysql" # 或 "postgres"
需要在 .env 檔案設定資料庫連線:
MYSQL_DB_HOST=localhost
MYSQL_DB_PORT=3306
MYSQL_DB_USER=root
MYSQL_DB_PWD=your_password
MYSQL_DB_NAME=media_crawler
MongoDB
文件型資料庫,適合儲存結構不固定的資料。
SAVE_DATA_OPTION = "mongodb"
設定 .env:
MONGODB_HOST=localhost
MONGODB_PORT=27017
MONGODB_DB_NAME=media_crawler
Excel
直接輸出 .xlsx 檔案,方便非技術人員檢視。
SAVE_DATA_OPTION = "excel"
資料欄位說明
以小紅書為例,採集的資料包含:
- 筆記資訊:標題、內容、按讚數、收藏數、評論數、發佈時間、標籤
- 評論資訊:評論內容、使用者暱稱、按讚數、回覆數、時間
- 創作者資訊:暱稱、粉絲數、獲讚數、作品數
所有欄位以 JSON 格式儲存,便於後續分析。
進階用法
定時採集與增量更新
MediaCrawler 本身不包含定時排程功能,但可以配合 cron 或 APScheduler 實現:
# 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 代理以避免觸發平台風控:
# config/base_config.py
ENABLE_IP_PROXY = True
IP_PROXY_POOL_COUNT = 2 # 代理池數量
IP_PROXY_PROVIDER_NAME = "kuaidaili" # 支援 kuaidaili | wandouhttp | static
在 .env 檔案設定代理服務商的金鑰:
# 快代理設定
KDL_SECERT_ID=your_secret_id
KDL_SIGNATURE=your_signature
KDL_USER_NAME=your_username
KDL_USER_PWD=your_password
也可以使用靜態代理:
IP_PROXY_PROVIDER_NAME = "static"
STATIC_PROXY_URL = "http://user:password@proxy.example.com:8080"
併發控制與請求間隔
# 併發數(建議 1-3,過高易觸發風控)
MAX_CONCURRENCY_NUM = 1
# 請求間隔(秒,隨機 1-2 秒)
CRAWLER_MAX_SLEEP_SEC = 2
# 單平台最大採集數量
CRAWLER_MAX_NOTES_COUNT = 15
建議從小規模開始測試,逐步增加採集量。過高的併發和頻率會導致帳號被限制或 IP 被封鎖。
評論詞雲生成
MediaCrawler 內建了詞雲圖生成功能,基於採集的評論資料:
# config/base_config.py
ENABLE_GET_WORDCLOUD = True
# 自訂詞組(可選)
CUSTOM_WORDS = {
"AI繪畫": "技術",
"Stable Diffusion": "工具",
}
# 停用詞檔案
STOP_WORDS_FILE = "./docs/hit_stopwords.txt"
執行後會在 data/ 目錄生成詞雲圖(PNG 格式),直觀展示評論熱點。
合規性與法律風險
重要提示:爬蟲技術的使用必須遵守法律法規和平台服務條款。
法律邊界
根據《中華人民共和國網路安全法》《資料安全法》《個人資訊保護法》以及爬蟲違法違規案件合集,以下行為可能觸犯法律:
- 未經授權採集個人資訊:使用者隱私資料(手機號碼、身分證、住址等)
- 繞過技術保護措施:破解驗證碼、偽造身份繞過風控
- 大規模採集並商業化:將採集資料用於商業目的
- 干擾平台正常運營:高頻請求導致伺服器負載過高
合規建議
- 僅採集公開資料:不採集需要特殊權限才能存取的內容
- 控制採集頻率:設定合理的請求間隔,避免對平台造成負擔
- 不用於商業用途:MediaCrawler 採用 NON-COMMERCIAL LEARNING LICENSE,禁止商業使用
- 遵守 robots.txt:尊重平台的爬蟲協議
- 保護使用者隱私:不公開傳播採集到的使用者個人資訊
免責聲明
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 支援作者!
相關閱讀: