spiderWei-TecDo 1.3.0
爬虫脚手架框架 - 快速创建和运行爬虫任务
Requires Python: >=3.8
Keywords: spider, crawler, framework, scraping

# spiderWei_TecDo 爬虫框架

快速创建和运行爬虫任务的脚手架框架。

## 功能作用说明

- 命令行一键生成爬虫脚手架，统一项目结构与入口
- 统一配置管理（Apollo/本地直配），支持配置覆盖与环境切换
- 内置数据库、Kafka、OBS/OSS、代理、下载队列等能力
- 支持并发执行与循环执行（按间隔/每日时间点）

## 安装

运行环境要求：Python >= 3.8

```bash
# 开发模式安装（推荐）
cd spiderWei
pip install -e .

# 或直接安装
pip install spiderWei-TecDo
```

## 快速开始

### 1. 创建爬虫

```bash
# 在当前目录创建爬虫
spiderWei_TecDo start my_spider

# 在指定目录创建
spiderWei_TecDo start my_spider -o ./spiders
```

### 2. 查看配置说明

```bash
spiderWei_TecDo list
```

### 3. 编辑生成的爬虫文件

打开生成的 `my_spider.py`，修改以下内容：

1. **Apollo 配置** - 根据实际环境修改
   ```python
   APOLLOID='Your-Apollo-ID',
   APOLLO_URL_TEST='http://your-test-apollo.com',
   APOLLO_URL_PROD='http://your-prod-apollo.com',
   ```

2. **数据推送配置** - 二选一
   ```python
   DB_table_name='your_table_name',  # 直接写表
   # 或
   DB_topic_name='your_topic_name',  # 写 Kafka
   ```

3. **实现 `getexeList()` 函数** - 构造任务列表
   ```python
   def getexeList():
       return [{"id": 1}, {"id": 2}, {"id": 3}]
   ```

4. **实现 `main(arg, app)` 函数** - 编写采集逻辑
   ```python
   def main(arg, app):
       # 发起请求
       result = app.crawl.crawl(f"https://api.example.com/{arg['id']}")
       data = json.loads(result['html'])
       
       # 推送数据
       app.push_queue.put({"id": arg['id'], "data": data})
   ```

### 4. 运行爬虫

```bash
python my_spider.py
```

### 5. 配置循环执行（可选）

在 `SpiderSettings` 中开启循环执行：

```python
settings = SpiderSettings(
    loop_enable=1,
    loop_mode="interval",           # interval 或 daily_time
    loop_interval_seconds=1800,      # interval 模式：每次结束到下次开始的间隔
    # loop_daily_times=["00:00", "12:00"],  # daily_time 模式
)
```

开启后，`run_spider` 会按配置持续循环执行任务。

## 配置项说明

| 配置项 | 说明 | 默认值 |
|--------|------|--------|
| **Apollo配置** | | |
| apollo_enable | 是否启用 Apollo | 1 |
| APOLLOID | Apollo 应用ID | 'Creatives-spider' |
| APOLLO_URL_TEST | 测试环境 Apollo 地址 | 'http://dev-apollo.tec-develop.com' |
| APOLLO_URL_PROD | 生产环境 Apollo 地址 | 'http://hwsgprod.in.apolloconfig...:8080' |
| **环境配置** | | |
| isTest | 从环境变量 ISTEST 获取 | 默认 1 (测试环境) |
| Threadnum | 并发线程数 | 1 |
| **代理配置** | | |
| openproXies | 是否启用代理 | 0 (不启用) |
| IPlist | Apollo 中代理IP列表 key 名 | 'IPlist' |
| proxy_list | 直接指定代理列表 | None |
| **数据库配置** | | |
| readDb | 是否连接数据库 | 0 (不连接) |
| DB_table_name | 数仓表名 | '' |
| DB_topic_name | Kafka Topic | '' |
| PRIMARY_KEY_NAME | 主键名 | '' |
| holoHost | 数据库 Host | '' |
| holoPort | 数据库 Port | '' |
| holoDBname | 数据库名称 | '' |
| holoUser | 数据库用户 | '' |
| holoPassword | 数据库密码 | '' |
| **Kafka配置** | | |
| needKafka | 是否需要Kafka | 0 (不需要) |
| kafkaAddress | Kafka 地址列表 | None |
| download_topic_name | 下载器Topic | '' |
| **OBS/OSS配置** | | |
| needOBS | 是否需要对象存储 | 0 (不需要) |
| isHwOBS | OBS类型 | 0 (阿里云) |
| HWOBS_AK | 华为云OBS AK | '' |
| HWOBS_SK | 华为云OBS SK | '' |
| HWOBS_Endpoint | 华为云OBS Endpoint | '' |
| HWOBS_BucketName | 华为云OBS BucketName | '' |
| HWOBS_Link | 华为云OBS 访问链接前缀 | '' |
| AliOSS_AK | 阿里云OSS AK | '' |
| AliOSS_SK | 阿里云OSS SK | '' |
| AliOSS_BucketName | 阿里云OSS BucketName | '' |
| AliOSS_Endpoint | 阿里云OSS Endpoint | '' |
| AliOSS_Link | 阿里云OSS 访问链接前缀 | '' |
| **调试配置** | | |
| is_print_item | 是否打印推送数据 | 0 (不打印) |
| **循环执行配置** | | |
| loop_enable | 是否循环执行 | 0 (不启用) |
| loop_mode | 循环模式 | "interval" |
| loop_interval_seconds | 间隔秒数 | 3600 |
| loop_daily_times | 每日时间点列表 | None |

## 配置覆盖说明

配置优先级（高 → 低）：

1. `SpiderSettings` 中直接指定的配置
2. Apollo 配置（当 `apollo_enable=1`）
3. 代码默认值

覆盖规则示例：

- `isTest` 默认从环境变量 `ISTEST` 读取，但可通过 `SpiderSettings.isTest` 覆盖
- `kafkaAddress`、`proxy_list`、`holoHost`、`HWOBS_AK`/`AliOSS_AK` 等存在直配时优先使用直配
- 当 `apollo_enable=0` 时不拉取 Apollo 配置，仅使用直配与默认值

## 环境变量

```bash
# Windows
set ISTEST=0    # 0=生产环境, 1=测试环境

# Linux/Mac
export ISTEST=0
```

## app 对象属性

在 `main(arg, app)` 函数中，`app` 对象提供以下属性：

- `app.push_queue` - 数据推送队列
- `app.download_queue` - 下载器队列
- `app.holo_client` - 数据库客户端
- `app.OBSHelper` - OBS/OSS 客户端
- `app.videoOp` - 视频操作工具
- `app.fileOp` - 文件操作工具
- `app.crawl` - 爬虫请求工具
- `app.configurations` - Apollo 配置

## 依赖

- requests>=2.25.0
- psycopg>=3.0.0
- kafka-python>=2.0.0
- yt-dlp>=2023.0.0
- esdk-obs-python>=3.0.0
- oss2>=2.15.0

## 开发依赖（可选）

```bash
pip install "spiderWei-TecDo[dev]"
```

- pytest>=7.0.0
- black>=22.0.0

## 项目地址

- Homepage: https://github.com/your-org/spiderWei-TecDo