AgentSkillsCN

fanqie-screenshot

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

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

番茄榜单截图 (fanqie-screenshot)

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

触发词

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

使用场景

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

前置要求

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

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

榜单URL格式

code
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截图代码

单个分类截图

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)

快速截图命令

bash
# 激活环境
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. 快速截图单个分类:

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

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

    code
    批量截图男频所有新书榜
    

输出位置

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

注意事项

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