# 网页文本解析 API 接口说明文档 ## 接口概述 **接口名称**: 网页文本解析接口 **接口路径**: `POST /api/data_parse/webpage-parse` **接口功能**: 解析网页 Markdown 文本并提取人员信息 **版本**: v1.0 **最后更新**: 2024-12-19 ## 功能描述 该接口使用阿里云 Qwen VL Max 模型智能解析网页 Markdown 格式文本,自动提取其中的人员信息,包括姓名、职位、联系方式、公司信息、照片链接等多种字段。适用于从网页内容、人员简介、名片信息等文本中提取结构化数据。 ## 接口地址 ``` POST http://your-domain.com/api/data_parse/webpage-parse ``` ## 请求参数 ### 请求头 (Headers) | 参数名 | 类型 | 必填 | 说明 | |--------|------|------|------| | Content-Type | string | 是 | application/json | ### 请求体 (Request Body) | 参数名 | 类型 | 必填 | 长度限制 | 说明 | |--------|------|------|----------|------| | markdown_text | string | 是 | 10-50000字符 | 网页的 Markdown 格式文本内容 | #### 请求体示例 ```json { "markdown_text": "# 张三 - 高级酒店经理\n\n## 个人信息\n\n**职位**: 高级经理 \n**公司**: 香格里拉大酒店 \n**手机**: 13800138000 \n**邮箱**: zhangsan@example.com \n**地址**: 北京市朝阳区建国路1号 \n\n![个人照片](https://example.com/photos/zhangsan.jpg)\n\n## 工作经历\n\n- 2020-至今: 香格里拉大酒店 高级经理\n- 2018-2020: 凯悦酒店 部门经理" } ``` ## 响应参数 ### 成功响应 (200 OK) ```json { "success": true, "message": "网页文本解析成功", "data": { "name_zh": "张三", "name_en": "Zhang San", "title_zh": "高级经理", "title_en": "Senior Manager", "hotel_zh": "香格里拉大酒店", "hotel_en": "Shangri-La Hotel", "mobile": "13800138000", "phone": "", "email": "zhangsan@example.com", "address_zh": "北京市朝阳区建国路1号", "address_en": "", "postal_code_zh": "", "postal_code_en": "", "birthday": "", "age": 0, "native_place": "", "residence": "", "brand_group": "", "career_path": [ { "date": "2024-12-19", "hotel_zh": "香格里拉大酒店", "hotel_en": "Shangri-La Hotel", "title_zh": "高级经理", "title_en": "Senior Manager", "image_path": "", "source": "webpage_extraction" } ], "affiliation": [], "pic_url": "https://example.com/photos/zhangsan.jpg" } } ``` ### 响应字段说明 | 字段名 | 类型 | 说明 | |--------|------|------| | success | boolean | 请求是否成功 | | message | string | 响应消息 | | data | object | 提取的人员信息数据 | #### data 对象字段说明 | 字段名 | 类型 | 说明 | |--------|------|------| | name_zh | string | 中文姓名 | | name_en | string | 英文姓名 | | title_zh | string | 中文职位/头衔 | | title_en | string | 英文职位/头衔 | | hotel_zh | string | 中文酒店/公司名称 | | hotel_en | string | 英文酒店/公司名称 | | mobile | string | 手机号码(多个用逗号分隔,最多3个) | | phone | string | 固定电话(多个用逗号分隔) | | email | string | 电子邮箱 | | address_zh | string | 中文地址 | | address_en | string | 英文地址 | | postal_code_zh | string | 中文邮政编码 | | postal_code_en | string | 英文邮政编码 | | birthday | string | 生日(格式:YYYY-MM-DD) | | age | integer | 年龄 | | native_place | string | 籍贯 | | residence | string | 居住地 | | brand_group | string | 品牌组合 | | career_path | array | 职业轨迹(JSON数组) | | affiliation | array | 隶属关系(JSON数组) | | pic_url | string | 照片链接URL | ## 错误响应 ### 400 - 请求参数错误 ```json { "success": false, "message": "错误描述", "data": null } ``` **常见错误消息**: - `请求必须是 JSON 格式` - `缺少必填参数: markdown_text` - `markdown_text 必须是字符串类型` - `markdown_text 内容不能为空` - `markdown_text 内容过长,最大支持50KB` - `markdown_text 内容过短,无法进行有效解析` ### 500 - 服务器错误 ```json { "success": false, "message": "网页文本解析失败: 具体错误信息", "data": null } ``` ## 前端调用示例 ### JavaScript (原生) ```javascript async function parseWebpageText(markdownText) { try { const response = await fetch('/api/data_parse/webpage-parse', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ markdown_text: markdownText }) }); const result = await response.json(); if (result.success) { console.log('解析成功:', result.data); return result.data; } else { console.error('解析失败:', result.message); throw new Error(result.message); } } catch (error) { console.error('请求失败:', error); throw error; } } // 使用示例 const markdownContent = ` # 李明 - 酒店总经理 ## 联系信息 - 手机: 13912345678 - 邮箱: liming@hotel.com - 公司: 北京国际大酒店 ![照片](https://example.com/photos/liming.jpg) `; parseWebpageText(markdownContent) .then(data => { console.log('提取的人员信息:', data); }) .catch(error => { console.error('解析出错:', error); }); ``` ### JavaScript (jQuery) ```javascript function parseWebpageTextWithJQuery(markdownText) { return $.ajax({ url: '/api/data_parse/webpage-parse', type: 'POST', contentType: 'application/json', data: JSON.stringify({ markdown_text: markdownText }), success: function(result) { if (result.success) { console.log('解析成功:', result.data); return result.data; } else { console.error('解析失败:', result.message); } }, error: function(xhr, status, error) { console.error('请求失败:', error); } }); } // 使用示例 const markdownText = "# 王芳\n职位: 前台经理\n手机: 13800000000"; parseWebpageTextWithJQuery(markdownText); ``` ### Vue.js 示例 ```vue ``` ### React 示例 ```jsx import React, { useState } from 'react'; import axios from 'axios'; function WebpageParser() { const [markdownText, setMarkdownText] = useState(''); const [result, setResult] = useState(null); const [loading, setLoading] = useState(false); const parseText = async () => { if (!markdownText.trim()) { alert('请输入 Markdown 文本'); return; } setLoading(true); setResult(null); try { const response = await axios.post('/api/data_parse/webpage-parse', { markdown_text: markdownText }); setResult(response.data); } catch (error) { setResult({ success: false, message: error.response?.data?.message || error.message }); } finally { setLoading(false); } }; return (

网页文本解析