传统爬虫的核心痛点在于脆弱性。你精心编写的 div.content > span.price 选择器,在网站前端一次不经意的重构后就会彻底失效。即便使用了 Playwright 或 Selenium 应对动态渲染,元素定位逻辑依然依赖于固定的 DOM 结构。
大语言模型(LLM)的介入,正在改变这一局面。AI 爬虫不再“死记硬背”标签路径,而是像人类一样理解页面语义,甚至在结构变更时实现“自愈”。本文将拆解三种结合 AI 的智能爬虫实现范式,并提供可落地的 Python 代码思路。
最直接的 AI 融合方式是让模型直接读取清洗后的页面文本或精简 HTML,根据你的自然语言描述或 JSON Schema 输出结构化数据。你不再关心数据在哪个 div 里,只关心“我要什么”。
以开源库 websense 为例,它的设计哲学是“语义理解优先”。你只需提供一个示例或 Schema,它就能自动完成抓取、清洗和解析。
from websense import Scraper
scraper = Scraper(model="gpt-4o-mini")
# 不需要写任何 CSS 选择器
data = scraper.scrape(
"https://wl.jogonsoft.com",
example={
"product_name": "string",
"price": 0.0,
"in_stock": True,
"key_features": ["string"]
}
)
print(data)工程要点:直接丢入原始 HTML 会给模型带来巨大的 Token 开销和噪声干扰。websense 内部的三段式流水线(Fetch → Clean → Parse)值得借鉴。在送入 LLM 之前,务必使用 BeautifulSoup 或 trafilatura 剔除 <script>、<style> 及冗余属性,仅保留语义骨架。阿里云开发者社区的一篇实践也印证了这一点:HTML 精炼能显著降低 Token 消耗并提升提取稳定性。
纯 LLM 提取的代价是延迟与成本(每次请求都需推理)。更务实的混合架构是:日常运行走高速的 CSS/XPath 规则,仅在规则失效时触发 AI 修复。
EvoScrape 项目实现了这一思路。其工作流程是:检查保存的选择器 → 若失败,抓取当前页面 HTML → 分析候选元素并评分(依据文本相似度、类名语义、层级位置)→ 选出最佳替补 → 验证替补能取到合理值 → 自动保存新选择器并继续运行。
# 伪代码示意自愈逻辑
def extract_with_healing(page, field, old_selector):
try:
return page.locator(old_selector).inner_text()
except:
# 规则失效,触发 AI 分析
candidates = analyze_dom_with_llm(page.content(),
target_description="商品价格,通常包含 ¥ 或 $ 符号")
new_selector = candidates[0].selector
# 关键:验证新选择器提取的值是否合理(如包含数字)
value = page.locator(new_selector).inner_text()
if is_valid_price(value):
save_selector(field, new_selector) # 持久化,下次直接用
return value
raise这种规则优先、AI 兜底的策略,兼顾了吞吐量与鲁棒性。对于监控类任务(如竞品价格追踪),你可以在夜间低峰期跑 AI 修复任务,白天全量采集时直接使用修复后的选择器。
llm-scraper-py 提供了一个极具工程价值的思路:利用 LLM 生成一段可复用的 JavaScript/Python 提取代码,然后在浏览器上下文中执行该代码,而非每次都让模型返回 JSON。
from llm_scraper_py import LLMScraper, OpenAIModel
from pydantic import BaseModel
class Product(BaseModel):
name: str
price: float
rating: float
scraper = LLMScraper(OpenAIModel(api_key="..."))
# 让模型观察页面并生成提取代码
result = await scraper.agenerate(page, Product)
generated_js = result.code
# 在后续同构页面上直接执行生成的代码,无需再调 LLM
extracted = await page.evaluate(generated_js)优势:对于列表页(如电商搜索结果),你只需要对第一个商品调用一次模型生成代码,后续几十个商品全部复用该代码在浏览器内执行。Token 成本从 O(N) 降为 O(1),且提取速度回归毫秒级。
结合搜索结果中的对比分析与实践经验,决策边界大致如下:
场景 | 推荐方案 | 理由 |
|---|---|---|
站点固定、结构稳定、高频采集 | 传统规则 + 代理池 | 延迟敏感,成本敏感 |
多站点异构、规则维护成本高 | LLM 语义提取(Schema 驱动) | 通用 Prompt 跨站复用,省去逐站适配 |
已有规则库、偶发失效 | 规则优先 + AI 自愈兜底 | 兼顾效率与鲁棒性 |
列表页批量提取 | LLM 生成代码 → 本地执行 | 一次性推理成本,无限次执行 |
最后的提醒:AI 爬虫并未改变爬虫的边界。robots.txt、请求频率控制、身份标识(User-Agent)依然是必须遵守的准则。LLM 的能力在于理解页面,而不在于绕过封禁。将 AI 用于“更聪明地解析公开信息”,而非“更隐蔽地突破限制”,才是这项技术长期产生价值的路径。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。