Skill: excalibur9527/mediacrawler-skill (version 0.1.4)

--- name: media-crawler description: 基于 MediaCrawler 的多平台公开信息采集工具，支持安装、命令行运行、WebUI、结果定位与常用任务模板。 --- # MediaCrawler 基于 [MediaCrawler](https://github.com/NanmiCoder/MediaCrawler.git) 的多平台公开信息采集工具。 ## 支持平台 - 小红书（xhs） - 抖音（dy） - 快手（ks） - B站（bili） - 微博（wb） - 贴吧（tieba） - 知乎（zhihu） ## 功能特性 - 自动安装依赖 - 关键词搜索采集 - 指定帖子/内容 ID 采集 - 创作者主页采集 - 评论/二级评论抓取 - 登录态缓存 - WebUI 可视化操作 - 多种数据存储（CSV, JSON, JSONL, Excel, SQLite, MySQL, MongoDB） - 结果文件快速定位 ## Usage ### 安装环境 ```bash bash scripts/setup.sh ``` ### 查看帮助 ```bash cd "$PROJECT_PATH" uv run main.py --help ``` ### 运行采集 #### 小红书 - 关键词搜索 ```bash uv run main.py --platform xhs --lt qrcode --type search --keywords "护肤" --headless false ``` #### 抖音 - 关键词搜索 ```bash uv run main.py --platform dy --lt qrcode --type search --keywords "护肤" --headless false ``` #### 指定帖子详情抓取 ```bash uv run main.py --platform xhs --lt qrcode --type detail --specified_id "帖子ID1,帖子ID2" ``` #### 创作者主页抓取 ```bash uv run main.py --platform xhs --lt qrcode --type creator --creator_id "创作者ID1" ``` ### 启动 WebUI ```bash uv run uvicorn api.main:app --port 8080 --reload ``` 启动后访问： ```text http://127.0.0.1:8080 ``` ## 数据存储 根据 `config/base_config.py` 中： ```python SAVE_DATA_OPTION = "jsonl" SAVE_DATA_PATH = "" ``` 默认结果保存到： ```bash data/{平台}/{存储格式}/ ``` 例如抖音 JSONL： ```bash data/douyin/jsonl/search_contents_YYYY-MM-DD.jsonl data/douyin/jsonl/search_comments_YYYY-MM-DD.jsonl data/douyin/jsonl/search_creators_YYYY-MM-DD.jsonl ``` 例如小红书 JSONL： ```bash data/xiaohongshu/jsonl/search_contents_YYYY-MM-DD.jsonl data/xiaohongshu/jsonl/search_comments_YYYY-MM-DD.jsonl ``` 如果你设置了： ```bash --save_data_path "/your/custom/path" ``` 则结果会写入你指定的目录。 ## 快速查看结果 ```bash bash scripts/show_results.sh ``` 该脚本会列出当前项目下 `data/` 目录中的结果文件。 ## 前置依赖 - Git - uv（脚本可自动安装） - Playwright 浏览器驱动（脚本自动安装 Chromium） ## 注意事项 - 仅供学习和研究使用 - 禁止用于非法用途或侵犯他人合法权益 - 禁止用于商业化违规爬取 - 执行前应确认目标行为合法合规

path: README.md
content: # MediaCrawler Automation

基于 [MediaCrawler](https://github.com/NanmiCoder/MediaCrawler.git) 的多平台公开信息采集 skill，支持自动安装、命令行运行、WebUI、常用任务模板和结果定位。

## 这个 skill 做什么

- 自动检测 `git`
- 自动检测并安装 `uv`
- 从 GitHub 拉取或更新 MediaCrawler 项目
- 执行 `uv sync`
- 安装 Playwright Chromium
- 执行一次健康检查，确认主程序可以启动
- 提供常用搜索命令模板
- 提供 WebUI 启动命令
- 提供结果文件定位命令

## 默认项目目录

默认安装到：

```bash
$HOME/MediaCrawler
```

也可以通过环境变量覆盖：

```bash
PROJECT_PATH=/your/path/to/MediaCrawler
bash scripts/setup.sh
```

## 安装

```bash
bash scripts/setup.sh
```

## 安装脚本行为

脚本会依次执行：

1. 检查 `git`
2. 检查 `uv`，若缺失则尝试自动安装
3. 克隆项目；若目录已存在且是正确仓库，则执行 `git pull --ff-only`
4. 执行 `uv sync`（失败时自动重试一次）
5. 安装 Playwright Chromium
6. 执行 `uv run main.py --help` 做健康检查

## 使用方法

### 查看帮助

```bash
cd "$PROJECT_PATH"
uv run main.py --help
```

### 运行主程序

```bash
cd "$PROJECT_PATH"
uv run main.py
```

### 启动 WebUI

```bash
cd "$PROJECT_PATH"
uv run uvicorn api.main:app --port 8080 --reload
```

启动后访问：

```text
http://127.0.0.1:8080
```

### 抖音关键词搜索示例

```bash
cd "$PROJECT_PATH"
uv run main.py --platform dy --lt qrcode --type search --keywords "护肤" --headless false
```

### 小红书关键词搜索示例

```bash
cd "$PROJECT_PATH"
uv run main.py --platform xhs --lt qrcode --type search --keywords "护肤" --headless false
```

## 结果文件位置

当 `SAVE_DATA_OPTION = "jsonl"` 且 `SAVE_DATA_PATH = ""` 时，结果默认保存到：

```bash
data/{平台}/{存储格式}/
```

例如抖音：

```bash
data/douyin/jsonl/search_contents_YYYY-MM-DD.jsonl
data/douyin/jsonl/search_comments_YYYY-MM-DD.jsonl
data/douyin/jsonl/search_creators_YYYY-MM-DD.jsonl
```

例如小红书：

```bash
data/xiaohongshu/jsonl/search_contents_YYYY-MM-DD.jsonl
data/xiaohongshu/jsonl/search_comments_YYYY-MM-DD.jsonl
```

也可以通过：

```bash
--save_data_path "/your/custom/path"
```

指定自定义输出目录。

## 预定义命令

| 命令 | 说明 |
|------|------|
| `crawler-init` | 初始化环境（检查环境、拉取仓库、安装依赖、安装浏览器） |
| `crawler-help` | 查看主程序帮助 |
| `crawler-run` | 运行主程序 |
| `crawler-web` | 启动 WebUI（默认端口 8080） |
| `crawler-dy-search` | 抖音关键词搜索模板（二维码登录，有头模式） |
| `crawler-xhs-search` | 小红书关键词搜索模板（二维码登录，有头模式） |
| `crawler-results` | 查看当前结果文件列表 |

## 合规声明

- 仅供学习和研究使用
- 禁止用于非法用途或侵犯他人合法权益
- 执行前请确认目标行为合法合规


path: manifest.json
content: {
  "id": "mediacrawler-automation",
  "name": "MediaCrawler Automation",
  "version": "0.1.4",
  "description": "基于 MediaCrawler 的多平台公开信息采集工具，支持自动检测环境、拉取仓库、安装 uv 依赖、Playwright、WebUI 与结果定位。",
  "author": "ZhouGuang",
  "repository": "https://github.com/NanmiCoder/MediaCrawler.git",
  "type": "terminal",
  "category": "Data Collection",
  "entrypoint": "scripts/setup.sh",
  "commands": {
    "crawler-init": "bash scripts/setup.sh",
    "crawler-help": "uv run main.py --help",
    "crawler-run": "uv run main.py",
    "crawler-web": "uv run uvicorn api.main:app --port 8080 --reload",
    "crawler-dy-search": "uv run main.py --platform dy --lt qrcode --type search --headless false",
    "crawler-xhs-search": "uv run main.py --platform xhs --lt qrcode --type search --headless false",
    "crawler-results": "bash scripts/show_results.sh"
  },
  "env": {
    "PROJECT_PATH": "$HOME/MediaCrawler"
  }
}


path: scripts/setup.sh
content: #!/usr/bin/env bash
set -euo pipefail

REPO_URL="https://github.com/NanmiCoder/MediaCrawler.git"
PROJECT_DIR="${PROJECT_PATH:-$HOME/MediaCrawler}"
PROJECT_DIR="${PROJECT_DIR/#\~/$HOME}"
export UV_HTTP_TIMEOUT="${UV_HTTP_TIMEOUT:-120}"

log() {
  echo "[MediaCrawler Skill] $*"
}

fail() {
  echo "[MediaCrawler Skill] ERROR: $*" >&2
  exit 1
}

log "[1/6] 检查 git ..."
command -v git >/dev/null 2>&1 || fail "未检测到 git，请先安装 git。"

log "[2/6] 检查 uv ..."
if ! command -v uv >/dev/null 2>&1; then
  log "未检测到 uv，开始自动安装..."
  command -v curl >/dev/null 2>&1 || fail "安装 uv 需要 curl，请先安装 curl。"
  curl -LsSf https://astral.sh/uv/install.sh | sh
  export PATH="$HOME/.local/bin:$PATH"
  command -v uv >/dev/null 2>&1 || fail "uv 安装完成，但当前 shell 仍无法找到 uv。"
fi

log "[3/6] 准备项目目录: $PROJECT_DIR"
if [ -d "$PROJECT_DIR" ]; then
  if [ -d "$PROJECT_DIR/.git" ]; then
    REMOTE_URL="$(git -C "$PROJECT_DIR" remote get-url origin 2>/dev/null || true)"
    echo "$REMOTE_URL" | grep -q "NanmiCoder/MediaCrawler" || fail "目录已存在，但不是目标仓库: $PROJECT_DIR"
    log "检测到已有 MediaCrawler 仓库，尝试更新..."
    git -C "$PROJECT_DIR" pull --ff-only || fail "git pull 失败，请检查本地改动或网络。"
  else
    fail "目录已存在但不是 git 仓库: $PROJECT_DIR"
  fi
else
  log "开始克隆项目..."
  git clone "$REPO_URL" "$PROJECT_DIR" || fail "git clone 失败，请检查网络或仓库地址。"
fi

cd "$PROJECT_DIR"

[ -f "pyproject.toml" ] || fail "未找到 pyproject.toml，项目结构异常。"
[ -f "main.py" ] || fail "未找到 main.py，项目结构异常。"

log "[4/6] 使用 uv 同步依赖 ..."
if ! uv sync; then
  log "首次 uv sync 失败，重试一次..."
  uv sync || fail "uv sync 执行失败。"
fi

log "[5/6] 安装 Playwright Chromium ..."
uv run playwright install chromium || fail "Playwright Chromium 安装失败。"

log "[6/6] 执行健康检查 ..."
uv run main.py --help >/dev/null || fail "健康检查失败：无法执行 'uv run main.py --help'。"

log "安装完成。"
log "项目目录: $PROJECT_DIR"
log "帮助命令: cd \"$PROJECT_DIR\" && uv run main.py --help"
log "默认结果目录: $PROJECT_DIR/data"
log "例如抖音 JSONL 结果通常位于: $PROJECT_DIR/data/douyin/jsonl"


path: scripts/show_results.sh
content: #!/usr/bin/env bash
set -euo pipefail

PROJECT_DIR="${PROJECT_PATH:-$HOME/MediaCrawler}"
PROJECT_DIR="${PROJECT_DIR/#\~/$HOME}"
DATA_DIR="$PROJECT_DIR/data"

if [ ! -d "$DATA_DIR" ]; then
  echo "未找到结果目录: $DATA_DIR"
  echo "请先运行爬取任务。"
  exit 1
fi

echo "MediaCrawler 结果文件："
find "$DATA_DIR" -maxdepth 3 -type f | sort | sed -n '1,200p'


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: clean | SkillSpector: suspicious (HIGH)