当前位置: 首页 > news >正文

告别手动解析,Python 加 AI 让网页抓取更稳定

传统爬虫的“阿喀琉斯之踵”

做过网页抓取的朋友都有过这样的经历:好不容易写好了正则表达式或 CSS 选择器,脚本运行得完美无缺。然而,某天早上醒来,目标网站悄悄更新了前端框架,或者只是调整了商品价格的 DOM 结构,你的程序瞬间报错,返回一堆空值。这时候,你不得不重新打开浏览器开发者工具,定位新节点,修改代码,再次部署。这种“猫鼠游戏”在传统基于规则的爬虫开发中几乎无法避免,尤其是面对电商、新闻等高频变动的站点时,维护成本往往超过了开发成本。

问题的核心在于,传统爬虫依赖的是精确的结构匹配,而网页的本质是语义内容的呈现。当结构服务于呈现时,一旦呈现方式改变,结构就失效了。解决之道,在于引入“理解能力”,让程序不再死记硬背“价格在第 3 个 div 的第 2 个 span 里”,而是学会识别“这是价格”。这正是 Python 结合大语言模型(LLM)带来的范式转变。

从“规则匹配”到“语义理解”的工作流

新的解决方案并非完全抛弃 Python 生态,而是重新划分了职责边界。在这个架构中,Python 依然负责它最擅长的部分:网络请求、并发控制、重试机制以及数据持久化。而原本最脆弱、最耗时的 HTML 解析与字段提取环节,则交给了 AI 模型。

整个流程可以概括为三个步骤:获取与清洗语义提取验证与存储

首先,利用requests库获取页面源码。但这步之后,我们不再直接编写复杂的 XPath。相反,我们使用BeautifulSoup进行“降噪”处理。网页中大量的<script><style>标签以及无关的广告代码,不仅占用 Token,还会干扰模型的判断。通过简单的遍历删除这些噪声,我们能得到一个只保留核心文本和基础结构的“干净 HTML"。

接下来是关键一步:将清洗后的 HTML 作为上下文输入给大模型。我们需要设计一段清晰的 Prompt,告诉模型:“这是一段商品页面的 HTML,请从中提取商品名称、价格和货币单位,并以严格的 JSON 格式返回。”模型基于其强大的语义理解能力,能够忽略标签 class 名的变化,直接锁定内容含义。即使网站将价格从<span class="price">改成了<div>实战:构建抗变的电商数据提取器

让我们通过一个具体的电商商品页抓取案例,看看代码是如何落地的。假设我们要抓取某演示站点的宝可梦商品信息。

环境准备与依赖安装

你需要安装基础的 HTTP 请求库、HTML 解析库以及大模型 SDK:

pipinstallrequests beautifulsoup4 openai

核心代码实现

以下是一个完整的极简实现,展示了如何串联上述流程:

importjsonimportreimportrequestsfrombs4importBeautifulSoupfromopenaiimportOpenAI# 配置项TARGET_URL="https://scrapeme.live/shop/Bulbasaur/"OUTPUT_FILE="products.jsonl"MAX_TOKENS_LIMIT=120000# 防止 HTML 过长超出模型限制deffetch_and_clean_html(url):"""获取页面并清洗噪声"""headers={"User-Agent":"Mozilla/5.0 (compatible; AIScraper/1.0)"}response=requests.get(url,headers=headers,timeout=30)response.raise_for_status()soup=BeautifulSoup(response.text,"html.parser")# 移除脚本和样式标签,减少干扰fortaginsoup(["script","style","noscript","header","footer"]):tag.decompose()# 获取 body 内容并压缩空白字符clean_text=re.sub(r"\s+"," ",soup.body.get_text(separator=" ",strip=True))returnclean_text[:MAX_TOKENS_LIMIT]defextract_with_ai(html_content):"""调用 AI 模型进行结构化提取"""client=OpenAI()# 需配置 OPENAI_API_KEY 环境变量# 定义期望的 JSON 结构json_schema={"type":"object","properties":{"product_name":{"type":"string"},"price":{"type":"string"},"currency":{"type":"string"}},"required":["product_name","price","currency"],"additionalProperties":False}response=client.chat.completions.create(model="gpt-4o",# 或其他支持 JSON Mode 的模型messages=[{"role":"system","content":"你是一个数据提取助手。请从提供的 HTML 文本中提取商品信息,仅返回符合 Schema 的 JSON,不要包含 Markdown 标记或其他解释。"},{"role":"user","content":f"URL:{TARGET_URL}\n\nHTML Content:\n{html_content}"}],response_format={"type":"json_object","schema":json_schema})returnjson.loads(response.choices[0].message.content)defmain():try:# 1. 获取与清洗print("正在获取并清洗页面...")clean_html=fetch_and_clean_html(TARGET_URL)# 2. AI 语义提取print("正在调用 AI 进行语义分析...")data=extract_with_ai(clean_html)# 3. 持久化存储withopen(OUTPUT_FILE,"a",encoding="utf-8")asf:f.write(json.dumps(data,ensure_ascii=False)+"\n")print(f"提取成功:{data}")exceptExceptionase:print(f"发生错误:{e}")if__name__=="__main__":main()

方案对比与优势分析

在这个例子中,如果网站明天将价格标签从div.product-price改为span.cost-value,传统的 BeautifulSoup 或 Scrapy 代码必须修改选择器逻辑才能运行。而在上述 AI 方案中,只要页面上依然清晰展示了价格数字和货币符号,模型就能准确识别并输出 JSON,代码无需任何改动。

这种基于语义的提取方式,将开发者的精力从“维护选择器”转移到了“设计 Prompt"和“验证数据质量”上。虽然单次调用的成本略高于本地解析,但考虑到大幅降低的维护人力和时间成本,特别是在面对反爬策略复杂、页面结构频繁迭代的场景时,这种“以算力换稳定性”的策略显得尤为划算。

通过将 Python 的工程化能力与大模型的认知能力结合,我们不再是编写脆弱的规则脚本,而是在构建具备一定“容错性”和“适应性”的智能数据管道。这不仅是技术的升级,更是解决数据采集痛点的一种更优雅的思维路径。

http://www.jsqmd.com/news/902941/

相关文章:

  • 一个 CLAUDE.md 文件到底在提醒 Claude Code 记住什么
  • 去中心化AI推理GPU任务匹配系统:架构、算法与经济模型实践
  • 2026武汉离婚律师推荐:家族企业与大额资产分割八大专家榜单 - 资讯速览
  • 避坑指南:RKNN模型转换时,quantized_algorithm选normal还是mmse?实测对比告诉你
  • Honey Select 2终极汉化去码补丁:5分钟安装与完整功能指南
  • m4s-converter:拯救你珍藏的B站视频,一键转换m4s为MP4格式
  • 抖音直播数据采集神器:DouyinLiveWebFetcher零代码实战指南
  • Cadence Virtuoso IC617实战:手把手教你从工艺参数到五管OTA运放仿真(附完整工程文件)
  • 2026年5月亨得利官方保养价目全解析|百年老字号名表养护避坑指南 - 资讯速览
  • ExtendDB 实战:用 DynamoDB API 操作本地 SQLite,开发测试不再连线上
  • 离散制造业智能仓库管理的难点
  • 雀魂牌谱屋完整指南:用数据科学打破麻将段位瓶颈的终极方案
  • PiliPlus:跨平台B站客户端终极指南,轻松享受高清视频体验
  • 通达信缠论插件:3分钟让复杂K线结构一目了然的智能分析工具
  • [翻译] 为什么我要用 C# 构建数据库引擎
  • 不锈钢轻奢金属框架家具工厂洞察:工艺定制与空间适配全景解析 - 变量人生001
  • 别再只会docker pull了!离线部署救星:save保存与load加载镜像的5个真实用例
  • 从‘能用’到‘好用’:深度优化你的Vue项目Ant Design图标与组件体验
  • 基于颜色扰动集成的深度单应性估计:原理、实现与调优
  • Dism++:免费开源Windows系统终极优化神器完整指南
  • 暗光视觉革命:ExDark数据集如何重塑低光照计算机视觉的未来
  • 官方认证|2026年国内十大正规头等舱沙发公司排名,广东佛山等地,潘神家具第柒居品质实力领先 - 十大品牌榜
  • 【亲测】2026年欧米茄售后服务网络权威盘点:最新电话及地址 - 资讯速览
  • 牛客网2026互联网大厂Java面试题汇总,附官方级答案解析
  • 完整指南:使用Forza Mods AIO高效管理《极限竞速》游戏体验
  • 冲锋衣定制化成趋势——AI助力品牌抢占个性化市场
  • SystemVerilog bind 不只是给断言用的:一个被低估的模块连接神器(附代码避坑)
  • 2026年6月权威评测 | 播威中国官方售后服务中心网络全面升级公告 - 资讯速览
  • Elasticsearch:跨数据库与业务系统进行搜索
  • 甲方要的‘裸眼3D’大屏互动?别慌,这份Unity+3dsMax低成本实现方案请收好