Initial commit
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
"""cninfo 公告抓取入口。
|
||||
|
||||
用法:
|
||||
uv run python -m scripts.run_cninfo # 抓取今天公告
|
||||
uv run python -m scripts.run_cninfo --days 3 # 抓取最近 3 天
|
||||
uv run python -m scripts.run_cninfo --max-pages 50 # 最多 50 页
|
||||
uv run python -m scripts.run_cninfo --no-save # 试跑不存盘
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import sys
|
||||
from datetime import date, timedelta
|
||||
from pathlib import Path
|
||||
|
||||
from dotenv import load_dotenv
|
||||
from loguru import logger
|
||||
|
||||
from crawler.cninfo import crawl_announcements
|
||||
|
||||
|
||||
def _setup_logger(level: str) -> None:
|
||||
logger.remove()
|
||||
logger.add(sys.stderr, level=level,
|
||||
format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {name} | {message}")
|
||||
log_path = Path("logs") / "cninfo.log"
|
||||
log_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
logger.add(log_path, level="DEBUG", rotation="10 MB", retention=5, encoding="utf-8")
|
||||
|
||||
|
||||
def main() -> int:
|
||||
load_dotenv()
|
||||
parser = argparse.ArgumentParser(description="cninfo 巨潮资讯网公告抓取")
|
||||
parser.add_argument("--days", type=int, default=0,
|
||||
help="抓取最近 N 天的公告,默认读 CNINFO_DAYS_BACK")
|
||||
parser.add_argument("--start", default=None, help="开始日期 YYYY-MM-DD")
|
||||
parser.add_argument("--end", default=None, help="结束日期 YYYY-MM-DD")
|
||||
parser.add_argument("--max-pages", type=int, default=0, help="最大页数")
|
||||
parser.add_argument("--no-save", action="store_true", help="仅抓取不存盘")
|
||||
parser.add_argument("--log-level", default="INFO")
|
||||
args = parser.parse_args()
|
||||
|
||||
_setup_logger(args.log_level)
|
||||
|
||||
start = args.start
|
||||
end = args.end
|
||||
if args.days > 0 and not start:
|
||||
start = (date.today() - timedelta(days=args.days)).strftime("%Y-%m-%d")
|
||||
if not end:
|
||||
end = date.today().strftime("%Y-%m-%d")
|
||||
|
||||
results = crawl_announcements(
|
||||
start_date=start,
|
||||
end_date=end,
|
||||
max_pages=args.max_pages or None,
|
||||
save=not args.no_save,
|
||||
)
|
||||
|
||||
if not results:
|
||||
return 1
|
||||
logger.info("cninfo 抓取完成: {} 条", len(results))
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
Reference in New Issue
Block a user