first commit

This commit is contained in:
辫子哥
2026-03-09 22:03:09 +08:00
commit 3a6a12eeb6
8 changed files with 2168 additions and 0 deletions

235
SKILL.md Normal file
View File

@@ -0,0 +1,235 @@
---
name: "policy-regulations-retrieval"
description: "Automates Chinese tax policy retrieval with scheduled tasks, web scraping, content filtering, file downloading, and data deduplication. Invoke when user needs to build a policy/regulation collection system or wants automated policy monitoring."
---
# 政策法规检索与整理系统
这是一个自动化政策法规检索与整理系统,可用于从中国税务相关部门网站自动抓取、筛选、下载和整理政策法规文件。
## 功能特性
1. **定时任务功能** - 支持配置每日自动执行检索任务
2. **网站内容爬取** - 自动访问税务相关部门网站获取最新政策
3. **内容筛选** - 智能识别包含关键词(最新、通知、公告、政策、法规)的内容
4. **资料下载** - 支持下载PDF、Word、TXT等多种格式文件
5. **数据处理** - 去重、分类整理、自动生成汇总报告
## 使用方法
### 基本命令
```bash
# 初始化系统配置
python policy_retrieval.py init
# 立即执行一次检索(默认发送邮件报告)
python policy_retrieval.py run
# 立即执行一次检索,不发送邮件
python policy_retrieval.py run --no-email
# 指定收件人执行检索
python policy_retrieval.py run -e user@example.com -e another@example.com
# 启动定时任务服务
python policy_retrieval.py schedule --time "09:00"
# 查看检索结果
python policy_retrieval.py report
# 查看帮助
python policy_retrieval.py --help
```
### 配置文件 (config.yaml)
```yaml
# 定时任务配置
scheduler:
enabled: true
time: "09:00" # 每日执行时间
days: ["mon", "tue", "wed", "thu", "fri"] # 执行日期
# 目标网站配置
targets:
- name: "国家税务总局"
url: "https://www.chinatax.gov.cn/"
keywords: ["最新", "通知", "公告", "政策", "法规"]
- name: "财政部"
url: "https://www.mof.gov.cn/"
keywords: ["最新", "通知", "公告", "政策", "法规"]
- name: "科技部"
url: "https://www.most.gov.cn/"
keywords: ["科技", "创新", "项目", "申报", "通知", "公告", "政策"]
# 下载配置
download:
path: "./downloads"
formats: ["pdf", "doc", "docx", "txt"]
max_size: 50MB
check_disk_space: true # 下载前检查磁盘空间
min_disk_space: 100MB # 最小剩余空间要求
verify_download: true # 验证下载文件完整性
# 反爬策略配置
anti_crawler:
enabled: true
user_agents:
- "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
- "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
- "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0"
- "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.1 Safari/605.1.15"
request_interval: 3 # 请求间隔(秒)
timeout: 30 # 请求超时(秒)
retry_times: 3 # 重试次数
retry_delay: 5 # 重试间隔(秒)
# 代理池配置
proxy:
enabled: false
pool: [] # 代理列表,格式: ["http://user:pass@host:port", ...]
rotate: true # 是否轮换代理
# 日志配置
logging:
enabled: true
level: "INFO" # DEBUG, INFO, WARNING, ERROR
path: "./logs"
max_size: 10MB # 单个日志文件最大大小
backup_count: 5 # 保留日志文件数量
format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
# 告警通知配置
notification:
enabled: true # 启用通知功能
on_failure: true # 任务失败时通知
on_success: true # 任务成功时通知(发送检索报告)
email:
enabled: true
smtp_host: "smtp.qq.com" # QQ邮箱示例
smtp_port: 587
smtp_user: "your_email@qq.com"
smtp_password: "your_auth_code" # QQ邮箱需要使用授权码
from_addr: "your_email@qq.com"
to_addrs:
- "user@example.com"
- "admin@example.com"
dingtalk:
enabled: false
webhook: "https://oapi.dingtalk.com/robot/send?access_token=xxx"
webhook:
enabled: false
url: "https://your-webhook-url.com/notify"
# 去重配置
deduplication:
title_similarity: 0.8
content_similarity: 0.9
# 分类配置
categories:
- name: "税收政策"
keywords: ["税收", "税务", "纳税"]
- name: "通知公告"
keywords: ["通知", "公告"]
- name: "法规文件"
keywords: ["法规", "条例", "规章"]
```
## 核心模块说明
### 1. 定时任务模块 (scheduler.py)
- 使用APScheduler实现定时任务
- 支持自定义执行时间和频率
- 可配置工作日/休息日
- **持久化存储**使用SQLite数据库存储任务状态程序重启后任务不丢失
- **支持cron表达式**高级用户可使用cron格式自定义执行规则
### 2. 网页爬取模块 (scraper.py)
- 支持多网站并发爬取
- 智能解析HTML/XML内容
- **反爬策略**
- User-Agent轮换随机选取
- 请求间隔控制默认3秒可配置
- 请求超时设置默认30秒
- 自动重试机制默认3次
- **代理池支持**:可配置代理列表,自动轮换
- **错误处理**
- 网络异常自动重试
- 解析失败记录日志并跳过
- 请求超时处理
### 3. 内容筛选模块 (filter.py)
- 关键词匹配算法
- 相关度评分系统
- 可配置筛选规则
### 4. 文件下载模块 (downloader.py)
- 支持多种文件格式
- 断点续传功能
- 自动重命名和分类
- **文件完整性校验**:下载完成后校验文件大小和完整性
- **磁盘空间检查**:下载前检查剩余空间
### 5. 数据处理模块 (processor.py)
- 基于SimHash的去重算法
- 多维度分类(时间、类型、部门)
- Excel/CSV报告生成
- **数据库存储**使用SQLite存储结构化数据支持查询和统计
### 6. 日志模块 (logger.py)
- **结构化日志**JSON格式日志便于分析
- **日志轮转**:按大小和时间自动轮转,防止日志文件过大
- **执行记录**:记录每次任务执行的开始时间、结束时间、结果统计
- **错误追踪**:详细的错误堆栈信息,便于问题排查
### 7. 通知模块 (notifier.py)
- **多通道通知**支持邮件、钉钉、Webhook
- **失败告警**:任务执行失败时自动发送通知
- **可配置开关**:可单独控制成功/失败通知
## 输出结果
系统会在以下目录生成文件:
### output 目录
- `summary_YYYYMMDD.xlsx` - 每日汇总表格
- `deduplicated_data.json` - 去重后的数据
- `category_*/` - 按类别分类的文件
- `policies.db` - SQLite数据库结构化存储
### logs 目录
- `app_YYYYMMDD.log` - 应用日志
- `execution_YYYYMMDD.json` - 执行记录JSON格式
### downloads 目录
- 按类别分类的政策文件
- 文件名格式:`{日期}_{来源}_{标题}`
## 示例输出表格
| 标题 | 发布时间 | 来源 | 类别 | 摘要 | 下载链接 |
|------|----------|------|------|------|----------|
| 关于实施新的组合式税费支持政策的通知 | 2024-01-01 | 国家税务总局 | 税收政策 | ... | /downloads/xxx.pdf |
## 依赖安装
```bash
pip install -r requirements.txt
```
主要依赖:
- requests - HTTP请求
- beautifulsoup4 - HTML解析
- apscheduler - 定时任务
- pandas - 数据处理
- openpyxl - Excel导出
- sqlalchemy - 数据库ORM
- python-dotenv - 环境变量管理
- pytz - 时区处理
- selenium/playwright - 动态页面爬取(可选)
可选依赖(通知功能):
- smtplib - 邮件发送(标准库)
- requests - 钉钉/Webhook通知