GLM-OCR与Python爬虫协同:自动化采集并解析网页技术文档

GLM-OCR与Python爬虫协同:自动化采集并解析网页技术文档 GLM-OCR与Python爬虫协同自动化采集并解析网页技术文档你是不是也遇到过这样的烦恼想学习某个新技术却发现官方文档散落在各个角落有的是网页有的是PDF甚至有些关键信息只存在于截图里。手动整理这些资料不仅耗时耗力还容易遗漏更新。作为技术文档的维护者这种痛苦更是加倍——如何确保团队的知识库始终是最新、最全的今天我们就来聊聊一个能帮你从繁琐工作中解放出来的自动化方案用Python爬虫抓取网页再用GLM-OCR识别图片中的文字最后把零散的技术文档整合成一个干净、可搜索的知识库。整个过程就像给你的电脑装上了一双“眼睛”和一只“手”让它能自动浏览、阅读并整理网上的技术资料。1. 场景与痛点技术文档管理的现实困境我们先从一个具体的场景说起。假设你所在团队正在使用一个开源框架它的文档分散在GitHub Wiki、官方博客和一系列PDF白皮书里。每次框架更新你都需要手动检查这些地方把新内容复制粘贴到团队的Confluence或Notion中。这还不算完有些教程里的关键配置步骤是以截图形式存在的你不得不对着图片一个字一个字地敲。这种工作模式有几个明显的痛点效率低下重复的复制粘贴工作占据了大量本该用于学习或开发的时间。信息孤岛文档散落各处查找困难新成员上手成本高。更新延迟人工同步难免延迟可能导致团队基于过时的文档做出决策。非文本内容处理难对于图片、扫描版PDF中的技术内容传统方法无能为力。而我们的自动化方案目标就是一次性解决这些问题。通过程序自动完成信息的抓取、解析和归档让你和你的团队能始终聚焦在最有价值的知识本身。2. 方案核心当爬虫遇见OCR这个自动化方案的核心思路很清晰分为三个关键步骤我们把它想象成一个智能流水线。2.1 第一步爬虫负责“抓取”Python爬虫在这里扮演“信息采集员”的角色。它的任务是按照你设定的规则比如特定的网站、URL列表自动访问页面并把内容“拿回来”。对于HTML网页它能直接提取文本对于PDF链接它能下载文件对于重要的页面视图它还可以进行截图保存为图片。常用的工具像requests、BeautifulSoup、Selenium处理动态网页和PyPDF2/pdfplumber都是它的好帮手。2.2 第二步GLM-OCR负责“阅读”爬虫抓回来的图片或PDF中的图像页面就需要GLM-OCR出场了。OCR光学字符识别技术就像是给电脑配上了“眼睛”能识别图片中的文字。而GLM-OCR作为基于大模型的OCR工具比传统OCR更强大特别是对于复杂的排版、代码截图、混合了中英文的技术文档它的识别准确率和格式还原能力都更出色。它能将一张布满技术描述的截图准确地转换成结构化的文本数据。2.3 第三步整合与存储最后我们需要一个“整理员”。它将爬虫抓取的纯文本、PDF解析出的文本以及OCR识别出的文本进行清洗、去重、格式化比如统一转换成Markdown然后存储起来。存储可以选择本地文件如一组Markdown文件、数据库如SQLite、Elasticsearch或者直接同步到Notion、Confluence等协作平台。这样一个统一、可全文搜索的技术知识库就建成了。整个流程的协作关系可以参考下面的示意图flowchart TD A[“开始指定目标br技术博客/API文档等”] -- B[“Python爬虫br抓取HTML/下载PDF/截图”] B -- C{内容类型判断} C -- HTML/文本 -- D[直接提取文本] C -- PDF文件 -- E[PDF解析库提取文本] C -- 图片/截图 -- F[GLM-OCR识别图片文字] D E F -- G[“内容清洗、格式化br转为Markdown等”] G -- H[“存储至知识库br文件/数据库/协作平台”] H -- I[“终点形成可搜索的br统一技术文档库”]3. 动手搭建从核心代码看实现了解了原理我们来看看具体怎么实现。这里会给出一些关键环节的代码示例你可以根据自己的需求进行调整。3.1 爬虫抓取模块示例我们以抓取一个简单的技术博客文章列表和内容为例。这里使用requests和BeautifulSoup。import requests from bs4 import BeautifulSoup import time def fetch_tech_blog_articles(base_url, max_pages3): 抓取技术博客的文章标题和链接 articles [] headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 } for page in range(1, max_pages 1): url f{base_url}/page/{page} try: response requests.get(url, headersheaders, timeout10) response.raise_for_status() # 检查请求是否成功 soup BeautifulSoup(response.text, html.parser) # 假设文章标题和链接在 h2 classentry-title 下的 a 标签里 # 你需要根据目标网站的实际HTML结构修改这些选择器 for item in soup.select(h2.entry-title a): title item.get_text(stripTrue) link item[href] articles.append({title: title, url: link}) print(f找到文章: {title}) time.sleep(2) # 礼貌性延迟避免对服务器造成压力 except requests.RequestException as e: print(f抓取第{page}页时出错: {e}) break return articles def fetch_article_content(article_url): 根据文章链接抓取详细内容 headers {User-Agent: 你的浏览器User-Agent} try: resp requests.get(article_url, headersheaders) resp.raise_for_status() soup BeautifulSoup(resp.text, html.parser) # 假设主要内容在 article 标签或 div classpost-content 里 content_div soup.find(article) or soup.find(div, class_post-content) if content_div: # 获取纯文本并做一些简单清理 text content_div.get_text(separator\n, stripTrue) return text else: return 未能找到主要内容区域。 except Exception as e: return f抓取内容失败: {e} # 使用示例 if __name__ __main__: blog_url https://example-tech-blog.com my_articles fetch_tech_blog_articles(blog_url, max_pages2) for article in my_articles[:2]: # 只处理前两篇作为演示 print(f\n 开始处理: {article[title]} ) content fetch_article_content(article[url]) print(content[:500]) # 打印前500字符预览 # 这里可以将 title 和 content 保存到文件或数据库注意爬虫的编写必须遵守目标网站的robots.txt协议并设置合理的请求间隔避免给对方服务器造成负担。3.2 GLM-OCR解析图片文档当爬虫下载了PDF或截图后对于其中的图像页面我们可以使用GLM-OCR。这里以调用其API为例假设你已部署好GLM-OCR服务或使用其云API。import base64 import requests import os def recognize_text_with_glm_ocr(image_path, api_urlhttp://localhost:8000/ocr): 调用GLM-OCR服务识别图片中的文字 image_path: 本地图片路径 api_url: GLM-OCR服务的API端点 if not os.path.exists(image_path): return {error: 图片文件不存在} with open(image_path, rb) as image_file: # 将图片编码为base64 encoded_string base64.b64encode(image_file.read()).decode(utf-8) # 构建请求数据具体格式需参考GLM-OCR的API文档 payload { image: encoded_string, task: general, # 通用识别任务也可能是 document 针对文档 return_format: markdown # 请求返回Markdown格式便于后续处理 } headers {Content-Type: application/json} try: response requests.post(api_url, jsonpayload, headersheaders, timeout30) result response.json() # 假设API返回格式为 {text: 识别出的文本, status: success} if result.get(status) success: return result.get(text, ) else: return fOCR识别失败: {result.get(message, 未知错误)} except requests.exceptions.RequestException as e: return f请求OCR API失败: {e} except ValueError as e: return f解析API响应失败: {e} # 使用示例 if __name__ __main__: text recognize_text_with_glm_ocr(screenshot_of_diagram.png) print(识别结果前200字符:) print(text[:200])对于PDF文件你可以先用PyMuPDF或pdf2image库将特定页面转换为图片再送入OCR函数处理。3.3 数据整合与存储示例最后我们把抓取和解析的内容整理成结构化的数据存储为Markdown文件。import json from datetime import datetime def save_as_markdown(article_data, output_dir./knowledge_base): 将文章数据保存为Markdown文件 article_data: 字典包含 title, url, content, source, fetch_date 等字段 import os os.makedirs(output_dir, exist_okTrue) # 用标题创建安全的文件名 safe_title .join(c for c in article_data[title] if c.isalnum() or c in ( , -, _)).rstrip() filename f{safe_title[:50]}.md # 限制文件名长度 filepath os.path.join(output_dir, filename) with open(filepath, w, encodingutf-8) as f: f.write(f# {article_data[title]}\n\n) f.write(f **来源**: [{article_data[source]}]({article_data[url]})\n) f.write(f **抓取时间**: {article_data.get(fetch_date, datetime.now().strftime(%Y-%m-%d %H:%M:%S))}\n\n) f.write(---\n\n) f.write(article_data[content]) print(f文章已保存至: {filepath}) return filepath # 模拟一个完整流程 def process_single_article(article_info): 处理单篇文章的完整流程抓取 - (如需OCR则识别) - 保存 # 1. 抓取文本内容 raw_text fetch_article_content(article_info[url]) # 2. 这里可以添加逻辑判断如果 raw_text 过短可能是图片文章则调用OCR # 假设我们有一个函数 download_page_screenshot(url) 来获取页面截图 # if len(raw_text) 100: # screenshot_path download_page_screenshot(article_info[url]) # raw_text recognize_text_with_glm_ocr(screenshot_path) # 3. 构建数据对象 article_data { title: article_info[title], url: article_info[url], content: raw_text, source: Example Tech Blog, fetch_date: datetime.now().strftime(%Y-%m-%d %H:%M:%S) } # 4. 保存为Markdown save_as_markdown(article_data) # 主流程 if __name__ __main__: articles fetch_tech_blog_articles(https://example-tech-blog.com, max_pages1) for art in articles: process_single_article(art)4. 实践建议与进阶思考把上面的代码跑通一个最基本的自动化文档采集器就成型了。但在实际项目中你还需要考虑更多。首先是一些实用建议遵守规则与道德务必尊重网站的robots.txt设置足够的请求延迟如time.sleep(3)避免高频访问。对于个人学习使用通常没问题如果是大规模商业采集最好先取得授权。处理动态内容很多现代网站用JavaScript渲染内容BeautifulSoup无法直接获取。这时需要Selenium或Playwright这样的浏览器自动化工具来模拟用户操作获取完整页面后再解析。内容去重与更新建立知识库后每次抓取需要判断内容是否更新。可以通过比较哈希值如MD5、检查文档最后修改时间或者只抓取特定时间点之后发布的内容来实现增量更新。错误处理与日志网络请求、OCR服务都可能出错。代码中必须加入完善的异常处理try...except并记录日志方便排查问题。可以考虑使用logging模块。更进一步你可以让这个系统更智能信息结构化不仅仅是保存文本可以尝试用大模型如ChatGLM对抓取的内容进行总结、提取关键词、分类打标签让知识库更容易检索。构建搜索接口将最终文本存入Elasticsearch或MeiliSearch为你的知识库提供一个快速、强大的全文搜索界面。流程自动化与监控使用cronLinux或Task SchedulerWindows设置定时任务让整个抓取、解析、存储流程定期自动运行。还可以添加简单的监控任务失败时发送通知如邮件、钉钉消息。5. 总结回过头来看GLM-OCR和Python爬虫的搭配确实为技术文档的自动化管理打开了一扇新的大门。爬虫解决了信息“获取”的广度问题能触及网络的各个角落而GLM-OCR则解决了信息“理解”的深度问题即便是图片中的“硬骨头”也能啃下来。这套方案最吸引人的地方在于它的灵活性和可扩展性。本文提供的代码是一个起点你可以根据自己要抓取的网站结构、要处理的文档类型去调整和强化每一个环节。从简单的静态博客到复杂的动态文档站从纯文本到图文混合它都能应对。开始动手时建议从一个明确、小范围的目标开始比如先把某个最喜欢的个人技术博客的所有文章归档下来。在这个过程中你会逐渐熟悉爬虫的编写、OCR的调优以及数据清洗的种种细节。当第一个属于你自己的、自动更新的技术知识库运转起来时那种效率和掌控感会让你觉得这一切的投入都是值得的。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。