# 网页文本解析 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\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
- 公司: 北京国际大酒店

`;
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
姓名: {{ result.data.name_zh }} / {{ result.data.name_en }} 职位: {{ result.data.title_zh }} / {{ result.data.title_en }} 公司: {{ result.data.hotel_zh }} / {{ result.data.hotel_en }} 手机: {{ result.data.mobile }} 邮箱: {{ result.data.email }} 照片:
解析失败: {{ result.message }}网页文本解析
解析结果:
无
完整数据
{{ JSON.stringify(result.data, null, 2) }}
姓名: {result.data.name_zh} / {result.data.name_en}
职位: {result.data.title_zh} / {result.data.title_en}
公司: {result.data.hotel_zh} / {result.data.hotel_en}
手机: {result.data.mobile}
邮箱: {result.data.email}
照片:
{result.data.pic_url ? (
) : (
无
)}
{JSON.stringify(result.data, null, 2)}
解析失败: {result.message}