"""番茄小说榜单截图工具"""
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_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