搜索关键字爬虫
This commit is contained in:
@@ -5,7 +5,9 @@
|
||||
|
||||
import sys
|
||||
import json
|
||||
import argparse
|
||||
from typing import List
|
||||
from pathlib import Path
|
||||
from loguru import logger
|
||||
from crawler.RmrbCrawler import RmrbCrawler
|
||||
from crawler.BaseCrawler import NewsItem
|
||||
@@ -83,36 +85,81 @@ def save_to_json(news_list: List[dict], output_file: str = "output/news.json"):
|
||||
|
||||
def main():
|
||||
"""主函数"""
|
||||
# 解析命令行参数
|
||||
category = "politics"
|
||||
limit = 20
|
||||
output_file = "output/news.json"
|
||||
|
||||
if len(sys.argv) > 1:
|
||||
category = sys.argv[1]
|
||||
if len(sys.argv) > 2:
|
||||
limit = int(sys.argv[2])
|
||||
if len(sys.argv) > 3:
|
||||
output_file = sys.argv[3]
|
||||
|
||||
# 创建参数解析器
|
||||
parser = argparse.ArgumentParser(
|
||||
description='人民日报新闻爬虫主程序',
|
||||
formatter_class=argparse.RawDescriptionHelpFormatter
|
||||
)
|
||||
|
||||
# 添加位置参数(保持向后兼容)
|
||||
parser.add_argument(
|
||||
'category',
|
||||
nargs='?',
|
||||
default='politics',
|
||||
help='新闻分类 (默认: politics)'
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
'limit',
|
||||
nargs='?',
|
||||
type=int,
|
||||
default=20,
|
||||
help='爬取数量 (默认: 20)'
|
||||
)
|
||||
|
||||
parser.add_argument(
|
||||
'output_file',
|
||||
nargs='?',
|
||||
default='output/news.json',
|
||||
help='输出文件路径 (默认: output/news.json)'
|
||||
)
|
||||
|
||||
# 添加JSON参数支持
|
||||
parser.add_argument(
|
||||
'--json', '-j',
|
||||
type=str,
|
||||
help='JSON格式参数 (优先级高于其他参数)'
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
# 解析参数: JSON参数优先
|
||||
if args.json:
|
||||
try:
|
||||
json_data = json.loads(args.json)
|
||||
params = json_data.get('params', {})
|
||||
category = params.get('category', 'politics')
|
||||
limit = params.get('limit', 20)
|
||||
output_file = json_data.get('outputFile', 'output/news.json')
|
||||
logger.info("使用JSON参数模式")
|
||||
except Exception as e:
|
||||
logger.error(f"JSON参数解析失败: {e}")
|
||||
sys.exit(1)
|
||||
else:
|
||||
# 使用命令行参数
|
||||
category = args.category
|
||||
limit = args.limit
|
||||
output_file = args.output_file
|
||||
logger.info("使用命令行参数模式")
|
||||
|
||||
logger.info("=" * 60)
|
||||
logger.info("新闻爬虫程序启动")
|
||||
logger.info("=" * 60)
|
||||
|
||||
|
||||
# 爬取新闻
|
||||
news_list = crawl_rmrb_news(category=category, limit=limit)
|
||||
|
||||
|
||||
# 保存结果
|
||||
if news_list:
|
||||
save_to_json(news_list, output_file)
|
||||
|
||||
|
||||
# 输出统计信息
|
||||
logger.info(f"爬取统计:")
|
||||
logger.info(f" - 成功: {len(news_list)} 条")
|
||||
logger.info(f" - 失败: {limit - len(news_list)} 条")
|
||||
else:
|
||||
logger.warning("未获取到任何新闻")
|
||||
|
||||
|
||||
logger.info("=" * 60)
|
||||
logger.info("新闻爬虫程序结束")
|
||||
logger.info("=" * 60)
|
||||
|
||||
Reference in New Issue
Block a user