GLM-OCR轻量级专业级多模态OCR模型Python爬虫实战自动化数据采集与识别最近在做一个数据聚合项目需要从几十个不同的网站上抓取产品图片并把图片里的价格、规格、描述文字都提取出来。一开始我试了几个传统的OCR工具效果总是不太理想要么是排版复杂的图片识别率低要么是中文和英文混在一起就乱套了。后来发现了GLM-OCR这个模型它专门针对多语言和复杂版式做了优化而且部署起来特别轻量正好能和我常用的Python爬虫框架无缝对接。这篇文章我就来分享一下怎么把GLM-OCR和Python爬虫结合起来搭建一套自动化数据采集与识别的流程。整个过程不复杂核心就是爬虫负责“抓”GLM-OCR负责“认”最后再把结果规规矩矩地存起来。无论你是想批量处理网页截图、文档图片还是做竞品信息监控这套方法都能帮你省下大量手动操作的时间。1. 为什么选择GLM-OCR做爬虫的“眼睛”在做自动化数据采集时文字识别是个绕不开的环节。你可能遇到过这些问题从网上爬下来的商品图价格信息嵌在复杂的背景里抓取的PDF转成的图片表格线干扰严重或者页面是中文英文数字混排普通OCR一下就懵了。GLM-OCR在这方面有几个让我觉得特别顺手的地方。首先它真的很“轻”。你不需要准备一台特别高配的服务器在普通的开发机上就能跑起来这对于需要长期运行的数据采集任务来说成本友好。其次它的“眼神”很好对多语言和复杂版式的图片识别准确率很高尤其是中文场景下的表现比一些通用OCR模型要强不少。最后它提供了清晰的Python接口几行代码就能调用和Requests、Scrapy、Playwright这些爬虫框架集成起来几乎没有障碍。简单来说它就像一个专门为自动化任务定制的“读图专家”安静、高效、且专业对口。2. 环境搭建与核心工具准备工欲善其事必先利其器。我们先来把需要的工具包准备好。整个过程主要分两大块一是GLM-OCR模型的部署和调用环境二是爬虫相关的库。2.1 安装GLM-OCR及相关依赖GLM-OCR的安装非常直接。建议先创建一个独立的Python虚拟环境避免包冲突。# 创建并激活虚拟环境以conda为例 conda create -n glm-ocr-spider python3.8 conda activate glm-ocr-spider # 安装GLM-OCR的核心库 pip install glm-ocrglm-ocr这个包通常会帮你处理好大部分底层依赖比如PyTorch。如果安装过程中有提示按照指引安装对应版本的PyTorch即可。2.2 安装爬虫与图像处理库接下来安装我们爬虫流程中会用到的其他帮手。# 安装网络请求和爬虫框架 pip install requests beautifulsoup4 scrapy playwright # 安装异步HTTP客户端用于高并发场景 pip install aiohttp # 安装图像处理库用于图片的预处理和后处理 pip install Pillow opencv-python # 初始化Playwright用于需要渲染JavaScript的动态网页 playwright install这里我列出了几个常见的选项requests和aiohttp用于发起网络请求beautifulsoup4和scrapy用于解析HTMLplaywright用于处理那些需要浏览器渲染才能加载出内容的动态页面。你可以根据目标网站的特点选择组合。3. 爬虫与OCR集成的核心流程拆解整个自动化流程可以形象地理解为一条流水线爬虫是上游的原料采集工GLM-OCR是中游的质检员下游则是数据打包员。我们一步步来看。3.1 第一步爬虫抓取目标图片链接无论你用哪种爬虫框架第一步都是定位并下载图片。这里以requests和BeautifulSoup抓取静态页面为例。import requests from bs4 import BeautifulSoup import os def fetch_image_urls(page_url, img_selector): 从指定页面抓取图片链接 :param page_url: 目标网页地址 :param img_selector: CSS选择器用于定位图片标签如 div.product img :return: 图片URL列表 headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 } try: resp requests.get(page_url, headersheaders, timeout10) resp.raise_for_status() soup BeautifulSoup(resp.content, html.parser) img_tags soup.select(img_selector) # 提取src属性并处理可能的相对路径 img_urls [] for img in img_tags: src img.get(src) if src: if src.startswith(http): img_urls.append(src) else: # 简化的相对路径补全实际项目需根据网站结构调整 img_urls.append(requests.compat.urljoin(page_url, src)) return img_urls except Exception as e: print(f抓取页面失败: {page_url}, 错误: {e}) return [] # 示例抓取某个产品列表页的所有产品主图 url https://example.com/products selector div.product-item img.main-img image_list fetch_image_urls(url, selector) print(f找到 {len(image_list)} 张图片)这段代码的核心是使用CSS选择器精准定位你需要的图片避免下载页面上的广告、图标等无关图片。3.2 第二步下载图片并调用GLM-OCR识别拿到图片链接后我们下载图片到内存或本地然后送给GLM-OCR识别。from glm_ocr import GLMOCR import io from PIL import Image # 初始化GLM-OCR模型 # 首次运行会自动下载模型权重请确保网络通畅 ocr_engine GLMOCR() def download_and_ocr(img_url): 下载单张图片并进行OCR识别 :param img_url: 图片URL :return: 识别出的文本列表每个元素对应一个检测框的文本 try: # 下载图片 resp requests.get(img_url, timeout15) resp.raise_for_status() image_data resp.content # 将二进制数据转为PIL Image对象 image Image.open(io.BytesIO(image_data)) # 调用GLM-OCR进行识别 # result 是一个包含多个字典的列表每个字典有‘text’‘bbox’等信息 ocr_result ocr_engine.recognize(image) # 提取所有识别出的文本 texts [item[text] for item in ocr_result] return texts except Exception as e: print(f处理图片失败: {img_url}, 错误: {e}) return [] # 处理刚才抓取到的第一张图片 if image_list: first_image_texts download_and_ocr(image_list[0]) print(f识别结果: {first_image_texts})ocr_engine.recognize()返回的结果很详细包含了每一段文字的内容及其在图片中的位置坐标。这对于需要保持原文结构如区分标题和正文的场景非常有用。3.3 第三步结果清洗与结构化存储OCR识别出来的原始文本可能包含空格、换行符混乱或者不是你需要的部分。我们需要做一些清洗然后存起来。import pandas as pd import re from datetime import datetime def clean_ocr_text(text_list): 清洗OCR识别出的文本列表 :param text_list: 原始文本列表 :return: 清洗后的单一字符串或结构化数据 full_text .join(text_list) # 移除过多的空白字符包括空格、换行、制表符等 cleaned_text re.sub(r\s, , full_text).strip() return cleaned_text def save_results(data_list, output_formatcsv): 将识别结果保存到文件 :param data_list: 字典列表每个字典包含‘url’‘text’等信息 :param output_format: 输出格式支持csv或json df pd.DataFrame(data_list) timestamp datetime.now().strftime(%Y%m%d_%H%M%S) if output_format csv: filename focr_results_{timestamp}.csv df.to_csv(filename, indexFalse, encodingutf-8-sig) elif output_format json: filename focr_results_{timestamp}.json df.to_json(filename, orientrecords, force_asciiFalse, indent2) print(f结果已保存至: {filename}) return filename # 模拟一个批处理流程 all_results [] for idx, img_url in enumerate(image_list[:5]): # 示例只处理前5张 print(f正在处理第 {idx1} 张图片: {img_url[:50]}...) raw_texts download_and_ocr(img_url) cleaned_text clean_ocr_text(raw_texts) result_entry { image_url: img_url, raw_ocr: raw_texts, cleaned_text: cleaned_text, processed_time: datetime.now().isoformat() } all_results.append(result_entry) # 可以在这里添加更精细的解析逻辑比如用正则表达式提取价格、日期等 # 保存所有结果 save_results(all_results, csv)清洗和存储这一步非常灵活你可以根据业务需求用正则表达式从cleaned_text里提取特定模式的信息如价格、手机号、邮箱然后作为新的字段存入表格。4. 进阶技巧让采集识别更快更稳当需要处理成百上千张图片时基础的串行处理方式就太慢了。我们需要考虑效率和稳定性。4.1 使用异步并发提升速度利用aiohttp和asyncio可以实现异步并发下载和识别速度提升非常明显。import aiohttp import asyncio from glm_ocr import GLMOCR # 注意GLM-OCR模型本身可能不是线程安全的这里我们采用异步下载同步识别的模式。 ocr_engine GLMOCR() # 在主进程中初始化 async def async_download_and_ocr(session, img_url, semaphore): 异步下载图片然后调用OCR函数OCR部分同步执行 async with semaphore: # 使用信号量控制并发数避免对目标网站造成过大压力 try: async with session.get(img_url, timeout30) as response: if response.status 200: image_data await response.read() image Image.open(io.BytesIO(image_data)) # OCR识别是CPU/GPU密集型计算在当前线程同步执行 ocr_result ocr_engine.recognize(image) texts [item[text] for item in ocr_result] return img_url, texts else: return img_url, [] except Exception as e: print(f异步处理失败: {img_url}, 错误: {e}) return img_url, [] async def main_async(image_urls, max_concurrent5): 主异步函数 semaphore asyncio.Semaphore(max_concurrent) async with aiohttp.ClientSession() as session: tasks [async_download_and_ocr(session, url, semaphore) for url in image_urls] results await asyncio.gather(*tasks) return results # 使用示例 image_urls image_list # 假设这是之前抓取到的图片链接列表 loop asyncio.get_event_loop() ocr_results loop.run_until_complete(main_async(image_urls, max_concurrent10)) for url, texts in ocr_results: if texts: print(f{url[:40]}... - 识别出 {len(texts)} 段文字)通过设置max_concurrent你可以控制同时处理的任务数量在速度和系统负载之间取得平衡。4.2 失败重试与日志记录网络请求和识别过程都可能失败一个健壮的爬虫必须有重试机制。import time from tenacity import retry, stop_after_attempt, wait_exponential retry(stopstop_after_attempt(3), waitwait_exponential(multiplier1, min2, max10)) def robust_download_and_ocr(img_url): 带有重试机制的下载识别函数 # 这里复用之前 download_and_ocr 的逻辑但被retry装饰器包裹 return download_and_ocr(img_url) # 同时建议将运行日志写入文件方便后期排查问题 import logging logging.basicConfig( levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s, handlers[ logging.FileHandler(ocr_spider.log), logging.StreamHandler() ] ) logging.info(OCR爬虫任务开始...)使用tenacity库可以优雅地实现指数退避重试。日志记录则能帮你清晰追踪每一张图片的处理状态。5. 实战案例批量识别电商商品价格图假设我们要监控某个电商平台上多个商品的价格变化价格信息就在商品主图上。我们可以定期抓取这些图片并用GLM-OCR提取价格。import schedule import time def monitor_price(product_page_url, img_selector): 监控任务函数 logging.info(f开始执行监控任务: {product_page_url}) # 1. 抓取最新图片链接 current_images fetch_image_urls(product_page_url, img_selector) if not current_images: logging.warning(未找到图片任务结束。) return # 2. 识别最新图片这里取第一张为主图 price_texts download_and_ocr(current_images[0]) full_text clean_ocr_text(price_texts) # 3. 使用正则表达式提取价格示例根据实际情况调整 price_pattern r[¥$]?\s*\d(?:\.\d{1,2})? # 匹配货币符号和数字 prices_found re.findall(price_pattern, full_text) # 4. 记录或报警 logging.info(f商品页面: {product_page_url}) logging.info(f识别全文: {full_text[:100]}...) # 只打印前100字符 logging.info(f提取到价格: {prices_found}) # 这里可以添加逻辑与上次价格比较如果变化超过阈值则发送通知邮件、钉钉等 # save_to_database(product_page_url, prices_found, datetime.now()) # 设置每30分钟执行一次监控任务 schedule.every(30).minutes.do(monitor_price, product_page_urlhttps://example.com/product/12345, img_selectordiv.price-tag img) logging.info(价格监控爬虫已启动按CtrlC退出。) try: while True: schedule.run_pending() time.sleep(1) except KeyboardInterrupt: logging.info(监控任务已停止。)这个案例展示了如何将我们搭建的流程封装成一个定时自动化任务实现持续的数据采集和识别。6. 总结把GLM-OCR和Python爬虫组合在一起相当于给爬虫装上了一双“智慧的眼睛”。从实际使用来看这套方案最大的优点是灵活和高效。GLM-OCR模型本身识别准确率高尤其是对中文和复杂版式友好而且资源消耗相对较低非常适合作为后台服务长期运行。在具体实施时爬虫部分可以根据目标网站的复杂度选择合适的工具静态页面用RequestsBeautifulSoup就够了动态页面则可以考虑Playwright。识别后的文本处理是关键好的清洗和结构化规则能让数据的价值倍增。最后别忘了用异步和重试机制来提升整个流程的健壮性和速度。如果你正准备处理大批量的图片文字提取工作不妨试试这个组合。先从一个小规模的网站开始跑通整个流程再逐步增加并发和优化解析规则。遇到识别不准的图片可以单独拿出来分析有时候稍微调整一下图片的预处理比如转为灰度、增加对比度就能有奇效。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。
GLM-OCR轻量级专业级多模态OCR模型Python爬虫实战:自动化数据采集与识别
GLM-OCR轻量级专业级多模态OCR模型Python爬虫实战自动化数据采集与识别最近在做一个数据聚合项目需要从几十个不同的网站上抓取产品图片并把图片里的价格、规格、描述文字都提取出来。一开始我试了几个传统的OCR工具效果总是不太理想要么是排版复杂的图片识别率低要么是中文和英文混在一起就乱套了。后来发现了GLM-OCR这个模型它专门针对多语言和复杂版式做了优化而且部署起来特别轻量正好能和我常用的Python爬虫框架无缝对接。这篇文章我就来分享一下怎么把GLM-OCR和Python爬虫结合起来搭建一套自动化数据采集与识别的流程。整个过程不复杂核心就是爬虫负责“抓”GLM-OCR负责“认”最后再把结果规规矩矩地存起来。无论你是想批量处理网页截图、文档图片还是做竞品信息监控这套方法都能帮你省下大量手动操作的时间。1. 为什么选择GLM-OCR做爬虫的“眼睛”在做自动化数据采集时文字识别是个绕不开的环节。你可能遇到过这些问题从网上爬下来的商品图价格信息嵌在复杂的背景里抓取的PDF转成的图片表格线干扰严重或者页面是中文英文数字混排普通OCR一下就懵了。GLM-OCR在这方面有几个让我觉得特别顺手的地方。首先它真的很“轻”。你不需要准备一台特别高配的服务器在普通的开发机上就能跑起来这对于需要长期运行的数据采集任务来说成本友好。其次它的“眼神”很好对多语言和复杂版式的图片识别准确率很高尤其是中文场景下的表现比一些通用OCR模型要强不少。最后它提供了清晰的Python接口几行代码就能调用和Requests、Scrapy、Playwright这些爬虫框架集成起来几乎没有障碍。简单来说它就像一个专门为自动化任务定制的“读图专家”安静、高效、且专业对口。2. 环境搭建与核心工具准备工欲善其事必先利其器。我们先来把需要的工具包准备好。整个过程主要分两大块一是GLM-OCR模型的部署和调用环境二是爬虫相关的库。2.1 安装GLM-OCR及相关依赖GLM-OCR的安装非常直接。建议先创建一个独立的Python虚拟环境避免包冲突。# 创建并激活虚拟环境以conda为例 conda create -n glm-ocr-spider python3.8 conda activate glm-ocr-spider # 安装GLM-OCR的核心库 pip install glm-ocrglm-ocr这个包通常会帮你处理好大部分底层依赖比如PyTorch。如果安装过程中有提示按照指引安装对应版本的PyTorch即可。2.2 安装爬虫与图像处理库接下来安装我们爬虫流程中会用到的其他帮手。# 安装网络请求和爬虫框架 pip install requests beautifulsoup4 scrapy playwright # 安装异步HTTP客户端用于高并发场景 pip install aiohttp # 安装图像处理库用于图片的预处理和后处理 pip install Pillow opencv-python # 初始化Playwright用于需要渲染JavaScript的动态网页 playwright install这里我列出了几个常见的选项requests和aiohttp用于发起网络请求beautifulsoup4和scrapy用于解析HTMLplaywright用于处理那些需要浏览器渲染才能加载出内容的动态页面。你可以根据目标网站的特点选择组合。3. 爬虫与OCR集成的核心流程拆解整个自动化流程可以形象地理解为一条流水线爬虫是上游的原料采集工GLM-OCR是中游的质检员下游则是数据打包员。我们一步步来看。3.1 第一步爬虫抓取目标图片链接无论你用哪种爬虫框架第一步都是定位并下载图片。这里以requests和BeautifulSoup抓取静态页面为例。import requests from bs4 import BeautifulSoup import os def fetch_image_urls(page_url, img_selector): 从指定页面抓取图片链接 :param page_url: 目标网页地址 :param img_selector: CSS选择器用于定位图片标签如 div.product img :return: 图片URL列表 headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 } try: resp requests.get(page_url, headersheaders, timeout10) resp.raise_for_status() soup BeautifulSoup(resp.content, html.parser) img_tags soup.select(img_selector) # 提取src属性并处理可能的相对路径 img_urls [] for img in img_tags: src img.get(src) if src: if src.startswith(http): img_urls.append(src) else: # 简化的相对路径补全实际项目需根据网站结构调整 img_urls.append(requests.compat.urljoin(page_url, src)) return img_urls except Exception as e: print(f抓取页面失败: {page_url}, 错误: {e}) return [] # 示例抓取某个产品列表页的所有产品主图 url https://example.com/products selector div.product-item img.main-img image_list fetch_image_urls(url, selector) print(f找到 {len(image_list)} 张图片)这段代码的核心是使用CSS选择器精准定位你需要的图片避免下载页面上的广告、图标等无关图片。3.2 第二步下载图片并调用GLM-OCR识别拿到图片链接后我们下载图片到内存或本地然后送给GLM-OCR识别。from glm_ocr import GLMOCR import io from PIL import Image # 初始化GLM-OCR模型 # 首次运行会自动下载模型权重请确保网络通畅 ocr_engine GLMOCR() def download_and_ocr(img_url): 下载单张图片并进行OCR识别 :param img_url: 图片URL :return: 识别出的文本列表每个元素对应一个检测框的文本 try: # 下载图片 resp requests.get(img_url, timeout15) resp.raise_for_status() image_data resp.content # 将二进制数据转为PIL Image对象 image Image.open(io.BytesIO(image_data)) # 调用GLM-OCR进行识别 # result 是一个包含多个字典的列表每个字典有‘text’‘bbox’等信息 ocr_result ocr_engine.recognize(image) # 提取所有识别出的文本 texts [item[text] for item in ocr_result] return texts except Exception as e: print(f处理图片失败: {img_url}, 错误: {e}) return [] # 处理刚才抓取到的第一张图片 if image_list: first_image_texts download_and_ocr(image_list[0]) print(f识别结果: {first_image_texts})ocr_engine.recognize()返回的结果很详细包含了每一段文字的内容及其在图片中的位置坐标。这对于需要保持原文结构如区分标题和正文的场景非常有用。3.3 第三步结果清洗与结构化存储OCR识别出来的原始文本可能包含空格、换行符混乱或者不是你需要的部分。我们需要做一些清洗然后存起来。import pandas as pd import re from datetime import datetime def clean_ocr_text(text_list): 清洗OCR识别出的文本列表 :param text_list: 原始文本列表 :return: 清洗后的单一字符串或结构化数据 full_text .join(text_list) # 移除过多的空白字符包括空格、换行、制表符等 cleaned_text re.sub(r\s, , full_text).strip() return cleaned_text def save_results(data_list, output_formatcsv): 将识别结果保存到文件 :param data_list: 字典列表每个字典包含‘url’‘text’等信息 :param output_format: 输出格式支持csv或json df pd.DataFrame(data_list) timestamp datetime.now().strftime(%Y%m%d_%H%M%S) if output_format csv: filename focr_results_{timestamp}.csv df.to_csv(filename, indexFalse, encodingutf-8-sig) elif output_format json: filename focr_results_{timestamp}.json df.to_json(filename, orientrecords, force_asciiFalse, indent2) print(f结果已保存至: {filename}) return filename # 模拟一个批处理流程 all_results [] for idx, img_url in enumerate(image_list[:5]): # 示例只处理前5张 print(f正在处理第 {idx1} 张图片: {img_url[:50]}...) raw_texts download_and_ocr(img_url) cleaned_text clean_ocr_text(raw_texts) result_entry { image_url: img_url, raw_ocr: raw_texts, cleaned_text: cleaned_text, processed_time: datetime.now().isoformat() } all_results.append(result_entry) # 可以在这里添加更精细的解析逻辑比如用正则表达式提取价格、日期等 # 保存所有结果 save_results(all_results, csv)清洗和存储这一步非常灵活你可以根据业务需求用正则表达式从cleaned_text里提取特定模式的信息如价格、手机号、邮箱然后作为新的字段存入表格。4. 进阶技巧让采集识别更快更稳当需要处理成百上千张图片时基础的串行处理方式就太慢了。我们需要考虑效率和稳定性。4.1 使用异步并发提升速度利用aiohttp和asyncio可以实现异步并发下载和识别速度提升非常明显。import aiohttp import asyncio from glm_ocr import GLMOCR # 注意GLM-OCR模型本身可能不是线程安全的这里我们采用异步下载同步识别的模式。 ocr_engine GLMOCR() # 在主进程中初始化 async def async_download_and_ocr(session, img_url, semaphore): 异步下载图片然后调用OCR函数OCR部分同步执行 async with semaphore: # 使用信号量控制并发数避免对目标网站造成过大压力 try: async with session.get(img_url, timeout30) as response: if response.status 200: image_data await response.read() image Image.open(io.BytesIO(image_data)) # OCR识别是CPU/GPU密集型计算在当前线程同步执行 ocr_result ocr_engine.recognize(image) texts [item[text] for item in ocr_result] return img_url, texts else: return img_url, [] except Exception as e: print(f异步处理失败: {img_url}, 错误: {e}) return img_url, [] async def main_async(image_urls, max_concurrent5): 主异步函数 semaphore asyncio.Semaphore(max_concurrent) async with aiohttp.ClientSession() as session: tasks [async_download_and_ocr(session, url, semaphore) for url in image_urls] results await asyncio.gather(*tasks) return results # 使用示例 image_urls image_list # 假设这是之前抓取到的图片链接列表 loop asyncio.get_event_loop() ocr_results loop.run_until_complete(main_async(image_urls, max_concurrent10)) for url, texts in ocr_results: if texts: print(f{url[:40]}... - 识别出 {len(texts)} 段文字)通过设置max_concurrent你可以控制同时处理的任务数量在速度和系统负载之间取得平衡。4.2 失败重试与日志记录网络请求和识别过程都可能失败一个健壮的爬虫必须有重试机制。import time from tenacity import retry, stop_after_attempt, wait_exponential retry(stopstop_after_attempt(3), waitwait_exponential(multiplier1, min2, max10)) def robust_download_and_ocr(img_url): 带有重试机制的下载识别函数 # 这里复用之前 download_and_ocr 的逻辑但被retry装饰器包裹 return download_and_ocr(img_url) # 同时建议将运行日志写入文件方便后期排查问题 import logging logging.basicConfig( levellogging.INFO, format%(asctime)s - %(levelname)s - %(message)s, handlers[ logging.FileHandler(ocr_spider.log), logging.StreamHandler() ] ) logging.info(OCR爬虫任务开始...)使用tenacity库可以优雅地实现指数退避重试。日志记录则能帮你清晰追踪每一张图片的处理状态。5. 实战案例批量识别电商商品价格图假设我们要监控某个电商平台上多个商品的价格变化价格信息就在商品主图上。我们可以定期抓取这些图片并用GLM-OCR提取价格。import schedule import time def monitor_price(product_page_url, img_selector): 监控任务函数 logging.info(f开始执行监控任务: {product_page_url}) # 1. 抓取最新图片链接 current_images fetch_image_urls(product_page_url, img_selector) if not current_images: logging.warning(未找到图片任务结束。) return # 2. 识别最新图片这里取第一张为主图 price_texts download_and_ocr(current_images[0]) full_text clean_ocr_text(price_texts) # 3. 使用正则表达式提取价格示例根据实际情况调整 price_pattern r[¥$]?\s*\d(?:\.\d{1,2})? # 匹配货币符号和数字 prices_found re.findall(price_pattern, full_text) # 4. 记录或报警 logging.info(f商品页面: {product_page_url}) logging.info(f识别全文: {full_text[:100]}...) # 只打印前100字符 logging.info(f提取到价格: {prices_found}) # 这里可以添加逻辑与上次价格比较如果变化超过阈值则发送通知邮件、钉钉等 # save_to_database(product_page_url, prices_found, datetime.now()) # 设置每30分钟执行一次监控任务 schedule.every(30).minutes.do(monitor_price, product_page_urlhttps://example.com/product/12345, img_selectordiv.price-tag img) logging.info(价格监控爬虫已启动按CtrlC退出。) try: while True: schedule.run_pending() time.sleep(1) except KeyboardInterrupt: logging.info(监控任务已停止。)这个案例展示了如何将我们搭建的流程封装成一个定时自动化任务实现持续的数据采集和识别。6. 总结把GLM-OCR和Python爬虫组合在一起相当于给爬虫装上了一双“智慧的眼睛”。从实际使用来看这套方案最大的优点是灵活和高效。GLM-OCR模型本身识别准确率高尤其是对中文和复杂版式友好而且资源消耗相对较低非常适合作为后台服务长期运行。在具体实施时爬虫部分可以根据目标网站的复杂度选择合适的工具静态页面用RequestsBeautifulSoup就够了动态页面则可以考虑Playwright。识别后的文本处理是关键好的清洗和结构化规则能让数据的价值倍增。最后别忘了用异步和重试机制来提升整个流程的健壮性和速度。如果你正准备处理大批量的图片文字提取工作不妨试试这个组合。先从一个小规模的网站开始跑通整个流程再逐步增加并发和优化解析规则。遇到识别不准的图片可以单独拿出来分析有时候稍微调整一下图片的预处理比如转为灰度、增加对比度就能有奇效。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。