process_urls_api_documentation.md 8.4 KB

process-urls 接口文档

接口概述

process-urls 是一个用于批量爬取网页内容的REST API接口,支持POST方式访问,能够处理包含多个URL地址的请求,并返回结构化的网页爬取结果。

接口信息

  • 接口路径: /api/data-parse/process-urls
  • 请求方法: POST
  • 内容类型: application/json
  • 功能描述: 批量爬取网页内容,支持多种网页格式

请求参数

请求体格式

{
  "urlArr": [
    "https://example.com/page1",
    "https://example.com/page2",
    "https://mp.weixin.qq.com/s/4yz-kNAWAlF36aeQ_cgQQg"
  ]
}

参数说明

参数名 类型 必填 说明
urlArr array 包含网页URL地址的字符串数组

参数验证规则

  1. urlArr字段: 必须存在且为数组类型
  2. 数组内容: 不能为空数组
  3. URL格式: 每个元素必须为字符串类型
  4. URL有效性: 支持http和https协议

响应格式

成功响应 (200/206)

{
  "success": true,
  "message": "成功爬取所有 3 个URL",
  "data": {
    "total_urls": 3,
    "success_count": 3,
    "failed_count": 0,
    "contents": [
      {
        "url": "https://mp.weixin.qq.com/s/4yz-kNAWAlF36aeQ_cgQQg",
        "data": "新任命 | 宜宾产城竹颂万怡酒店任命王刚先生(John Wang)出任运营总监...",
        "status": "success",
        "content_length": 748,
        "original_length": 2006415,
        "status_code": 200,
        "encoding": "UTF-8"
      }
    ],
    "failed_items": []
  }
}

部分成功响应 (206)

{
  "success": true,
  "message": "部分成功: 成功爬取 2 个URL,失败 1 个URL",
  "data": {
    "total_urls": 3,
    "success_count": 2,
    "failed_count": 1,
    "contents": [
      {
        "url": "https://example.com/page1",
        "data": "页面内容...",
        "status": "success",
        "content_length": 1500,
        "original_length": 2000,
        "status_code": 200,
        "encoding": "UTF-8"
      }
    ],
    "failed_items": [
      {
        "url": "https://invalid-url.com",
        "error": "连接超时",
        "status": "failed"
      }
    ]
  }
}

错误响应 (400/500)

{
  "success": false,
  "message": "请求参数错误",
  "data": {
    "total_urls": 0,
    "success_count": 0,
    "failed_count": 0,
    "contents": [],
    "failed_items": []
  }
}

响应字段说明

顶层字段

字段名 类型 说明
success boolean 请求是否成功
message string 处理结果描述
data object 详细数据对象

data 对象字段

字段名 类型 说明
total_urls integer 总URL数量
success_count integer 成功爬取的URL数量
failed_count integer 失败的URL数量
contents array 成功爬取的内容列表
failed_items array 失败的URL列表

contents 数组元素字段

字段名 类型 说明
url string 网页URL地址
data string 爬取到的网页内容(清理后的文本)
status string 状态标识,固定为 "success"
content_length integer 清理后内容的字符长度
original_length integer 原始HTML内容的字符长度
status_code integer HTTP响应状态码
encoding string 网页编码格式

failed_items 数组元素字段

字段名 类型 说明
url string 失败的网页URL地址
error string 失败原因描述
status string 状态标识,固定为 "failed"

HTTP状态码

状态码 说明
200 完全成功,所有URL都成功爬取
206 部分成功,部分URL成功爬取
400 请求参数错误(参数格式、类型、缺失等)
500 服务器内部错误

使用示例

JavaScript (前端)

// 使用fetch API
async function crawlWebsites(urls) {
  try {
    const response = await fetch('/api/data-parse/process-urls', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        urlArr: urls
      })
    });
    
    const result = await response.json();
    
    if (result.success) {
      console.log(`成功爬取 ${result.data.success_count} 个网页`);
      
      // 处理成功爬取的内容
      result.data.contents.forEach(content => {
        console.log(`URL: ${content.url}`);
        console.log(`内容: ${content.data.substring(0, 100)}...`);
      });
      
      // 处理失败的URL
      if (result.data.failed_count > 0) {
        console.log(`有 ${result.data.failed_count} 个URL爬取失败`);
        result.data.failed_items.forEach(failed => {
          console.log(`失败URL: ${failed.url}, 原因: ${failed.error}`);
        });
      }
    } else {
      console.error(`爬取失败: ${result.message}`);
    }
  } catch (error) {
    console.error('请求异常:', error);
  }
}

// 调用示例
const urls = [
  'https://mp.weixin.qq.com/s/4yz-kNAWAlF36aeQ_cgQQg',
  'https://example.com/page1'
];

crawlWebsites(urls);

Python (后端)

import requests
import json

def test_process_urls_api():
    api_url = "http://localhost:5000/api/data-parse/process-urls"
    
    test_data = {
        "urlArr": [
            "https://mp.weixin.qq.com/s/4yz-kNAWAlF36aeQ_cgQQg",
            "https://httpbin.org/html"
        ]
    }
    
    try:
        response = requests.post(
            api_url,
            json=test_data,
            headers={'Content-Type': 'application/json'},
            timeout=120
        )
        
        if response.status_code in [200, 206]:
            result = response.json()
            print(f"爬取成功: {result['message']}")
            
            # 处理结果
            for content in result['data']['contents']:
                print(f"URL: {content['url']}")
                print(f"内容长度: {content['content_length']}")
                
        else:
            print(f"请求失败: {response.status_code}")
            print(response.text)
            
    except Exception as e:
        print(f"异常: {e}")

# 运行测试
test_process_urls_api()

cURL 命令行

curl -X POST \
  http://localhost:5000/api/data-parse/process-urls \
  -H "Content-Type: application/json" \
  -d '{
    "urlArr": [
      "https://mp.weixin.qq.com/s/4yz-kNAWAlF36aeQ_cgQQg",
      "https://httpbin.org/html"
    ]
  }'

功能特性

1. 批量处理

  • 支持同时处理多个URL
  • 自动管理请求队列和延迟
  • 提供整体处理统计

2. 智能重试

  • 自动重试失败的请求
  • 最多重试3次
  • 不同类型的错误采用不同的重试策略

3. 内容解析

  • 使用BeautifulSoup自动解析HTML
  • 提取纯文本内容,去除HTML标签
  • 智能内容清理和格式化

4. 反爬虫保护

  • 模拟真实浏览器请求头
  • 随机延迟机制
  • 支持重定向和超时处理

5. 详细日志

  • 完整的处理过程日志
  • 错误分类和统计
  • 便于调试和监控

注意事项

1. 性能考虑

  • 每个URL处理时间取决于网页大小和网络状况
  • 建议单次请求的URL数量不超过20个
  • 接口设置了120秒超时时间

2. 网络限制

  • 某些网站可能有反爬虫机制
  • 建议在稳定的网络环境下使用
  • 遵守目标网站的robots.txt规则

3. 内容大小

  • 大型网页可能产生大量文本内容
  • 注意前端显示时的内存使用
  • 建议对长内容进行分页或截断显示

4. 错误处理

  • 接口会返回详细的错误信息
  • 建议前端实现适当的错误提示
  • 部分失败时仍可处理成功的内容

错误码说明

错误类型 说明 处理建议
连接超时 网络连接超时 检查网络状况,稍后重试
HTTP状态码错误 服务器返回非200状态码 检查URL有效性,确认网站可访问
内容解析失败 HTML解析异常 系统会自动使用原始内容
编码错误 字符编码不支持 系统会自动处理编码转换

更新日志

版本 日期 更新内容
1.0.0 2025-08-18 初始版本,支持基本的网页爬取功能

技术支持

如有问题或建议,请联系开发团队或查看相关日志文件。