GLM-OCR与Python爬虫实战:自动化文档信息提取与识别
GLM-OCR与Python爬虫实战自动化文档信息提取与识别你是不是也遇到过这样的麻烦老板让你从一堆网站和PDF报告里把那些关键数据、产品信息、价格表都扒拉出来整理成一份干净的Excel表格。手动复制粘贴眼睛都要看花了还容易出错。用传统的OCR工具格式稍微乱一点或者图片质量差一些识别出来的文字就乱七八糟后期还得花大量时间去校对。今天咱们就来聊聊怎么用GLM-OCR这个高精度的文字识别工具加上Python爬虫搭一个自动化的信息提取流水线。简单来说就是让程序帮你把网上的文档、图片抓下来自动识别里面的文字再把有用的信息整理得整整齐齐。整个过程从抓取到识别再到入库一气呵成你只需要泡杯咖啡等着看结果就行。1. 为什么需要这套组合拳在开始动手之前咱们先得搞清楚为什么是GLM-OCR加上Python爬虫而不是别的方案。传统的网页信息提取如果页面是纯文本的用爬虫解析HTML结构就能搞定。但现实情况要复杂得多。很多关键信息比如产品说明书、扫描版的合同、财务报表截图、甚至是嵌在网页里的图片验证码都是以图片或者PDF的形式存在的。爬虫抓下来的只是一堆二进制数据里面的文字内容它“看”不见。这时候就需要OCR光学字符识别技术上场了。但普通的OCR工具比如一些开源库对付印刷清晰、排版规整的文档还行一旦遇到手写体、复杂背景、低分辨率或者特殊字体识别准确率就直线下降。后期清洗和校正的工作量可能比手动录入还大。GLM-OCR的优势就在这里。它基于大模型技术对文字的上下文有更好的理解能力。这意味着即使某个字迹有点模糊或者排版有点歪斜它也能根据前后文“猜”出正确的字是什么大大提升了识别的准确率和鲁棒性。把它和Python爬虫结合起来就等于给爬虫装上了一双“智慧的眼睛”让它不仅能抓取页面还能读懂页面里图片和PDF上的内容。这套组合能帮你做什么呢举几个例子电商价格监控自动抓取竞品网站的商品主图识别图片上的价格和促销信息。行业报告采集批量下载券商的研究报告PDF格式自动提取其中的关键数据和结论。证件信息录入从上传的身份证、营业执照扫描件中快速准确地提取文字信息并结构化。社交媒体舆情分析抓取带有文字信息的图片或截图如产品反馈图分析其中的文本内容。2. 搭建你的自动化流水线整个流程可以想象成一条工厂生产线分为三个核心工段抓取、识别、处理。下面我们一步步来搭建。2.1 工段一用Python爬虫抓取原材料首先我们需要把网上的文档和图片“搬”到本地。这里我们用requests和BeautifulSoup这两个Python库它们就像我们的机械臂和分拣器。假设我们要从一个产品列表页抓取所有产品的详情图图片格式。核心思路是先抓取列表页解析出每个产品详情页的链接和图片地址然后再去详情页把大图下载下来。import requests from bs4 import BeautifulSoup import os import time def fetch_product_images(base_url, save_dirdownloaded_images): 从一个示例产品列表页抓取产品图片 headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 } # 创建保存目录 if not os.path.exists(save_dir): os.makedirs(save_dir) try: # 1. 获取列表页 list_response requests.get(base_url, headersheaders, timeout10) list_response.raise_for_status() # 检查请求是否成功 list_soup BeautifulSoup(list_response.content, html.parser) # 2. 假设产品链接在 classproduct-link 的a标签里 product_links [] for link in list_soup.find_all(a, class_product-link, hrefTrue): product_links.append(link[href]) print(f找到 {len(product_links)} 个产品链接) # 3. 遍历每个产品详情页找图片 for i, link in enumerate(product_links[:5]): # 示例只抓前5个 try: detail_url link if link.startswith(http) else fhttps://example.com{link} detail_resp requests.get(detail_url, headersheaders, timeout10) detail_soup BeautifulSoup(detail_resp.content, html.parser) # 假设产品大图在 classmain-image 的img标签里 img_tag detail_soup.find(img, class_main-image) if img_tag and img_tag.get(src): img_url img_tag[src] img_data requests.get(img_url, headersheaders, timeout10).content # 保存图片以产品索引命名 img_name fproduct_{i1}.jpg img_path os.path.join(save_dir, img_name) with open(img_path, wb) as f: f.write(img_data) print(f已保存: {img_name}) time.sleep(1) # 礼貌性延迟避免给服务器造成压力 except Exception as e: print(f处理链接 {link} 时出错: {e}) continue except requests.RequestException as e: print(f网络请求出错: {e}) # 使用示例 if __name__ __main__: # 替换成你要抓取的实际网址 target_url https://example.com/products fetch_product_images(target_url)对于PDF文档思路类似找到PDF的下载链接用requests下载即可。有些PDF可能直接以二进制流的形式返回注意区分。2.2 工段二用GLM-OCR进行精准识别原材料图片/PDF下载好了接下来就是让GLM-OCR来“阅读”它们。这里我们需要用到GLM-OCR的API或SDK。以下是一个调用其API进行识别的示例。首先确保你已安装必要的库并获取了API密钥。import base64 import requests import json from pathlib import Path def recognize_with_glm_ocr(image_path, api_key, api_urlhttps://your-glm-ocr-api-endpoint.com/v1/ocr): 调用GLM-OCR API识别单张图片 # 1. 读取图片并编码为base64 with open(image_path, rb) as image_file: image_data base64.b64encode(image_file.read()).decode(utf-8) # 2. 构造请求载荷 payload { image: image_data, language: zh, # 识别中文可按需修改 detect_direction: True, # 是否检测文字方向 line_break: True, # 是否保留换行符 } headers { Authorization: fBearer {api_key}, Content-Type: application/json } # 3. 发送请求 try: response requests.post(api_url, headersheaders, datajson.dumps(payload), timeout30) response.raise_for_status() result response.json() # 4. 解析返回结果 if result.get(code) 0: # 假设成功返回码为0 # 提取所有识别出的文本行 text_lines [] for item in result.get(data, []): text_lines.append(item.get(text, )) full_text \n.join(text_lines) return full_text else: print(fOCR识别失败错误信息: {result.get(message)}) return None except requests.exceptions.RequestException as e: print(fAPI请求失败: {e}) return None except json.JSONDecodeError as e: print(f解析响应失败: {e}) return None # 使用示例 if __name__ __main__: api_key YOUR_GLM_OCR_API_KEY # 替换为你的真实API密钥 test_image downloaded_images/product_1.jpg recognized_text recognize_with_glm_ocr(test_image, api_key) if recognized_text: print(识别结果) print(recognized_text)对于PDF文件你可以先将每一页PDF转换为图片可以使用pdf2image库然后再将图片送入GLM-OCR进行识别。2.3 工段三数据清洗与结构化入库识别出来的文本通常还是原始的、带有多余空格和换行的字符串。我们需要从中提取出有用的、结构化的信息。比如从产品图片识别出的文字里提取出产品名称、型号、价格。这里非常依赖你目标数据的规律。可以用正则表达式、关键词匹配或者更高级的NLP方法。import re import pandas as pd def extract_product_info(ocr_text): 从OCR识别文本中提取产品信息示例规则 info { name: None, model: None, price: None, description: } lines ocr_text.split(\n) # 示例规则1产品名通常在开头几行且包含特定关键词 for line in lines[:3]: if 手机 in line or 耳机 in line: # 根据你的产品类型修改 info[name] line.strip() break # 示例规则2型号通常是包含字母和数字的组合如 ABC-1234 model_pattern r[A-Z]{2,}-?\d{4,} for line in lines: match re.search(model_pattern, line) if match: info[model] match.group() break # 示例规则3价格通常是数字元//$可能带小数点 price_pattern r[\$]?\s*(\d\.?\d*)\s*[元]? for line in lines: match re.search(price_pattern, line) if match: info[price] match.group(1) break # 描述可以取中间部分文本 desc_start min(3, len(lines)) info[description] .join(lines[desc_start:]).strip()[:200] # 取前200字符 return info def save_to_csv(data_list, filenameextracted_products.csv): 将提取的结构化数据保存到CSV文件 df pd.DataFrame(data_list) df.to_csv(filename, indexFalse, encodingutf-8-sig) # utf-8-sig支持Excel直接打开显示中文 print(f数据已保存至 {filename}) # 使用示例 if __name__ __main__: # 假设我们有多个产品的OCR结果 all_products_info [] # 模拟处理多个文件 for i in range(1, 4): # 这里应该是从文件读取或直接传递OCR结果 # simulated_text f产品{i}名称\n型号MOD-{i}00\n价格{i*1000}元\n这是一段产品描述... # 实际应用中用上面 recognize_with_glm_ocr 函数的结果 # ocr_result recognize_with_glm_ocr(fproduct_{i}.jpg, api_key) # 假设 ocr_result 是获取到的文本 ocr_result f华为智能手机\n型号P{i}0 Pro\n售价{5999 - i*500}.00\n搭载先进芯片超感知影像系统... product_info extract_product_info(ocr_result) all_products_info.append(product_info) print(f产品{i}信息提取结果{product_info}) save_to_csv(all_products_info)3. 让流水线更高效可靠一个能投入生产的流水线不能只是能跑通就行还得跑得快、跑得稳。这里有几个关键点需要注意。3.1 异步处理与GPU加速如果你有成百上千张图片需要识别一张一张顺序处理会非常慢。我们可以用asyncio和aiohttp库来实现异步并发请求同时处理多个识别任务。import aiohttp import asyncio from pathlib import Path async def async_recognize_image(session, image_path, api_key, api_url): 异步识别单张图片 with open(image_path, rb) as f: image_data base64.b64encode(f.read()).decode(utf-8) payload {image: image_data, language: zh} headers {Authorization: fBearer {api_key}} try: async with session.post(api_url, jsonpayload, headersheaders, timeout30) as response: if response.status 200: result await response.json() return image_path, result.get(data, []) else: return image_path, None except Exception as e: print(f处理 {image_path} 时出错: {e}) return image_path, None async def batch_recognize_images(image_dir, api_key, api_url, max_concurrent5): 批量异步识别一个目录下的所有图片 image_paths list(Path(image_dir).glob(*.jpg)) list(Path(image_dir).glob(*.png)) connector aiohttp.TCPConnector(limitmax_concurrent) # 控制并发数 async with aiohttp.ClientSession(connectorconnector) as session: tasks [] for img_path in image_paths: task async_recognize_image(session, img_path, api_key, api_url) tasks.append(task) # 等待所有任务完成 results await asyncio.gather(*tasks) return results # 使用示例 async def main(): api_key YOUR_KEY api_url YOUR_API_URL image_folder downloaded_images recognition_results await batch_recognize_images(image_folder, api_key, api_url, max_concurrent3) for img_path, data in recognition_results: if data: print(f{img_path.name}: 识别成功共{len(data)}行文本) else: print(f{img_path.name}: 识别失败) # 运行异步主函数 if __name__ __main__: asyncio.run(main())关于GPU加速GLM-OCR的服务端通常已经部署在GPU服务器上因此其API调用本身就已经享受了GPU加速。我们本地需要优化的主要是网络请求的并发和图片的预处理如缩放、格式转换这些用CPU并行也能大幅提升效率。如果你的识别任务是在本地部署的模型上运行那么确保你的PyTorch或TensorFlow环境正确配置了CUDA并且将模型和数据加载到GPU上。3.2 错误重试与日志记录网络请求和API调用难免会失败。一个健壮的系统必须有重试机制和详细的日志。import logging from tenacity import retry, stop_after_attempt, wait_exponential, retry_if_exception_type import requests.exceptions # 配置日志 logging.basicConfig(levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s, handlers[ logging.FileHandler(pipeline.log), logging.StreamHandler() ]) logger logging.getLogger(__name__) # 定义重试装饰器 retry( stopstop_after_attempt(3), # 最多重试3次 waitwait_exponential(multiplier1, min2, max10), # 指数退避等待 retryretry_if_exception_type((requests.exceptions.Timeout, requests.exceptions.ConnectionError)), before_sleeplambda retry_state: logger.warning(f第{retry_state.attempt_number}次重试异常{retry_state.outcome.exception()}) ) def robust_ocr_request(image_path, api_key, api_url): 带重试机制的OCR请求 # ... (与前面 recognize_with_glm_ocr 函数核心逻辑相同) ... logger.info(f开始处理图片: {image_path}) # ... 发送请求 ... if success: logger.info(f图片 {image_path} 识别成功) else: logger.error(f图片 {image_path} 识别失败已重试多次) return result4. 总结把GLM-OCR和Python爬虫组合起来就像是给传统的爬虫项目装上了一颗更强大的“大脑”。爬虫负责不知疲倦地收集原始材料而GLM-OCR则负责理解这些材料中蕴含的文本信息。这套方案的核心价值在于它打通了从非结构化数据源图片、PDF网页到结构化数据数据库、表格的自动化通道。在实际操作中有几个点体会比较深。一是预处理很重要比如对图片进行适当的裁剪、去噪、二值化能显著提升后续OCR的准确率。二是规则引擎需要精心设计从识别出的文本中提取信息初期用正则表达式快速验证想法后期如果规则太复杂可以考虑引入简单的NLP模型如NER命名实体识别来提升泛化能力。三是监控和告警不能少尤其是批量任务运行时需要有机制能及时发现是某个网页结构变了还是OCR的准确率突然下降了。当然没有一套方案是万能的。如果目标网站的图片做了复杂的反爬处理或者文档版式极其复杂、手写体潦草可能还是会遇到挑战。这时候可能需要结合更专业的图像处理技术或者考虑人工复核的混合模式。但对于大多数常见的、以印刷体为主的文档和图片信息提取需求这套流水线已经能帮你节省大量重复劳动了。你可以先从一个小规模的任务开始尝试比如先搞定一个网站的一种产品信息跑通整个流程然后再逐步扩大范围和复杂度。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

相关新闻

打造专业学术演示:THU Beamer Theme高效排版指南

打造专业学术演示:THU Beamer Theme高效排版指南

打造专业学术演示:THU Beamer Theme高效排版指南 【免费下载链接】THU-Beamer-Theme A LaTeX beamer theme template for Tsinghua students. 项目地址: https://gitcode.com/gh_mirrors/th/THU-Beamer-Theme 5分钟启动指南:从安装到首份演示文稿…

2026/6/29 23:27:57 阅读更多 →
【Python低代码平台内核开发实战指南】:20年架构师亲授4大核心模块设计原理与避坑清单

【Python低代码平台内核开发实战指南】:20年架构师亲授4大核心模块设计原理与避坑清单

第一章:Python低代码平台内核开发全景认知Python低代码平台的内核并非黑盒,而是由可插拔、可扩展的模块化组件构成的运行时中枢。它承载着可视化逻辑编排、动态代码生成、运行时沙箱调度、元数据驱动渲染与服务编排等核心职责。理解其内核,意…

2026/6/29 23:30:42 阅读更多 →
开源力量:在CSDN社区分享你的InternLM2-Chat-1.8B微调与部署经验

开源力量:在CSDN社区分享你的InternLM2-Chat-1.8B微调与部署经验

开源力量:在CSDN社区分享你的InternLM2-Chat-1.8B微调与部署经验 最近在开发者圈子里,一个话题的热度持续攀升:如何让一个开源的对话大模型,比如InternLM2-Chat-1.8B,真正在自己的场景里跑起来,并且变得“…

2026/6/29 23:38:53 阅读更多 →

最新新闻

Paperxie 聊毕业论文 AI 写作|学长学姐实测,一步一步写学位论文真的省心

Paperxie 聊毕业论文 AI 写作|学长学姐实测,一步一步写学位论文真的省心

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/科研绘图毕业论文 - PaperXie智能写作PaperXieAi论文智能生成软件,10分钟生成万字毕业论文、期刊论文、文献综述、PPT,Aigc查重、降重报告、文献资料。只需一个标题,从开…

2026/7/7 0:29:34 阅读更多 →
如何轻松为任何游戏注入自定义插件:终极ASI加载器完整指南

如何轻松为任何游戏注入自定义插件:终极ASI加载器完整指南

如何轻松为任何游戏注入自定义插件:终极ASI加载器完整指南 【免费下载链接】Ultimate-ASI-Loader The Ultimate ASI Loader is a proxy DLL that loads custom .asi libraries into any game process. 项目地址: https://gitcode.com/gh_mirrors/ul/Ultimate-ASI-…

2026/7/7 0:29:34 阅读更多 →
Monorepo 工程化实战:Turborepo + pnpm 的全栈项目组织与构建缓存

Monorepo 工程化实战:Turborepo + pnpm 的全栈项目组织与构建缓存

Monorepo 工程化实战:Turborepo pnpm 的全栈项目组织与构建缓存 一、多仓库协作的效率黑洞:当你维护 5 个 npm 包时,改一行代码要跑几个 CI 全栈项目的常见组织方式是:前端一个仓库,后端一个仓库,共享类型…

2026/7/7 0:25:32 阅读更多 →
MediaCrawler:5分钟上手,一站式采集小红书、抖音、B站等主流平台数据

MediaCrawler:5分钟上手,一站式采集小红书、抖音、B站等主流平台数据

MediaCrawler:5分钟上手,一站式采集小红书、抖音、B站等主流平台数据 【免费下载链接】MediaCrawler-new 项目地址: https://gitcode.com/GitHub_Trending/me/MediaCrawler-new 你是否在为新媒体数据分析而烦恼?想要批量获取小红书、…

2026/7/7 0:23:31 阅读更多 →
免疫平衡的“黄金四象限“:IFN-γ/IL-17/IL-4/TGF-β1 Panel构建Th检测体系

免疫平衡的“黄金四象限“:IFN-γ/IL-17/IL-4/TGF-β1 Panel构建Th检测体系

【行业观察 | 生物标志物高通量检测新进展】Adaptive immunity is a balancing act. 这句话在教科书里躺了几十年,但直到今天,大多数实验室仍然在用"单点测量"的方式去逼近这个动态平衡。测了IFN-γ,不知道IL-4的走向;定…

2026/7/7 0:21:30 阅读更多 →
YOLOv8船舶检测实战:从算法原理到海事场景部署

YOLOv8船舶检测实战:从算法原理到海事场景部署

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 在船舶运输、港口管理和海事安全领域,如何高效、准确地识别和分类航道中的各类船舶,一直是行业智能化升级的核…

2026/7/7 0:21:30 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队,往往容易卡在一容易踩坑的选型难题: 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定,必须同时依赖「文本语义理解 实体关系推理」时,到底是做「向量图谱混合检索」就够了,还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻