番茄榜单截图 (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
使用方法
- •
快速截图单个分类:
code截图 https://fanqienovel.com/rank/1_1_124
- •
指定分类截图:
code截图番茄都市修真新书榜
- •
批量截图:
code批量截图男频所有新书榜
输出位置
- •单个截图默认保存到
/tmp/ - •批量截图保存到
/tmp/fanqie_screenshots/ - •文件命名格式:
fanqie_{gender}_{type}_{category}_{date}.png
注意事项
- •首次使用需要安装 Playwright 和 Chromium(约 200MB)
- •截图需要网络连接
- •建议批量截图时添加适当延迟,避免请求过快
- •截图为全页面截图,包含完整榜单内容