零代码搞定LLM结构化提取:Crawl4AI+Pydantic实战指南
你还在为LLM提取非结构化数据烦恼?当需要从网页中精准提取如产品价格、新闻时间、股票数据等结构化信息时,传统爬虫往往需要编写大量解析代码,而普通LLM调用又面临格式混乱的问题。本文将展示如何用Crawl4AI结合Pydantic模型,仅需3步即可实现从网页爬取到结构化数据输出的全流程自动化,代码量减少80%。读完本文你将掌握:- Pydantic模型定义与Crawl4AI集成方法- 3种结...
零代码搞定LLM结构化提取:Crawl4AI+Pydantic实战指南
你还在为LLM提取非结构化数据烦恼?当需要从网页中精准提取如产品价格、新闻时间、股票数据等结构化信息时,传统爬虫往往需要编写大量解析代码,而普通LLM调用又面临格式混乱的问题。本文将展示如何用Crawl4AI结合Pydantic模型,仅需3步即可实现从网页爬取到结构化数据输出的全流程自动化,代码量减少80%。
读完本文你将掌握:
- Pydantic模型定义与Crawl4AI集成方法
- 3种结构化提取策略(Schema约束/自由提取/智能推断)
- 反爬场景下的鲁棒性配置
- 完整项目案例:OpenAI价格表实时提取系统
技术原理:数据流转架构
Crawl4AI的LLM提取能力基于"爬虫-解析-结构化"三层架构实现:
核心实现位于extraction_strategy.py,其中LLMExtractionStrategy类封装了完整的LLM交互逻辑,支持通过schema参数接收Pydantic模型定义,实现类型安全的数据提取。
实战步骤:从模型定义到数据落地
1. 定义Pydantic数据模型
创建结构化数据模板,以OpenAI价格表提取为例:
from pydantic import BaseModel, Field
class OpenAIModelFee(BaseModel):
model_name: str = Field(..., description="模型名称,如GPT-4o")
input_fee: str = Field(..., description="输入token单价,如$0.005/1K Tokens")
output_fee: str = Field(..., description="输出token单价")
完整示例代码见llm_extraction_openai_pricing.py,该模型定义确保提取结果自动包含模型名称和双向价格信息。
2. 配置Crawl4AI提取策略
初始化带有LLM提取配置的爬虫实例,关键参数说明:
crawler_config = CrawlerRunConfig(
cache_mode=CacheMode.BYPASS, # 禁用缓存确保实时性
extraction_strategy=LLMExtractionStrategy(
llm_config=LLMConfig(provider="openai/gpt-4o", api_token=os.getenv("OPENAI_API_KEY")),
schema=OpenAIModelFee.model_json_schema(), # 注入Pydantic模型
instruction="提取所有模型名称及其输入输出token费用,不要遗漏任何模型",
extra_args={"temperature": 0}, # 零温度确保结果一致性
),
)
3. 执行爬取与数据提取
启动异步爬虫任务,获取结构化结果:
async with AsyncWebCrawler(config=browser_config) as crawler:
result = await crawler.arun(
url="https://openai.com/api/pricing/",
config=crawler_config
)
print(result.extracted_content) # 直接输出Pydantic模型实例列表
执行后将获得如下结构化数据:
[
{"model_name": "GPT-4o", "input_fee": "$0.005 / 1K Tokens", "output_fee": "$0.015 / 1K Tokens"},
{"model_name": "GPT-4o mini", "input_fee": "$0.00015 / 1K Tokens", "output_fee": "$0.0006 / 1K Tokens"}
]
高级配置:应对复杂场景
反爬策略配置
对于有反爬机制的网站,需配置浏览器指纹和代理:
browser_config = BrowserConfig(
headless=True,
stealth_mode=True, # 启用反检测模式
proxy="http://username:password@proxy-server:port" # 代理支持
)
三种提取模式对比
| 模式 | 适用场景 | 代码示例路径 |
|---|---|---|
| Schema约束 | 固定格式数据 | llm_extraction_openai_pricing.py |
| 自由提取 | 非固定结构内容 | summarize_page.py |
| 智能推断 | 未知数据结构 | llm_table_extraction_example.py |
项目资源与扩展阅读
- 官方文档:docs/md_v2/extraction/
- 更多示例:docs/examples/
- 性能测试报告:tests/async/test_performance.py
该方案已集成到Crawl4AI v0.7.4版本,通过pip install crawl4ai>=0.7.4即可获取最新功能。建议配合Docker部署指南实现生产环境快速搭建。
点赞收藏本文,关注项目ROADMAP.md获取即将发布的多模态提取功能更新预告。
更多推荐
所有评论(0)