Python高级应用之AI Agent开发详解:并行处理、Bug修复与最新crawl4ai 0.6.3及Deepseek-R1:8b网络图片获取实战指南
搞了两天把crawl4ai 0.6.3(最新版) 对ollama 本地大模型比如:deepseek-r1:8b 的bug 给解决了(Issues1035)
先针对 crawl4ai 0.6.3 中四个核心类的作用、关系及结合本地 Ollama 模型抓取百度图片的示例解析说了,
再顺道把,Issues1035 的bug也解决一下
1. 5个核心类的作用和关系
(1) BrowserConfig
headless: 是否启用无头模式(默认 True,生产环境建议开启)。user_agent: 模拟浏览器标识,避免被反爬。javascript_enabled: 启用 JavaScript(动态页面必需)。proxy: 代理设置(本示例不需要)。(2) CrawlerRunConfig
browser_config: 绑定 BrowserConfig 实例。llm_config: 绑定 LLMConfig 实例。llm_extraction_strategy: 绑定 LLMExtractionStrategy 实例。timeout: 超时时间,防止卡死。(3) LLMExtractionStrategy
extraction_type: 提取类型(如 TEXT, JSON, MARKDOWN)。extraction_instructions: 自然语言指令,指导 LLM 过滤内容。llm_chain: 自定义处理链(如预处理、后处理)。(4) LLMConfig
model_name: 模型名称(如 deepseek-r1:8b)。base_url: Ollama 本地 API 地址(默认 http://localhost:11434/v1)。temperature: 控制生成结果的随机性。deepseek-r1:8b 模型。类间关系:
AsyncWebCrawler
└─ CrawlerRunConfig
├─ BrowserConfig
├─ LLMConfig
└─ LLMExtractionStrategy
2. 抓取百度图片示例
(1) 完整代码
from crawl4ai import AsyncWebCrawler
from crawl4ai.models import (
BrowserConfig,
CrawlerRunConfig,
LLMExtractionStrategy,
LLMConfig
)
# 1. 配置浏览器环境
browser_config = BrowserConfig(
headless=True, # 生产环境建议开启无头模式
user_agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36",
javascript_enabled=True,
proxy=None # 无需代理
)
# 2. 配置本地 Ollama 的 LLM
llm_config = LLMConfig(
#这个地方很重要不能错
provider="ollama/deepseek-r1:8b",
base_url="http://localhost:11434",
api_token="no-token",
)
# 3. 定义 LLM 提取策略(关键!)
extraction_strategy = LLMExtractionStrategy(
extraction_type="TEXT", # 从文本中提取
extraction_instructions="提取所有包含‘韩立’的图片的URL,并去重。",
llm_chain=[
{
"step": "extract",
"instructions": "分析页面内容,找到所有百度图片搜索结果中alt文本或描述包含‘韩立’的图片链接。"
}
]
)
# 4. 组装爬虫配置
crawler_config = CrawlerRunConfig(
browser_config=browser_config,
llm_config=llm_config,
llm_extraction_strategy=extraction_strategy,
timeout=30
)
# 5. 执行爬取
try:
async with AsyncWebCrawler(config=browser_config) as crawler:
print("Starting crawl...")
result = await crawler.arun("https://image.baidu.com/search/index?tn=baiduimage&word=韩立", config=crawler_config)
if result.success:
print("提取到的图片链接:")
for img_url in result.extracted_content.get('urls', []):
print(img_url)
else:
print("\nCrawl failed:", result.error_message)
#显示token 等使用情况
llm_strategy.show_usage()
except Exception as e:
print(f"\nAn error occurred during crawling: {str(e)}")
(2) 关键点解释
-
浏览器配置:
- 启用 JavaScript 以加载动态内容(百度图片依赖懒加载)。
- 设置合理的 User-Agent 避免被反爬。
-
LLM 指令设计:
- 明确要求提取“含韩立的图片 URL”,并去重。
- 通过分步指令引导模型分析页面文本和图片上下文。
-
动态内容处理:
- 百度图片的链接通常隐藏在
data-json属性或 JavaScript 渲染后的 DOM 中,需要确保浏览器完全加载页面。 - 如果实际效果不佳,可在
BrowserConfig中添加自定义 JavaScript 代码触发滚动加载更多图片。
(3) 常见问题
delay 参数或随机化 User-Agent。extraction_instructions 是否清晰,或改用正则表达式直接从 HTML 中匹配图片 URL。base_url 正确。3. 扩展优化
browser_config = BrowserConfig(
# 其他参数...
run_js=[
"window.scrollTo(0, document.body.scrollHeight);",
"setTimeout(() => {}, 2000);" # 等待2秒加载
]
)
# 在提取后过滤非图片链接
cleaned_urls = [url for url in result.extracted_content['urls'] if url.endswith(('.jpg', '.png'))]
通过合理配置这四个类,您可以高效结合本地 LLM 的语义理解能力和爬虫的动态页面处理能力。
4.crawl4ai 0.6.3 bug Issues1035 解决方法
“”1. 这个类:utils.py 的def perform_completion_with_backoff 方法 要加上 api_base=base_url,代码**:
这样我们在LLMConfig 中配置的 base_url就能起到作用,否则我们就会得到 OllamaException 连接错误

2. 把extraction_strategy.py 注释掉一行
把类 class LLMExtractionStrategy(ExtractionStrategy)
的方法 def extract(self, url: str, ix: int, html: str) -> List[Dict[str, Any]]:
中的:response = response.choices[0].message.content #注释掉就可以了。
否则就会出现:[LOG] Error in LLM extraction: ‘str’ object has no attribute ‘choices’

作者:AI懒虫