514 lines
13 KiB
Markdown
514 lines
13 KiB
Markdown
# 政策法规检索与整理系统
|
||
|
||
一个自动化的中国税务政策法规智能检索与整理系统,支持定时任务、智能筛选、自动下载、去重分类和邮件报告功能。
|
||
|
||
## 🎯 功能特性
|
||
|
||
### 核心功能
|
||
- **定时自动检索** - 支持配置每日自动执行检索任务(如工作日 09:00)
|
||
- **多网站爬取** - 同时从国家税务总局、财政部、科技部等多个官方网站获取信息
|
||
- **智能内容筛选** - 基于关键词匹配算法,自动识别最新政策、通知、公告等
|
||
- **文件自动下载** - 支持 PDF、Word、Excel、TXT 等多种格式文件下载
|
||
- **智能去重** - 基于标题相似度(Jaccard、Levenshtein)和内容哈希的多重去重机制
|
||
- **自动分类** - 按税收政策、通知公告、法规文件等类别自动分类
|
||
- **邮件报告** - 自动生成 Excel 汇总报告并发送邮件通知
|
||
|
||
### 高级特性
|
||
- **反爬策略** - User-Agent 轮换、请求间隔控制、自动重试机制
|
||
- **代理池支持** - 可配置代理列表,自动轮换 IP
|
||
- **磁盘空间检查** - 下载前自动检查磁盘剩余空间
|
||
- **文件完整性校验** - 验证下载文件的完整性
|
||
- **结构化日志** - JSON 格式日志,支持日志轮转
|
||
- **失败告警** - 任务执行失败时自动发送告警通知
|
||
- **多通道通知** - 支持邮件、钉钉、Webhook 等多种通知方式
|
||
|
||
## 🚀 快速开始
|
||
|
||
### 1. 安装依赖
|
||
|
||
```bash
|
||
cd .trae/skills/policy-regulations-retrieval
|
||
pip install -r requirements.txt
|
||
```
|
||
|
||
### 2. 初始化配置
|
||
|
||
```bash
|
||
python policy_retrieval.py init
|
||
```
|
||
|
||
### 3. 执行检索任务
|
||
|
||
```bash
|
||
# 立即执行一次检索(默认发送邮件报告)
|
||
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
|
||
```
|
||
|
||
### 4. 启动定时任务
|
||
|
||
```bash
|
||
# 启动定时任务(使用配置文件中的时间)
|
||
python policy_retrieval.py schedule --enable
|
||
|
||
# 指定执行时间(如每日 09:00)
|
||
python policy_retrieval.py schedule --enable --time "09:00"
|
||
|
||
# 禁用定时任务
|
||
python policy_retrieval.py schedule --disable
|
||
```
|
||
|
||
### 5. 查看报告
|
||
|
||
```bash
|
||
# 查看最新生成的报告
|
||
python policy_retrieval.py report
|
||
```
|
||
|
||
### 6. 查看帮助
|
||
|
||
```bash
|
||
python policy_retrieval.py help
|
||
```
|
||
|
||
## 📋 配置说明
|
||
|
||
编辑 `config.yaml` 文件自定义系统行为:
|
||
|
||
### 定时任务配置
|
||
|
||
```yaml
|
||
scheduler:
|
||
enabled: true # 是否启用定时任务
|
||
time: "09:00" # 每日执行时间
|
||
days: # 执行日期
|
||
- mon
|
||
- tue
|
||
- wed
|
||
- thu
|
||
- fri
|
||
max_instances: 3 # 最大并发实例数
|
||
coalesce: true # 是否合并错过的任务
|
||
```
|
||
|
||
### 目标网站配置
|
||
|
||
```yaml
|
||
targets:
|
||
- name: "国家税务总局"
|
||
url: "https://www.chinatax.gov.cn/"
|
||
list_paths:
|
||
- "/npsite/chinatax/zcwj/" # 政策文件路径
|
||
- "/npsite/chinatax/tzgg/" # 通知公告路径
|
||
keywords:
|
||
- "最新"
|
||
- "通知"
|
||
- "公告"
|
||
- "政策"
|
||
- "法规"
|
||
enabled: true
|
||
```
|
||
|
||
### 下载配置
|
||
|
||
```yaml
|
||
download:
|
||
path: "./downloads" # 下载目录
|
||
formats: # 支持的文件格式
|
||
- pdf
|
||
- doc
|
||
- docx
|
||
- txt
|
||
- xlsx
|
||
max_size: 52428800 # 最大文件大小(字节)
|
||
timeout: 60 # 下载超时时间(秒)
|
||
retry: 3 # 重试次数
|
||
user_agent: "Mozilla/5.0..." # User-Agent
|
||
```
|
||
|
||
### 去重配置
|
||
|
||
```yaml
|
||
deduplication:
|
||
title_similarity: 0.8 # 标题相似度阈值
|
||
content_similarity: 0.9 # 内容相似度阈值
|
||
hash_algorithm: "simhash" # 哈希算法
|
||
```
|
||
|
||
### 分类配置
|
||
|
||
```yaml
|
||
categories:
|
||
- name: "税收政策"
|
||
keywords:
|
||
- "税收"
|
||
- "税务"
|
||
- "纳税"
|
||
- "税费"
|
||
- "增值税"
|
||
- "所得税"
|
||
priority: 1 # 优先级(数字越小优先级越高)
|
||
|
||
- name: "通知公告"
|
||
keywords:
|
||
- "通知"
|
||
- "公告"
|
||
- "通告"
|
||
priority: 2
|
||
|
||
- name: "法规文件"
|
||
keywords:
|
||
- "法规"
|
||
- "条例"
|
||
- "规章"
|
||
- "办法"
|
||
- "细则"
|
||
priority: 3
|
||
|
||
- name: "其他政策"
|
||
keywords: [] # 空关键词表示默认类别
|
||
priority: 99
|
||
```
|
||
|
||
### 日志配置
|
||
|
||
```yaml
|
||
logging:
|
||
level: "INFO" # 日志级别
|
||
format: "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
|
||
file: "./logs/policy_retrieval.log"
|
||
max_bytes: 10485760 # 单个日志文件最大大小(10MB)
|
||
backup_count: 5 # 保留日志文件数量
|
||
```
|
||
|
||
### 通知配置(可选)
|
||
|
||
```yaml
|
||
notification:
|
||
enabled: true
|
||
on_failure: true # 失败时通知
|
||
on_success: true # 成功时通知
|
||
email:
|
||
enabled: true
|
||
smtp_host: "smtp.qq.com"
|
||
smtp_port: 587
|
||
smtp_user: "your_email@qq.com"
|
||
smtp_password: "your_auth_code" # 使用授权码
|
||
from_addr: "your_email@qq.com"
|
||
to_addrs:
|
||
- "user@example.com"
|
||
- "admin@example.com"
|
||
```
|
||
|
||
## 📁 项目结构
|
||
|
||
```
|
||
policy-regulations-retrieval/
|
||
├── policy_retrieval.py # 主程序入口
|
||
├── scraper.py # 网页爬取模块
|
||
├── processor.py # 数据处理模块(去重、分类)
|
||
├── notifier.py # 通知模块(邮件、钉钉等)
|
||
├── config.yaml # 配置文件
|
||
├── requirements.txt # Python 依赖
|
||
├── README.md # 项目说明
|
||
├── SKILL.md # 技能描述
|
||
├── logs/ # 日志目录
|
||
│ ├── policy_retrieval.log
|
||
│ └── execution_*.json
|
||
├── downloads/ # 下载文件目录
|
||
│ ├── 税收政策/
|
||
│ ├── 通知公告/
|
||
│ └── 法规文件/
|
||
└── output/ # 输出报告目录
|
||
├── summary_YYYYMMDD.xlsx
|
||
└── deduplicated_data_YYYYMMDD.json
|
||
```
|
||
|
||
## 🔧 核心模块说明
|
||
|
||
### 1. 主程序 (policy_retrieval.py)
|
||
|
||
系统主入口,协调各模块工作:
|
||
- 加载配置文件
|
||
- 初始化日志系统
|
||
- 执行检索流程
|
||
- 管理定时任务
|
||
- 生成汇总报告
|
||
|
||
**主要方法:**
|
||
- `run()` - 执行一次完整的检索流程
|
||
- `fetch_articles()` - 从目标网站获取文章列表
|
||
- `filter_content()` - 筛选相关内容
|
||
- `deduplicate()` - 去重处理
|
||
- `categorize()` - 分类整理
|
||
- `download_files()` - 下载文件
|
||
- `generate_report()` - 生成 Excel 报告
|
||
|
||
### 2. 网页爬取模块 (scraper.py)
|
||
|
||
专业的网页爬虫,支持:
|
||
- **ProxyManager** - 代理 IP 管理,支持轮换
|
||
- **RateLimiter** - 请求频率限制
|
||
- **WebScraper** - 通用网页爬虫基类
|
||
- **TaxPolicyScraper** - 税务政策专用爬虫
|
||
|
||
**特性:**
|
||
- 自动重试机制(指数退避)
|
||
- 请求间隔控制
|
||
- 多种日期格式解析
|
||
- CSS 选择器提取
|
||
- 文件 URL 识别
|
||
|
||
### 3. 数据处理模块 (processor.py)
|
||
|
||
高效的数据处理工具:
|
||
|
||
**TextSimilarity** - 文本相似度计算
|
||
- Jaccard 相似度
|
||
- Levenshtein 编辑距离
|
||
- 余弦相似度
|
||
|
||
**Deduplicator** - 去重处理器
|
||
- 标题相似度检测
|
||
- 内容哈希去重
|
||
- 保留最新记录
|
||
|
||
**CategoryClassifier** - 分类器
|
||
- 关键词索引
|
||
- 多类别评分
|
||
- 批量分类
|
||
|
||
**DataExporter** - 数据导出器
|
||
- Excel 导出
|
||
- JSON 导出
|
||
- CSV 导出
|
||
|
||
### 4. 通知模块 (notifier.py)
|
||
|
||
邮件通知系统:
|
||
- 支持 HTML 格式邮件
|
||
- 附件支持
|
||
- 政策检索报告模板
|
||
- 错误告警模板
|
||
- 多收件人支持
|
||
|
||
## 📊 输出示例
|
||
|
||
### Excel 报告示例
|
||
|
||
| 标题 | 发布时间 | 来源 | 类别 | 摘要 | 关键词 | 下载链接 |
|
||
|------|----------|------|------|------|--------|----------|
|
||
| 关于实施新的组合式税费支持政策的通知 | 2024-01-15 | 国家税务总局 | 税收政策 | 为进一步减轻企业负担... | 最新,通知,政策 | /downloads/税收政策/xxx.pdf |
|
||
| 国家税务总局公告 2024 年第 1 号 | 2024-01-10 | 国家税务总局 | 通知公告 | 关于...的公告 | 公告 | /downloads/通知公告/xxx.pdf |
|
||
|
||
### 目录结构示例
|
||
|
||
```
|
||
downloads/
|
||
├── 税收政策/
|
||
│ ├── 2024-01-15_国家税务总局_关于实施新的组合式税费支持政策的通知.pdf
|
||
│ └── 2024-01-10_国家税务总局_增值税优惠政策.pdf
|
||
├── 通知公告/
|
||
│ └── 2024-01-12_国家税务总局_系统升级公告.pdf
|
||
└── 法规文件/
|
||
└── 2024-01-08_财政部_税收征管办法.docx
|
||
```
|
||
|
||
## 🔍 命令行参数
|
||
|
||
```bash
|
||
python policy_retrieval.py <command> [options]
|
||
|
||
命令:
|
||
init 初始化配置文件
|
||
run 立即执行一次检索
|
||
schedule 启动定时任务
|
||
report 查看最新报告
|
||
help 显示帮助信息
|
||
|
||
选项:
|
||
--config, -c 指定配置文件路径
|
||
--time, -t 设置定时任务执行时间
|
||
--enable 启用定时任务
|
||
--disable 禁用定时任务
|
||
--no-email 不发送邮件报告
|
||
--email-to, -e 指定收件人邮箱(可多次使用)
|
||
```
|
||
|
||
## 🛠️ 依赖说明
|
||
|
||
### 核心依赖
|
||
|
||
```
|
||
requests>=2.28.0 # HTTP 请求库
|
||
beautifulsoup4>=4.11.0 # HTML 解析库
|
||
pyyaml>=6.0 # YAML 配置解析
|
||
apscheduler>=3.10.0 # 定时任务调度器
|
||
pandas>=1.5.0 # 数据处理库
|
||
openpyxl>=3.0.0 # Excel 文件操作
|
||
lxml>=4.9.0 # XML/HTML 解析器
|
||
```
|
||
|
||
### 可选依赖
|
||
|
||
```
|
||
# 以下为标准库,无需安装
|
||
smtplib # 邮件发送
|
||
email # 邮件处理
|
||
```
|
||
|
||
## ⚙️ 高级配置
|
||
|
||
### 代理池配置
|
||
|
||
```yaml
|
||
proxy:
|
||
enabled: true
|
||
pool:
|
||
- "http://user:pass@proxy1.example.com:8080"
|
||
- "http://user:pass@proxy2.example.com:8080"
|
||
rotate: true # 自动轮换代理
|
||
```
|
||
|
||
### 反爬策略配置
|
||
|
||
```yaml
|
||
anti_crawler:
|
||
enabled: true
|
||
user_agents: # User-Agent 池
|
||
- "Mozilla/5.0 (Windows NT 10.0; Win64; x64)..."
|
||
- "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)..."
|
||
request_interval: 3 # 请求间隔(秒)
|
||
timeout: 30 # 请求超时(秒)
|
||
retry_times: 3 # 重试次数
|
||
retry_delay: 5 # 重试间隔(秒)
|
||
```
|
||
|
||
### 多通知渠道配置
|
||
|
||
```yaml
|
||
notification:
|
||
enabled: true
|
||
email:
|
||
enabled: true
|
||
# ... 邮件配置
|
||
dingtalk:
|
||
enabled: false
|
||
webhook: "https://oapi.dingtalk.com/robot/send?access_token=xxx"
|
||
webhook:
|
||
enabled: false
|
||
url: "https://your-webhook-url.com/notify"
|
||
```
|
||
|
||
## 📝 使用场景
|
||
|
||
### 场景 1:每日自动检索
|
||
|
||
配置工作日每天早上 9 点自动检索最新政策:
|
||
|
||
```bash
|
||
# 编辑 config.yaml
|
||
scheduler:
|
||
enabled: true
|
||
time: "09:00"
|
||
days: [mon, tue, wed, thu, fri]
|
||
|
||
# 启动定时任务
|
||
python policy_retrieval.py schedule --enable
|
||
```
|
||
|
||
### 场景 2:临时检索任务
|
||
|
||
临时执行一次检索,不发送邮件:
|
||
|
||
```bash
|
||
python policy_retrieval.py run --no-email
|
||
```
|
||
|
||
### 场景 3:多部门监控
|
||
|
||
同时监控多个部门网站,发送到多个邮箱:
|
||
|
||
```bash
|
||
# 配置多个目标网站
|
||
targets:
|
||
- name: "国家税务总局"
|
||
url: "https://www.chinatax.gov.cn/"
|
||
enabled: true
|
||
- name: "财政部"
|
||
url: "https://www.mof.gov.cn/"
|
||
enabled: true
|
||
- name: "科技部"
|
||
url: "https://www.most.gov.cn/"
|
||
enabled: true
|
||
|
||
# 执行并发送到多个收件人
|
||
python policy_retrieval.py run -e user1@example.com -e user2@example.com
|
||
```
|
||
|
||
### 场景 4:自定义分类规则
|
||
|
||
根据业务需求自定义分类:
|
||
|
||
```yaml
|
||
categories:
|
||
- name: "增值税政策"
|
||
keywords: ["增值税", "进项税", "销项税"]
|
||
priority: 1
|
||
- name: "所得税政策"
|
||
keywords: ["所得税", "企业所得税", "个人所得税"]
|
||
priority: 2
|
||
- name: "税收优惠"
|
||
keywords: ["优惠", "减免", "退税"]
|
||
priority: 3
|
||
```
|
||
|
||
## 🔐 安全建议
|
||
|
||
1. **邮箱配置** - 使用授权码而非密码
|
||
2. **代理使用** - 建议使用正规代理服务商
|
||
3. **请求频率** - 合理设置请求间隔,避免对目标网站造成压力
|
||
4. **日志保护** - 定期清理日志文件,避免敏感信息泄露
|
||
|
||
## ❓ 常见问题
|
||
|
||
### Q: 如何修改检索频率?
|
||
A: 编辑 `config.yaml` 中的 `scheduler.time` 和 `scheduler.days` 配置。
|
||
|
||
### Q: 下载的文件在哪里?
|
||
A: 默认在 `./downloads/` 目录下,按类别分子目录存放。
|
||
|
||
### Q: 如何查看运行日志?
|
||
A: 日志文件位于 `./logs/policy_retrieval.log`。
|
||
|
||
### Q: 邮件发送失败怎么办?
|
||
A: 检查 SMTP 配置、邮箱授权码、网络连接,查看详细日志。
|
||
|
||
### Q: 如何添加新的目标网站?
|
||
A: 在 `config.yaml` 的 `targets` 列表中添加新的网站配置。
|
||
|
||
### Q: 定时任务如何停止?
|
||
A: 按 Ctrl+C 停止当前运行的定时任务,或使用 `--disable` 参数禁用。
|
||
|
||
## 📄 许可证
|
||
|
||
本项目仅供学习和研究使用。
|
||
|
||
## 🤝 贡献
|
||
|
||
欢迎提交 Issue 和 Pull Request 来改进这个项目。
|
||
|
||
## 📧 联系方式
|
||
|
||
如有问题或建议,请通过邮件联系。
|
||
|
||
---
|
||
|
||
**最后更新**: 2024-01
|
||
**版本**: 1.0.0
|