L’interface est localisée ; les présentations et documents des Skills sont traduits automatiquement par IA dans votre langue. Le code, les commandes, chemins et termes techniques restent en version originale, et le document de l’auteur fait foi.
Explorer les Skills
Productivité · SKILL.md

fanqie-screenshot

fanqie-screenshot

截图番茄小说榜单页面 - 支持新书榜、阅读榜的可视化截图,用于市场分析和竞品研究

Independent GitHub snapshot · Automated classification · Original documentation governs

Documentation de la Skill

GitHub

name: fanqie-screenshot description: "截图番茄小说榜单页面 - 支持新书榜、阅读榜的可视化截图,用于市场分析和竞品研究" allowed-tools: Read, Bash

番茄榜单截图 (fanqie-screenshot)

当用户需要截取番茄小说榜单页面时使用此技能。

触发词

截图榜单、榜单截图、扫榜截图、screenshot rank、截图番茄

使用场景

  • 可视化查看榜单页面布局
  • 保存榜单快照用于对比分析
  • 研究热门书籍封面和排版风格
  • 批量截取多个分类进行市场调研

前置要求

需要安装 Playwright(首次使用会自动安装):

# 创建虚拟环境并安装
python3 -m venv /tmp/playwright_env
source /tmp/playwright_env/bin/activate
pip install playwright -q
python -m playwright install chromium

榜单URL格式

https://fanqienovel.com/rank/{gender}_{type}_{category_id}

参数说明:

  • gender: 1=男频, 0=女频
  • type: 1=新书榜, 2=阅读榜
  • category_id: 分类ID

分类ID映射

男频分类 (19个)

ID分类名ID分类名
1141西方奇幻1140东方仙侠
8科幻末世261都市日常
124都市修真1014都市高武
273历史古代27战神赘婿
263都市种田258传统玄幻
272历史脑洞539悬疑脑洞
262都市脑洞257玄幻脑洞
751悬疑灵异504抗战谍战
746游戏体育718动漫衍生
1016男频衍生

女频分类 (18个)

ID分类名ID分类名
1139古风世情8科幻末世
746游戏体育1015女频衍生
248玄幻言情23种田
79年代267现言脑洞
246宫斗宅斗539悬疑脑洞
253古言脑洞24快穿
749青春甜宠745星光璀璨
747女频悬疑750职场婚恋
748豪门总裁1017民国言情

Python截图代码

单个分类截图

#!/usr/bin/env python3
"""番茄小说榜单截图工具"""
from playwright.sync_api import sync_playwright
import os
from datetime import datetime

# 分类映射
MALE_CATEGORIES = {
    "1141": "西方奇幻", "1140": "东方仙侠", "8": "科幻末世",
    "261": "都市日常", "124": "都市修真", "1014": "都市高武",
    "273": "历史古代", "27": "战神赘婿", "263": "都市种田",
    "258": "传统玄幻", "272": "历史脑洞", "539": "悬疑脑洞",
    "262": "都市脑洞", "257": "玄幻脑洞", "751": "悬疑灵异",
    "504": "抗战谍战", "746": "游戏体育", "718": "动漫衍生",
    "1016": "男频衍生"
}

FEMALE_CATEGORIES = {
    "1139": "古风世情", "8": "科幻末世", "746": "游戏体育",
    "1015": "女频衍生", "248": "玄幻言情", "23": "种田",
    "79": "年代", "267": "现言脑洞", "246": "宫斗宅斗",
    "539": "悬疑脑洞", "253": "古言脑洞", "24": "快穿",
    "749": "青春甜宠", "745": "星光璀璨", "747": "女频悬疑",
    "750": "职场婚恋", "748": "豪门总裁", "1017": "民国言情"
}

def screenshot_rank(gender, rank_type, category_id, output_dir="/tmp"):
    """
    截取单个榜单页面

    Args:
        gender: 1=男频, 0=女频
        rank_type: 1=新书榜, 2=阅读榜
        category_id: 分类ID
        output_dir: 输出目录

    Returns:
        截图文件路径
    """
    url = f"https://fanqienovel.com/rank/{gender}_{rank_type}_{category_id}"

    # 获取分类名称
    categories = MALE_CATEGORIES if gender == 1 else FEMALE_CATEGORIES
    cat_name = categories.get(str(category_id), f"unknown_{category_id}")

    # 生成文件名
    gender_str = "male" if gender == 1 else "female"
    type_str = "newbook" if rank_type == 1 else "reading"
    timestamp = datetime.now().strftime("%Y%m%d")
    filename = f"fanqie_{gender_str}_{type_str}_{cat_name}_{timestamp}.png"
    output_path = os.path.join(output_dir, filename)

    with sync_playwright() as p:
        browser = p.chromium.launch(headless=True)
        page = browser.new_page(viewport={"width": 1280, "height": 900})
        page.goto(url, wait_until="networkidle", timeout=30000)
        page.wait_for_timeout(2000)  # 等待动态内容加载
        page.screenshot(path=output_path, full_page=True)
        browser.close()

    print(f"截图已保存: {output_path}")
    return output_path


def screenshot_all_categories(gender=1, rank_type=1, output_dir="/tmp/fanqie_screenshots"):
    """
    批量截取所有分类

    Args:
        gender: 1=男频, 0=女频
        rank_type: 1=新书榜, 2=阅读榜
        output_dir: 输出目录
    """
    os.makedirs(output_dir, exist_ok=True)
    categories = MALE_CATEGORIES if gender == 1 else FEMALE_CATEGORIES

    results = []
    for cat_id, cat_name in categories.items():
        print(f"正在截图: {cat_name} ({cat_id})")
        try:
            path = screenshot_rank(gender, rank_type, cat_id, output_dir)
            results.append({"category": cat_name, "path": path, "success": True})
        except Exception as e:
            print(f"截图失败: {cat_name} - {e}")
            results.append({"category": cat_name, "error": str(e), "success": False})

    return results


# 使用示例
if __name__ == "__main__":
    # 单个分类截图
    # screenshot_rank(1, 1, 124)  # 男频新书榜-都市修真

    # 批量截图所有男频新书榜
    screenshot_all_categories(gender=1, rank_type=1)

快速截图命令

# 激活环境
source /tmp/playwright_env/bin/activate

# 单个分类截图(都市修真新书榜)
python3 << 'EOF'
from playwright.sync_api import sync_playwright
url = "https://fanqienovel.com/rank/1_1_124"
with sync_playwright() as p:
    browser = p.chromium.launch(headless=True)
    page = browser.new_page(viewport={"width": 1280, "height": 900})
    page.goto(url, wait_until="networkidle", timeout=30000)
    page.wait_for_timeout(2000)
    page.screenshot(path="/tmp/fanqie_rank.png", full_page=True)
    browser.close()
    print("截图已保存: /tmp/fanqie_rank.png")
EOF

使用方法

  1. 快速截图单个分类:

    截图 https://fanqienovel.com/rank/1_1_124
    
  2. 指定分类截图:

    截图番茄都市修真新书榜
    
  3. 批量截图:

    批量截图男频所有新书榜
    

输出位置

  • 单个截图默认保存到 /tmp/
  • 批量截图保存到 /tmp/fanqie_screenshots/
  • 文件命名格式: fanqie_{gender}_{type}_{category}_{date}.png

注意事项

  1. 首次使用需要安装 Playwright 和 Chromium(约 200MB)
  2. 截图需要网络连接
  3. 建议批量截图时添加适当延迟,避免请求过快
  4. 截图为全页面截图,包含完整榜单内容
Skills enregistrées