【pdf表格提取教程】手把手教你使用Python 实现表格提取,全程免费!

59 阅读4分钟

一、教程概述 本教程将手把手教你使用 Python 调用数眼智能 PDF 解析 API,快速实现 PDF 中表格数据的提取,并将提取结果保存为 Excel 文件。全程聚焦核心流程,避开冗余操作,确保新手也能快速上手。

二、前置准备 账号与密钥获取 访问数眼智能官网完成注册登录或者私信我都可以获取免费接口使用名额; 进入「控制台」-「API 管理」-「接口密钥」,申请 PDF 解析接口权限; 审核通过后,复制你的AppID和AppSecret(密钥需妥善保管,切勿泄露)。 环境与依赖安装 确保本地安装 Python(3.7 及以上版本),然后安装必备的请求库:

三、核心流程说明 调用数眼智能 PDF 解析 API 提取表格的核心步骤: 通过AppID和AppSecret获取身份验证 Token(有效期 2 小时); 上传 PDF 文件(本地文件 / 在线 URL),指定解析类型为 “表格”; 接收接口响应,下载 / 保存表格解析结果(Excel 格式)。

四、完整代码实现 基础版:提取本地 PDF 表格

import os

# -------------------------- 配置项(替换为你的信息) --------------------------
APP_ID = "你的AppID"
APP_SECRET = "你的AppSecret"
PDF_FILE_PATH = "test_table.pdf"  # 本地PDF文件路径
SAVE_EXCEL_PATH = "extracted_table.xlsx"  # 提取结果保存路径
# -----------------------------------------------------------------------------

def get_auth_token():
    """获取接口调用的Token"""
    # Token请求地址
    token_url = "https://api.shuyanai.com/auth/token"
    headers = {"Content-Type": "application/json"}
    # 构造请求参数
    data = {
        "appId": APP_ID,
        "appSecret": APP_SECRET
    }
    
    try:
        response = requests.post(token_url, headers=headers, json=data)
        result = response.json()
        if result["code"] == 200:
            return result["data"]["token"]
        else:
            raise Exception(f"获取Token失败:{result['msg']}")
    except Exception as e:
        print(f"Token获取异常:{str(e)}")
        return None

def extract_pdf_table(token):
    """调用API提取PDF表格并保存为Excel"""
    # PDF解析接口地址
    parse_url = "https://api.shuyanai.com/pdf/parse"
    # 请求头:携带Token验证身份
    headers = {"Authorization": f"Bearer {token}"}
    
    # 构造请求参数:上传PDF文件+指定解析规则
    with open(PDF_FILE_PATH, "rb") as f:
        files = {"file": f}
        data = {
            "parseType": "table",  # 仅提取表格
            "resultFormat": "excel",  # 结果返回Excel格式
            "pageRange": "all"  # 解析全部页面,也可指定"1-5"解析1-5页
        }
        
        try:
            # 发送解析请求
            response = requests.post(parse_url, headers=headers, files=files, data=data)
            result = response.json()
            
            if result["code"] == 200:
                # 解析成功,获取结果下载链接
                result_url = result["data"]["resultUrl"]
                # 下载Excel文件并保存
                excel_response = requests.get(result_url)
                with open(SAVE_EXCEL_PATH, "wb") as excel_file:
                    excel_file.write(excel_response.content)
                print(f"表格提取成功!结果已保存至:{os.path.abspath(SAVE_EXCEL_PATH)}")
            else:
                print(f"表格提取失败:{result['msg']}")
        except Exception as e:
            print(f"解析请求异常:{str(e)}")

if __name__ == "__main__":
    # 1. 获取Token
    token = get_auth_token()
    if token:
        # 2. 提取表格
        extract_pdf_table(token)

  1. 进阶版:提取在线 PDF 表格 + 错误处理优化

`import requests import os from requests.exceptions import RequestException

-------------------------- 配置项 --------------------------

APP_ID = "你的AppID" APP_SECRET = "你的AppSecret" ONLINE_PDF_URL = "example.com/online_tabl…" # 在线PDF地址 SAVE_EXCEL_PATH = "online_table_result.xlsx"

-----------------------------------------------------------

def get_auth_token(): """获取Token(增加超时和重试逻辑)""" token_url = "api.shuyanai.com/auth/token" headers = {"Content-Type": "application/json"} data = {"appId": APP_ID, "appSecret": APP_SECRET}

# 重试3次
for retry in range(3):
    try:
        response = requests.post(token_url, headers=headers, json=data, timeout=10)
        result = response.json()
        if result["code"] == 200:
            return result["data"]["token"]
        else:
            print(f"第{retry+1}次获取Token失败:{result['msg']}")
    except RequestException as e:
        print(f"第{retry+1}次请求超时/异常:{str(e)}")
return None

def extract_online_pdf_table(token): """提取在线PDF表格(无需下载本地)""" parse_url = "api.shuyanai.com/pdf/parse" headers = { "Authorization": f"Bearer {token}", "Content-Type": "application/json" }

# 构造请求参数(使用fileUrl而非本地文件)
data = {
    "fileUrl": ONLINE_PDF_URL,
    "parseType": "table",
    "resultFormat": "excel",
    "pageRange": "2-8"  # 仅解析第2-8页的表格
}

try:
    response = requests.post(parse_url, headers=headers, json=data, timeout=30)
    result = response.json()
    
    if result["code"] == 200:
        # 下载并保存结果
        result_url = result["data"]["resultUrl"]
        excel_response = requests.get(result_url, timeout=20)
        with open(SAVE_EXCEL_PATH, "wb") as f:
            f.write(excel_response.content)
        print(f"在线PDF表格提取成功!文件路径:{os.path.abspath(SAVE_EXCEL_PATH)}")
    else:
        print(f"解析失败:{result['msg']}(错误码:{result['code']})")
except RequestException as e:
    print(f"在线解析异常:{str(e)}")

if name == "main": token = get_auth_token() if token: extract_online_pdf_table(token) else: print("Token获取失败,终止流程") `

五、关键参数说明

image.png 六、常见问题排查 Token 获取失败 检查AppID和AppSecret是否填写正确; 确认接口权限已开通(未审核通过会提示权限不足)。 表格提取为空 / 不全 确认 PDF 中有表格(纯图片表格需开启 OCR,parseType 设为 “ocr”); 检查页码范围是否正确,避免漏解析目标页。 请求超时 增大请求超时时间(示例中设为 10/30 秒); 确认网络可访问数眼智能 API 域名(api.shuyanai.com)。 七、拓展使用 批量提取:遍历本地 PDF 文件夹,循环调用extract_pdf_table函数即可实现批量解析; 结果处理:提取 Excel 后,可使用pandas库进一步清洗、分析表格数据; 集成到业务系统:将代码封装为接口,嵌入 OA / 财务系统,实现自动化表格提取。 如果需要对接扫描版 PDF(图片表格)的 OCR 提取,或想实现表格数据的结构化 JSON 输出,可留言补充对应的代码示例!