import argparse from src.crawler import PaperCrawler def setup_args(): """设置命令行参数解析 Returns: argparse.Namespace: 解析后的命令行参数 """ parser = argparse.ArgumentParser( description='论文爬取工具 - 用于批量爬取和处理医学研究论文', formatter_class=argparse.RawDescriptionHelpFormatter, epilog=''' 使用示例: %(prog)s # 使用默认参数 %(prog)s --paper_website arxiv medrxiv # 指定论文数据源 %(prog)s --parallel 10 # 设置并行度为10 ''' ) parser.add_argument( '--paper_website', default=["arxiv","medrxiv"], help='论文网站 (默认: arxiv,medrxiv)', nargs='+', choices=["arxiv","medrxiv"] ) parser.add_argument( '--parallel', type=int, default=20, help='并行处理线程数 (默认: 20)' ) return parser.parse_args() def main(): """主函数 - 执行论文爬取任务""" try: # 解析命令行参数 args = setup_args() print(f"=== 论文爬取工具启动 ===") print(f"论文数据源: {args.paper_website}") print(f"并行处理数: {args.parallel}") print(f"========================") # 初始化论文爬取器 crawler = PaperCrawler( websites=args.paper_website, parallel=args.parallel ) # 执行论文爬取 print("开始爬取MIMIC-4相关论文...") papers = crawler.crawl_papers() if papers: # 保存到CSV文件 csv_file_path = crawler.save_to_csv(papers) print(f"\n=== 爬取完成 ===") print(f"成功爬取: {len(papers)} 篇论文") print(f"保存位置: {csv_file_path}") print(f"================") else: print("未找到相关论文,请检查网络连接或关键词设置") except FileNotFoundError as e: print(f"错误: 找不到指定的文件 - {e}") return 1 except ValueError as e: print(f"错误: 参数值无效 - {e}") return 1 except Exception as e: print(f"错误: 程序执行异常 - {e}") return 1 return 0 if __name__ == "__main__": exit_code = main() exit(exit_code)