尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

Day 13 · AI 爬虫(浅版):LLM 提取结构化数据

Day 13 · AI 爬虫(浅版):LLM 提取结构化数据 「AI Python 系列」第 01 栏 · AI 时代的 Python 办公自动化全栏 18 篇 · 零成本跟完 品牌梅雅达编程笔记摘要网页上有数据但格式乱七八糟手动复制太慢。本篇用requests抓取网页、BeautifulSoup提取文本、AI提取结构化JSON。三个实战产品页提取价格评分、文章页提取作者结论、企业页提取联系方式。内置示例HTML无需联网。传统做法写正则一条条抠AI做法给字段直接出JSON。开篇 · 网页数据提取的真实痛点你有没有遇到过这些场景场景传统做法痛点竞品价格打开网页 → 手动截图/复制100个产品抄到天亮文章信息复制标题 → 复制作者 → 复制日期来回切换复制粘贴企业联系方式翻到页面底部 → 找电话邮箱50家公司翻到眼花批量提取写正则表达式匹配网页结构一变正则全废核心矛盾网页数据是给人看的不是给程序处理的。HTML 结构千变万化正则匹配脆弱不堪。今天用 AI 解决这个问题——抓网页、提文本、AI 理解内容并输出结构化 JSON。⚠️ 合规提醒本篇仅用于教学演示。爬取公开数据时请遵守以下原则遵守robots.txt代码中提供check_robots()函数自动检查控制频率每次请求间隔 2 秒以上别把人家服务器搞崩不用于商业爬取商用需获得网站授权尊重版权提取的数据仅供分析参考不要原样复制分发一、传统做法 vs AI 时代做法传统做法正则表达式 BeautifulSoupimportrefrombs4importBeautifulSoup soupBeautifulSoup(html,html.parser)# 手写正则提取价格price_textsoup.find(p,class_price).text pricere.search(r([\d,]),price_text)ifprice:price_numint(price.group(1).replace(,,))# 每个字段都要单独写正则# 网页结构一变全得重写...能力边界✅ 能精确匹配特定模式❌ 正则写起来痛苦调试更痛苦❌ 网页结构变了就全废❌ 无法理解语义——不知道哪段文字是价格、哪段是描述AI 时代做法提取文本 → AI 理解 → 结构化输出# 提取纯文本textextract_text(html)# AI 直接提取你要的字段dataai_extract(text,fields[产品名称,价格,评分,库存])# {产品名称: 梅雅达智能客服系统, 价格: 9999, ...}组合优势BeautifulSoup负责提取文本把 HTML 标签去掉只留文字AI 负责理解语义从纯文本中找到你要的信息你只需要说清楚要什么字段二、代码架构ai_crawler.py ├── MOCK_PAGES内置3个示例HTML页面 │ ├── product电商产品页 │ ├── article新闻文章页 │ └── business企业信息页 ├── fetch_page(url)抓取真实网页需联网 ├── check_robots(url)检查 robots.txt ├── extract_text(html)BeautifulSoup 提取纯文本 ├── ai_extract(text, fields)AI 提取结构化 JSON └── crawl_and_extract(html, fields)完整流程内置 3 个示例 HTML 页面无需联网即可跟练。fetch_page()和check_robots()是给真实网站抓取准备的。三、精简版代码 ai_crawler_simple.py - AI 爬虫精简版 用 requests BeautifulSoup 抓取网页文本AI 提取结构化数据 ⚠️ 仅抓取公开数据遵守 robots.txt教学用途 importosimportsysimportjson sys.path.insert(0,os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))fromllm_clientimportLLMClientimportrequestsfrombs4importBeautifulSoup# # 模拟网页教学用无需联网# MOCK_HTML!DOCTYPE html htmlbody h1梅雅达智能客服系统/h1 p classprice原价12999元/年优惠价9999元/年/p p classdesc基于大语言模型的智能客服系统支持自动分类、智能回复、情感分析。/p ul liAI 自动分类邮件和工单/li li智能回复草稿生成/li li多轮对话上下文记忆/li /ul p用户评分4.8/5.0326条评价/p p库存50套 | 电话400-888-9999 | 邮箱salesmeiyada.com/p /body/htmldeffetch_page(url):抓取网页 HTMLresprequests.get(url,headers{User-Agent:Mozilla/5.0},timeout10)resp.encodingresp.apparent_encodingreturnresp.textdefextract_text(html):用 BeautifulSoup 提取纯文本soupBeautifulSoup(html,html.parser)fortaginsoup([script,style]):tag.decompose()returnsoup.get_text(separator\n,stripTrue)defai_extract(text,fields):AI 从文本中提取结构化数据clientLLMClient(providerglm)iflen(text)4000:texttext[:4000]...截断system_promptf你是信息提取专家。从网页文本中提取以下字段输出JSON{chr(10).join(- fforfinfields)}找不到的字段值为 null。只输出 JSON。resultclient.chat_json(text,system_promptsystem_prompt,temperature0.1)returnjson.loads(result)defcrawl(html,fields,output_nameresult):完整流程HTML → 文本 → 结构化数据 → 保存textextract_text(html)print(f提取文本{len(text)}字符)dataai_extract(text,fields)print(提取结果)print(json.dumps(data,ensure_asciiFalse,indent2))pathos.path.join(os.path.dirname(os.path.abspath(__file__)),f{output_name}.json)withopen(path,w,encodingutf-8)asf:json.dump(data,f,ensure_asciiFalse,indent2)print(f已保存{path})if__name____main__:print(*50)print( AI 爬虫LLM 提取结构化数据精简版)print(*50)fields[产品名称,原价,优惠价,核心功能,用户评分,联系电话]crawl(MOCK_HTML,fields,product_info)运行方式cdday13_code pipinstall-rrequirements.txt python ai_crawler.py预期输出 AI 爬虫LLM 提取结构化数据精简版 提取文本165 字符 提取结果 { 产品名称: 梅雅达智能客服系统, 原价: 12999元/年, 优惠价: 9999元/年, 核心功能: [ 基于大语言模型的智能客服系统, 支持自动分类、智能回复、情感分析, AI 自动分类邮件和工单, 智能回复草稿生成, 多轮对话上下文记忆 ], 用户评分: 4.8/5.0326条评价, 联系电话: 400-888-9999 } 已保存e:\CSDN\01-AI办公自动化\code\day13\product_info.json完整代码评论区留言领取四、代码拆解三步流水线步骤函数AI 的角色传统做法① 提取文本extract_text()—正则/CSS选择器② AI 提取字段ai_extract()信息提取专家手写正则匹配③ 保存 JSONcrawl_and_extract()—手动整理关键设计BeautifulSoup先清洗再给 AIdefextract_text(html):soupBeautifulSoup(html,html.parser)fortaginsoup([script,style]):tag.decompose()textsoup.get_text(separator\n,stripTrue)returntext先去掉script和style标签JS 代码和 CSS 样式对 AI 理解内容是噪音再把 HTML 转成纯文本。这样 AI 看到的是干净的文字而不是一堆标签。关键设计字段列表驱动提取# 你要什么字段就传什么字段fields[产品名称,原价,优惠价,评分,库存]# AI 按你的字段列表输出 JSONdataai_extract(text,fields)不用写正则不用找 CSS class 名。你想要什么字段AI 就帮你提取什么字段。换个网站字段不变代码一行都不用改。关键设计robots.txt合规检查defextract_text(html):用 BeautifulSoup 提取纯文本soupBeautifulSoup(html,html.parser)fortaginsoup([script,style]):tag.decompose()returnsoup.get_text(separator\n,stripTrue)抓取真实网站前先检查robots.txt是否允许。robots.txt是网站告诉爬虫哪些页面可以抓、哪些不能抓的协议文件。尊重它是爬虫的基本礼仪。五、真实网站抓取示例内置示例页面方便跟练真实使用时只需替换 HTML 来源importtime# 抓取真实网站urlhttps://example.com/product/123# 1. 检查 robots.txtifcheck_robots(url):# 2. 抓取页面htmlfetch_page(url)# 3. AI 提取datacrawl_and_extract(html,fields[产品名称,价格,评分,库存],page_type电商产品页,output_namereal_product)# 4. 礼貌等待time.sleep(2)else:print(robots.txt 禁止抓取该页面)注意真实网站结构千变万化AI 提取的准确率取决于页面文本的清晰度。对于 JS 动态渲染的页面内容需要执行JavaScript才能显示requests只能拿到空壳 HTML需要用Selenium或Playwright等浏览器自动化工具。 本篇成本透明栏项目数值API 调用次数3 次3个页面各调 1 次消耗 Token约 6,000 tokens成本¥0GLM-4.7-Flash 永久免费免费额度是否够✅ 够用商用估算¥0GLM/ 约¥0.01DeepSeek/ 约¥0.02Qwen抓取100个页面预估约 5 分钟含等待成本 ¥0练手改造题改造 1基础给ai_extract()加一个置信度字段——让 AI 对每个提取的字段输出一个 0-1 的置信度分数低于 0.5 的字段标记为需人工确认。提示在system_prompt的 JSON 格式中加字段名_confidence: 0.95输出后筛选低于 0.5 的字段。改造 2进阶改造crawl_and_extract()支持批量抓取——传入 URL 列表逐个抓取并提取结果合并保存为一个 JSON 数组文件。提示urls [url1, url2, url3]循环fetch_pagecrawl_and_extract每次time.sleep(2)。注意异常处理单个页面失败不影响整体。改造 3挑战加一个数据清洗步骤——AI 提取后再调一次 AI 对结果做清洗去除价格中的符号转为数字、统一日期格式、补全缺失字段。提示在ai_extract()后加一个clean_data(data)函数用chat_json()让 AI 输出清洗后的 JSONsystem_prompt 中说明价格转为纯数字、日期统一为 YYYY-MM-DD 格式。下期预告Day 14 · 从 Function Calling 到 ReAct Agent前 13 篇都是人调 AI——你写代码调用 AI 的能力。从 Day 14 开始反转过来——让 AI 自己决定调用什么工具。Function Calling是 AI 调用外部函数的标准协议ReAct 是推理行动的 Agent 模式。这是从工具人到智能助手的转折点。 资源与工具文末合规集中Python requests 文档https://docs.python-requests.org/BeautifulSoup 文档https://www.crummy.com/software/BeautifulSoup/bs4/doc/Python urllib.robotparserhttps://docs.python.org/3/library/urllib.robotparser.html智谱开放平台GLM免费 API Keyhttps://open.bigmodel.cn/GLM 模型文档https://docs.bigmodel.cn/本专栏配套代码CSDN 下载区每篇更新 作者的话梅雅达编程笔记专注 Python AI 办公自动化实战教程。AI 爬虫的精髓不在于爬得快而在于提得准。传统爬虫最痛苦的不是抓数据而是写正则——每换一个网站正则就得重写。AI 提取把写规则变成说需求你告诉它要什么字段它帮你找。当然对于大规模爬取场景还是需要配合分布式队列、代理池等工程化方案这些属于进阶话题本专栏不做展开。往期回顾Day 01 · 为什么 2026 年办公自动化得“AI 化“了Day 02 · 环境搭建一套装备打天下Day 03 · Prompt 工程 5 大心法Day 04 · LLM API 横评 已被AI编程社区收录Day 05 · 让 AI 输出结构化数据告别“偶尔给你一段散文“Day 06 · Excel AI让电子表格变“聪明“Day 07 · Word AI自动生成文档Day 08 · PDF 智能提取让 AI 读懂合同、发票、简历Day 09 · PPT 自动生成文字大纲变演示文稿Day 10 · 邮件 AI智能分类与自动回复Day 11 · 自然语言查数据库NL2SQLDay 12 · 可视化 AI让 AI 帮你选图表专栏推荐「AI Python 系列」第 01 栏 · AI办公自动化连载中「AI Python 系列」第 02 栏 · AI数据可视化连载中「AI Python 系列」第 03 栏 ·AIPython 爬虫实战连载中「AI Python 系列」第05栏 · AI Agent实战连载中资源领取关注作者获取本栏完整代码和数据集原创声明本文为梅雅达编程笔记原创作品未经允许不得转载。
返回列表