Showing
1 changed file
with
37 additions
and
2 deletions
| @@ -8,6 +8,8 @@ MindSpider - AI爬虫项目主程序 | @@ -8,6 +8,8 @@ MindSpider - AI爬虫项目主程序 | ||
| 8 | import os | 8 | import os |
| 9 | import sys | 9 | import sys |
| 10 | import argparse | 10 | import argparse |
| 11 | +import difflib | ||
| 12 | +import re | ||
| 11 | from datetime import date, datetime | 13 | from datetime import date, datetime |
| 12 | from pathlib import Path | 14 | from pathlib import Path |
| 13 | import subprocess | 15 | import subprocess |
| @@ -437,9 +439,42 @@ class MindSpider: | @@ -437,9 +439,42 @@ class MindSpider: | ||
| 437 | logger.info("MindSpider项目初始化完成!") | 439 | logger.info("MindSpider项目初始化完成!") |
| 438 | return True | 440 | return True |
| 439 | 441 | ||
| 442 | +PLATFORM_CHOICES = ['xhs', 'dy', 'ks', 'bili', 'wb', 'tieba', 'zhihu'] | ||
| 443 | + | ||
| 444 | +PLATFORM_ALIASES = { | ||
| 445 | + 'weibo': 'wb', 'webo': 'wb', '微博': 'wb', | ||
| 446 | + 'douyin': 'dy', '抖音': 'dy', | ||
| 447 | + 'kuaishou': 'ks', '快手': 'ks', | ||
| 448 | + 'bilibili': 'bili', 'b站': 'bili', 'bstation': 'bili', | ||
| 449 | + 'xiaohongshu': 'xhs', '小红书': 'xhs', 'redbook': 'xhs', | ||
| 450 | + 'zhihu': 'zhihu', '知乎': 'zhihu', | ||
| 451 | + 'tieba': 'tieba', '贴吧': 'tieba', | ||
| 452 | +} | ||
| 453 | + | ||
| 454 | +class SuggestiveArgumentParser(argparse.ArgumentParser): | ||
| 455 | + """在参数错误时给出相似候选项提示""" | ||
| 456 | + | ||
| 457 | + def error(self, message: str): | ||
| 458 | + match = re.search(r"invalid choice: '([^']+)'", message) | ||
| 459 | + if match: | ||
| 460 | + bad = match.group(1) | ||
| 461 | + alias = PLATFORM_ALIASES.get(bad.lower()) | ||
| 462 | + suggestions = difflib.get_close_matches(bad, PLATFORM_CHOICES, n=3, cutoff=0.3) | ||
| 463 | + if alias: | ||
| 464 | + print(f"错误: '{bad}' 不是合法的平台代码。您是否想输入 '{alias}'?", file=sys.stderr) | ||
| 465 | + elif suggestions: | ||
| 466 | + print(f"错误: '{bad}' 不是合法的平台代码。最接近的选项: {suggestions}", file=sys.stderr) | ||
| 467 | + else: | ||
| 468 | + print(f"错误: '{bad}' 不是合法的平台代码。合法平台: {PLATFORM_CHOICES}", file=sys.stderr) | ||
| 469 | + print(f"完整错误: {message}", file=sys.stderr) | ||
| 470 | + else: | ||
| 471 | + print(f"错误: {message}", file=sys.stderr) | ||
| 472 | + self.print_usage(sys.stderr) | ||
| 473 | + sys.exit(2) | ||
| 474 | + | ||
| 440 | def main(): | 475 | def main(): |
| 441 | """命令行入口""" | 476 | """命令行入口""" |
| 442 | - parser = argparse.ArgumentParser(description="MindSpider - AI爬虫项目主程序") | 477 | + parser = SuggestiveArgumentParser(description="MindSpider - AI爬虫项目主程序") |
| 443 | 478 | ||
| 444 | # 基本操作 | 479 | # 基本操作 |
| 445 | parser.add_argument("--setup", action="store_true", help="初始化项目设置") | 480 | parser.add_argument("--setup", action="store_true", help="初始化项目设置") |
| @@ -454,7 +489,7 @@ def main(): | @@ -454,7 +489,7 @@ def main(): | ||
| 454 | # 参数配置 | 489 | # 参数配置 |
| 455 | parser.add_argument("--date", type=str, help="目标日期 (YYYY-MM-DD),默认为今天") | 490 | parser.add_argument("--date", type=str, help="目标日期 (YYYY-MM-DD),默认为今天") |
| 456 | parser.add_argument("--platforms", type=str, nargs='+', | 491 | parser.add_argument("--platforms", type=str, nargs='+', |
| 457 | - choices=['xhs', 'dy', 'ks', 'bili', 'wb', 'tieba', 'zhihu'], | 492 | + choices=PLATFORM_CHOICES, |
| 458 | help="指定爬取平台") | 493 | help="指定爬取平台") |
| 459 | parser.add_argument("--keywords-count", type=int, default=100, help="话题提取的关键词数量") | 494 | parser.add_argument("--keywords-count", type=int, default=100, help="话题提取的关键词数量") |
| 460 | parser.add_argument("--max-keywords", type=int, default=50, help="每个平台最大关键词数量") | 495 | parser.add_argument("--max-keywords", type=int, default=50, help="每个平台最大关键词数量") |
-
Please register or login to post a comment