news 2026/10/19 4:24:01

MinerU解析本地文件(二)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
MinerU解析本地文件(二)

一、精准解析 API(需 Token,适合正式场景)

适用场景

  • 文件较大(≤ 200MB,≤ 200 页)

  • 需要高精度解析

  • 支持批量上传(单次 ≤ 50 个)

核心接口

步骤接口说明
1POST /api/v4/file-urls/batch申请上传链接
2PUT <file_url>上传文件到 OSS
3系统自动提交解析任务无需手动提交
4GET /api/v4/extract-results/batch/{batch_id}查询结果

流程

Python 示例

import requests token = "API管理页面自定创建的token" url = "https://mineru.net/api/v4/file-urls/batch" header = { "Content-Type": "application/json", "Authorization": f"Bearer {token}" } data = { "files": [ {"name": "demo.pdf", "data_id": "abcd"} ], "model_version": "vlm" } file_path = ["demo.pdf"] try: # 第一步:申请上传链接 response = requests.post(url, headers=header, json=data) if response.status_code == 200: result = response.json() if result["code"] == 0: batch_id = result["data"]["batch_id"] urls = result["data"]["file_urls"] print(f"batch_id: {batch_id}") # 第二步:上传文件 for i in range(len(urls)): with open(file_path[i], 'rb') as f: res_upload = requests.put(urls[i], data=f) if res_upload.status_code == 200: print(f"{urls[i]} 上传成功") else: print(f"{urls[i]} 上传失败") else: print(f"申请上传链接失败: {result['msg']}") else: print(f"请求失败: {response.status_code}") except Exception as err: print(err)
注意点说明
上传链接有效期24 小时,需在有效期内完成上传
上传时请求头无须设置Content-Type
自动提交文件上传完成后,系统自动扫描并提交解析任务
单次申请上限不超过 50 个文件
Token 格式Bearer+ 空格 + Token

查询结果

batch_id = "上一步返回的 batch_id" url = f"https://mineru.net/api/v4/extract-results/batch/{batch_id}" header = { "Content-Type": "application/json", "Authorization": f"Bearer {token}" } res = requests.get(url, headers=header) print(res.json())

结果状态:

state说明
waiting-file等待文件上传
pending排队中
running正在解析
done完成,返回full_zip_url
failed失败,返回err_msg

二、Agent 轻量解析 API(免 Token,适合 Agent 场景)

适用场景

  • 文件较小(≤ 10MB,≤ 20 页)

  • 快速解析,无需高精度

  • 无需登录,IP 限频

  • 仅输出 Markdown

核心接口

步骤接口说明
1POST /api/v1/agent/parse/file获取签名上传 URL
2PUT <file_url>上传文件到 OSS
3GET /api/v1/agent/parse/{task_id}查询结果

流程

Python 示例

import requests import time BASE_URL = "https://mineru.net/api/v1/agent" def parse_by_file(file_path, language="ch", page_range=None, enable_table=True, is_ocr=False, enable_formula=True): """通过文件上传提交文档解析任务并等待结果。""" file_name = file_path.split("/")[-1].split("\\")[-1] # 1. 获取签名上传 URL data = { "file_name": file_name, "language": language, "enable_table": enable_table, "is_ocr": is_ocr, "enable_formula": enable_formula } if page_range: data["page_range"] = page_range resp = requests.post(f"{BASE_URL}/parse/file", json=data) result = resp.json() if result["code"] != 0: print(f"获取上传链接失败: {result['msg']}") return None task_id = result["data"]["task_id"] file_url = result["data"]["file_url"] print(f"任务已创建, task_id: {task_id}") # 2. PUT 上传文件到 OSS with open(file_path, "rb") as f: put_resp = requests.put(file_url, data=f) if put_resp.status_code not in (200, 201): print(f"文件上传失败, HTTP {put_resp.status_code}") return None print("文件上传成功,等待解析...") # 3. 轮询等待结果 return poll_result(task_id) def poll_result(task_id, timeout=300, interval=3): """轮询查询解析结果。""" state_labels = { "pending": "排队中", "running": "解析中", "waiting-file": "等待文件上传", } start = time.time() while time.time() - start < timeout: resp = requests.get(f"{BASE_URL}/parse/{task_id}") result = resp.json() state = result["data"]["state"] elapsed = int(time.time() - start) if state == "done": markdown_url = result["data"]["markdown_url"] print(f"[{elapsed}s] 解析完成, Markdown 链接: {markdown_url}") md_resp = requests.get(markdown_url) return md_resp.text if state == "failed": print(f"[{elapsed}s] 解析失败: {result['data'].get('err_msg')}") return None print(f"[{elapsed}s] {state_labels.get(state, state)}...") time.sleep(interval) print(f"轮询超时,请手动查询 task_id: {task_id}") return None # 使用 content = parse_by_file("./document.pdf")
注意点说明
无需 Token通过 IP 限频防滥用
不支持批量每次请求只能上传一个文件
文件限制≤ 10MB,≤ 20 页
支持格式PDF、图片、Docx、PPTx、Xlsx
输出格式仅 Markdown(CDN 链接)
IP 限频超限返回 HTTP 429

常见错误码

错误码说明解决建议
A0202Token 错误检查 Token 和Bearer前缀
A0211Token 过期更换新 Token
-60005文件大小超限最大 200MB
-60006文件页数超限拆分文件后重试
-30001轻量接口文件超限用精准 API 或拆分
-30003轻量接口页数超限用精准 API 或指定page_range
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/19 4:23:02

Handsontable入门:5分钟实现网页可编辑Excel表格

简介&#xff1a;Handsontable 是一款轻量级、高性能的 JavaScript 数据网格组件&#xff0c;专为 Web 应用中实现 Excel 风格的表格编辑与数据交互而设计&#xff0c;适用于前端开发者、数据可视化工程师及需要嵌入可编辑表格的中后台系统项目。资源包为官方 dist 目录精简整合…

作者头像 李华
网站建设 2026/10/19 4:22:51

基于昇腾CANN与MindSpore的智慧家居安防系统全链路实战

最近我把家里的安防系统整个重写了一遍。不夸张地说&#xff0c;以前那套主要靠云平台做分析的方案&#xff0c;一到晚上就变成“误报发生器”——风吹窗帘也报警&#xff0c;猫从客厅跑过去也报警&#xff0c;半夜手机被震醒的感觉谁经历过谁知道。后来我决定换一条更贴近实战…

作者头像 李华
网站建设 2026/10/19 4:22:50

内核内存管理子系统构建全解析:从位图到页表

《操作系统真象还原》前面五章折腾完&#xff0c;你的内核已经能在屏幕上打印字符、能跳进保护模式、能开分页了。但你心里清楚&#xff0c;这只是个“花架子”——它没有任何自主管理资源的能力。第六章“完善内核”就是这道分水岭&#xff1a;这一章做完&#xff0c;内核才算…

作者头像 李华
网站建设 2026/10/19 4:22:47

open-code-review自动化代码评审实践:配置、规则与CI集成

1. 代码评审的现状与痛点做开发这些年&#xff0c;代码评审&#xff08;Code Review&#xff09;一直是个绕不开的话题。团队小的时候还好&#xff0c;几个人坐在一起&#xff0c;PR 提上来互相看一眼&#xff0c;口头说两句就过了。团队一扩张&#xff0c;问题就全出来了&…

作者头像 李华
网站建设 2026/10/19 4:22:35

FlareOn逆向入门:从PE动态调试到JavaScript混淆破译实战

先说个结论&#xff1a;如果你正在找逆向入门的练手题&#xff0c;[FlareOn2] very_success 和 [FlareOn3] Challenge1 是两堂绕不开的必修课。前者是一道标准的 Windows PE 动态调试题&#xff0c;考的是在调试器里观察程序行为、定位校验分支、修改内存状态让校验“按你的想法…

作者头像 李华
网站建设 2026/10/19 4:21:11

VTK 与 Qt 项目怎样做回归验证?几何、图像与性能分层检查

升级 VTK 或 Qt 后&#xff0c;程序能打开&#xff0c;截图看起来也相近&#xff0c;就可以认为没有问题吗&#xff1f;如果某个坐标轴被镜像&#xff0c;模型可能仍然像原来的形状&#xff1b;如果驱动改变抗锯齿&#xff0c;截图可能出现像素差异&#xff0c;却没有任何几何错…

作者头像 李华