Python调用OCR接口批量提取文档图片内容并生成Word

橘子海
橘子海
发布时间:2026-10-12| 1人浏览过
原创

针对部分在线文库将非VIP内容以图片形式展示且禁止复制的情况,本文介绍如何利用Python结合开发者工具抓包分析与百度云高精度OCR接口,实现文档图片的自动下载、文字识别及Word文件一键导出,完整覆盖从环境配置到代码落地的实操流程。

环境与依赖准备

本方案基于 Python 3.8+ 运行环境,推荐使用 PyCharm 或 VS Code 作为集成开发环境。在开始编写代码前,需确保系统已安装以下第三方库:

  • requests:负责模拟浏览器发送HTTP请求并处理响应数据。
  • python-docx:用于创建、编辑和保存Word格式文档。
  • 内置模块:re(正则表达式)、base64(图片编码)、os(文件路径管理)、json(数据解析)。

打开终端或命令行,执行以下命令完成安装:

pip install requests python-docx

完整操作流程

第1步:抓包分析目标网页数据源

目的:定位包含分页图片地址的网络请求接口。
操作入口:Chrome / Edge 浏览器 → F12 或右键点击“检查” → Network(网络)面板。
具体步骤:刷新待处理的文库页面,观察数据包列表。通常可在XHR或Fetch请求中找到返回JSON格式的接口,其数据结构内往往包含docList或类似字段,其中的pic键即为每一页的加密或水印图片URL。记录该接口的完整请求URL与必要的请求参数(如docId)。

第2步:编写接口请求与图片下载逻辑

目的:获取接口返回的分页图片链接并保存至本地目录。
重要参数:需在请求头中伪装浏览器标识,避免触发反爬拦截。
参考代码:

import requests
import json
import re

url = 'https://wenku.example.com/gsearch/rec/pcviewdocrec' # 替换为实际抓包得到的接口地址
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'
}
# 假设已通过前端页面解析获取到docId与query参数
params = {'docId': '你的文档ID', 'query': '文档标题'}

response = requests.get(url=url, params=params, headers=headers)
response.raise_for_status()
data = response.json()

# 遍历提取图片链接并准备下载
image_urls = []
for item in data.get('data', {}).get('relateDoc', []):
    if item.get('pic'):
        image_urls.append(item['pic'])
print(f"共识别到 {len(image_urls)} 页图片资源")

第3步:接入云端OCR服务提取文字

目的:将本地保存的图片转换为结构化文本。
入口说明:前往百度云智能语音/图像识别官网注册账号,创建应用并获取AK(Access Key)与SK(Secret Key)。注意:生产环境中严禁硬编码密钥,应通过环境变量读取。
核心逻辑:通过OAuth2机制获取临时访问令牌,将图片转为Base64字符串后提交至accurate_basic高精度接口。

import requests
import base64
import os

def fetch_access_token(ak, sk):
    token_url = f"https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={ak}&client_secret={sk}"
    res = requests.get(token_url)
    return res.json().get('access_token')

def ocr_recognize(img_path, access_token):
    # 读取图片并编码
    with open(img_path, 'rb') as f:
        img_data = base64.b64encode(f.read())
    
    request_url = f"https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic?access_token={access_token}"
    payload = {"image": img_data}
    headers = {"Content-Type": "application/x-www-form-urlencoded"}
    
    ocr_res = requests.post(request_url, data=payload, headers=headers)
    result_json = ocr_res.json()
    
    # 提取识别到的文字并按行拼接
    texts = [item['words'] for item in result_json.get('words_result', [])]
    return "\n".join(texts)

第4步:循环识别并写入Word文档

目的:自动化完成批量图片识别与文档排版输出。
可观察状态:运行完成后当前目录生成同名Word文件,内容按页面顺序排列,无乱码或严重漏字。

from docx import Document
from docx.shared import Pt

doc = Document()
# 添加文档标题(可选)
doc.add_heading('OCR识别结果', level=1)

token = fetch_access_token('你的AK', '你的SK')
img_dir = './images'
os.makedirs(img_dir, exist_ok=True)

# 实际使用时请替换为第2步获取的真实下载逻辑
for idx, pic_url in enumerate(image_urls):
    local_path = os.path.join(img_dir, f"page_{idx+1}.jpg")
    # 此处省略下载代码,假设图片已按顺序存入本地
    # img_bytes = requests.get(pic_url, headers=headers).content
    # with open(local_path, 'wb') as f: f.write(img_bytes)
    
    text = ocr_recognize(local_path, token)
    doc.add_paragraph(text)
    
with open('extracted_document.docx', 'wb+') as f:
    doc.save(f.name)
print("文档生成完毕,请核对内容完整性。")

常见问题与排错指南

HTTP 403 Forbidden:请求头缺少有效的User-Agent或使用默认空值。请参照第2步代码补充完整的浏览器标识字符串。
KeyError 'access_token':AK/SK配置错误、应用审核未通过或超出免费配额。登录控制台检查应用状态与每日调用次数限制。
ModuleNotFoundError:确认虚拟环境是否激活。在IDE终端重新执行pip install python-docx即可解决。

总结

通过组合HTTP抓包、云端OCR识别与文档库操作,能够有效绕过常规页面的文本锁定限制。该方法的核心在于准确解析动态渲染的数据接口,并合理规划图片读写与OCR调用的循环结构。实际应用中需注意目标网站结构的变动频率,保持代码的容错性,同时遵守相关平台的版权声明与服务协议。以上就是Python调用OCR接口批量提取文档图片内容并生成Word的详细内容,更多关于Python自动化办公与网页数据采集的资料请关注本站其它相关文章!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。