# web_url_crawl 函数使用说明

## 概述

`web_url_crawl` 是一个用于批量爬取网页内容的Python函数，位于 `app/core/data_parse/parse_task.py` 文件中。该函数基于原有的JavaScript版本（`docs/server.js`）重写，提供了更强大的功能和更好的错误处理。

## 功能特性

- **批量处理**: 支持同时处理多个URL
- **智能重试**: 自动重试失败的请求，最多重试3次
- **内容解析**: 使用BeautifulSoup自动解析HTML，提取纯文本内容
- **反爬虫保护**: 模拟真实浏览器请求头，添加随机延迟
- **详细日志**: 提供完整的处理过程日志
- **错误处理**: 完善的异常处理和错误信息记录

## 函数签名

```python
def web_url_crawl(urls):
    """
    从指定URL数组读取网页内容，格式化后返回
    
    Args:
        urls (list): 字符串数组，每个元素为一个网页URL地址
        
    Returns:
        dict: 包含爬取结果的字典
    """
```

## 输入参数

- `urls` (list): 字符串数组，包含要爬取的网页URL地址

## 返回值

函数返回一个字典，包含以下字段：

```python
{
    'success': True/False,           # 是否成功爬取到内容
    'message': '处理结果描述',        # 处理结果的文字描述
    'data': {
        'total_urls': 0,             # 总URL数量
        'success_count': 0,          # 成功爬取的URL数量
        'failed_count': 0,           # 失败的URL数量
        'contents': [                # 成功爬取的内容列表
            {
                'url': 'URL地址',
                'data': '网页内容',
                'status': 'success',
                'content_length': 内容长度,
                'original_length': 原始内容长度,
                'status_code': HTTP状态码,
                'encoding': 编码格式
            }
        ],
        'failed_items': [            # 失败的URL列表
            {
                'url': 'URL地址',
                'error': '错误信息',
                'status': 'failed'
            }
        ]
    }
}
```

## 使用示例

### 基本用法

```python
from app.core.data_parse.parse_task import web_url_crawl

# 准备URL列表
urls = [
    "https://example.com/page1",
    "https://example.com/page2",
    "https://example.com/page3"
]

# 调用函数
result = web_url_crawl(urls)

# 检查结果
if result['success']:
    print(f"成功爬取 {result['data']['success_count']} 个网页")
    for content in result['data']['contents']:
        print(f"URL: {content['url']}")
        print(f"内容长度: {content['content_length']}")
        print(f"内容预览: {content['data'][:100]}...")
else:
    print(f"爬取失败: {result['message']}")
```

### 错误处理

```python
result = web_url_crawl(urls)

# 处理部分成功的情况
if result['data']['success_count'] > 0:
    print(f"部分成功: {result['data']['success_count']} 个成功，{result['data']['failed_count']} 个失败")
    
    # 处理成功的内容
    for content in result['data']['contents']:
        process_content(content['data'])
    
    # 处理失败的项目
    for failed in result['data']['failed_items']:
        print(f"失败URL: {failed['url']}, 错误: {failed['error']}")
else:
    print("所有URL都爬取失败")
```

## 配置参数

函数内部包含以下可配置参数：

- **超时时间**: 30秒
- **最大重试次数**: 3次
- **请求延迟**: 0.5-2.0秒随机延迟
- **User-Agent**: 模拟Chrome浏览器
- **请求头**: 包含完整的浏览器标识信息

## 依赖要求

确保安装以下Python包：

```bash
pip install requests beautifulsoup4
```

或者在 `requirements.txt` 中添加：

```
requests>=2.32.3
beautifulsoup4>=4.12.0
```

## 注意事项

1. **反爬虫机制**: 函数已包含基本的反爬虫保护，但对于某些网站可能需要额外的处理
2. **网络稳定性**: 建议在网络稳定的环境下使用
3. **内容大小**: 对于大型网页，内容可能很长，注意内存使用
4. **法律合规**: 请确保遵守目标网站的robots.txt和使用条款
5. **频率限制**: 函数已包含延迟机制，避免过于频繁的请求

## 测试

可以使用提供的测试脚本验证函数功能：

```bash
python test_web_crawl.py
```

测试脚本会使用一些测试URL来验证函数的各种功能，包括成功爬取、错误处理等。

## 与JavaScript版本的对比

| 特性 | JavaScript版本 | Python版本 |
|------|----------------|-------------|
| 并发处理 | Promise.all并行处理 | 顺序处理，带延迟 |
| 错误处理 | 基本的错误捕获 | 详细的错误分类和重试 |
| 内容解析 | 返回原始HTML | 自动解析为纯文本 |
| 日志记录 | 控制台输出 | 结构化日志记录 |
| 重试机制 | 无 | 智能重试机制 |
| 反爬虫保护 | 基本请求头 | 完整的浏览器模拟 |

## 扩展建议

1. **并发处理**: 可以考虑使用 `asyncio` 或 `concurrent.futures` 实现真正的并发爬取
2. **代理支持**: 可以添加代理服务器支持，避免IP被封
3. **内容过滤**: 可以添加内容过滤规则，只保留特定类型的内容
4. **存储支持**: 可以集成数据库存储，保存爬取结果
5. **监控告警**: 可以添加爬取状态监控和异常告警功能 