Crawl4AI
Crawl4AI是一款专为简化网页爬取和信息提取而设计的工具,特别适合大语言模型(LLMs)和AI应用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html
无论你是通过REST API、Python 库,还是Google Colab笔记本来使用,Crawl4AI都能提供强大的功能,让网页数据提取变得更加简单和高效。你无需安装任何额外的库,就能轻松地从多个网页获取所需的信息。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html
Crawl4AI提供了多种使用方式:你可以直接使用官方服务器上的 REST API,也可以在本地运行服务器。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html
此外,Crawl4AI的Python库允许你根据具体需求自定义爬取和提取策略,提供更高级的控制。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html
通过Crawl4AI,你可以高效地提取网页上的文本、图片、音频、视频和链接,为你的LLMs和AI应用提供强大的数据支持。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html
主要功能
功能 | 描述 |
完全免费和开源 | Crawl4AI 是免费使用且开源的,任何人都可以访问。 |
适用于 LLM 的输出格式 | 支持 JSON、清理后的 HTML 和 markdown 格式。 |
并发爬取 | 可以同时爬取多个 URL,节省时间。 |
媒体提取 | 提取所有媒体标签,包括图片、音频和视频。 |
链接提取 | 从网页中提取所有外部和内部链接。 |
元数据提取 | 提取网页的元数据以获取更多上下文信息。 |
自定义钩子 | 定义自定义钩子,用于身份验证、头部信息和爬取前的页面修改。 |
用户代理支持 | 自定义 HTTP 请求的用户代理。 |
截图功能 | 在爬取过程中对网页进行截图。 |
JavaScript 执行 | 在爬取前执行自定义 JavaScript。 |
高级分块和提取策略 | 使用基于主题、正则表达式、句子分块、余弦聚类和 LLM 的提取策略。 |
支持 CSS 选择器 | 使用 CSS 选择器提取特定内容。 |
指令/关键词优化 | 传递指令或关键词以优化提取过程。 |
安装
使用 Crawl4AI 有三种方式:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html
1、作为库使用(推荐)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html
pip install "crawl4ai[all] @ git+https://github.com/unclecode/crawl4ai.git"
2、作为本地服务器(Docker)或使用 REST API文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html
这个选项安装与transformer相关的依赖项并下载模型。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html
# 对于 Mac 用户 (M1/M2)
docker build --platform linux/amd64 --build-arg INSTALL_OPTION=transformer -t crawl4ai:transformer .
# 对于其他用户
docker build --build-arg INSTALL_OPTION=transformer -t crawl4ai:transformer .
# 运行容器
docker run -d -p 8000:80 crawl4ai:transformer
3、作为本地服务器(Docker),使用 Docker Hub 上的预构建镜像文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html
你可以使用Docker Hub上的预构建Crawl4AI镜像,这些镜像适用于所有平台(Mac,Linux,Windows)文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html
# 拉取镜像
docker pull unclecode/crawl4ai:latest
# 运行容器
docker run -d -p 8000:80 unclecode/crawl4ai:latest
运行容器后,你可以测试是否正常工作:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html
在Windows (PowerShell)上:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html
Invoke-WebRequest -Uri http://localhost:8000
或者打开浏览器,导航到http://localhost:8000文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html
快速入门指南
首先,我们创建一个WebCrawler实例并调用warmup()函数。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html
第一次运行Crawl4AI时可能需要几秒钟,因为它需要加载所需的模型文件。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html
from crawl4ai import WebCrawler
def create_crawler():
crawler = WebCrawler(verbose=True)
crawler.warmup()
return crawler
crawler = create_crawler()
基本用法
只需提供一个URL!文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html
result = crawler.run(url="https://www.nbcnews.com/business")
print(f"Basic crawl result: {result}")
截图
让我们对页面进行截图!文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html
result = crawler.run(url="https://www.nbcnews.com/business", screenshot=True)
with open("screenshot.png", "wb") as f:
f.write(base64.b64decode(result.screenshot))
print("Screenshot saved to 'screenshot.png'!")
理解参数
默认情况下,Crawl4AI会缓存爬取结果,这意味着对相同URL的后续爬取会更快!让我们看看这个功能。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html
第一次爬取(缓存结果):文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html
result = crawler.run(url="https://www.nbcnews.com/business")
print(f"First crawl result: {result}")
强制重新爬取
result = crawler.run(url="https://www.nbcnews.com/business", bypass_cache=True)
print(f"Second crawl result: {result}")
添加分块策略
让我们添加一个分块策略:RegexChunking!这个策略根据给定的正则表达式模式拆分文本。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html
from crawl4ai.chunking_strategy import RegexChunking
result = crawler.run(
url="https://www.nbcnews.com/business",
chunking_strategy=RegexChunking(patterns=["\n\n"])
)
print(f"RegexChunking result: {result}")
你还可以使用NlpSentenceChunking,它利用NLP技术将文本拆分为句子。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html
from crawl4ai.chunking_strategy import NlpSentenceChunking
result = crawler.run(
url="https://www.nbcnews.com/business",
chunking_strategy=NlpSentenceChunking()
)
print(f"NlpSentenceChunking result: {result}")
添加提取策略
让我们变得更聪明,使用提取策略:CosineStrategy!这个策略利用余弦相似度提取语义上相似的文本块。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html
from crawl4ai.extraction_strategy importCosineStrategy
result = crawler.run(
url="https://www.nbcnews.com/business",
extraction_strategy=CosineStrategy(
word_count_threshold=10,
max_dist=0.2,
linkage_method="ward",
top_k=3
)
)
print(f"CosineStrategy result: {result}")
你还可以传递其他参数,如semantic_filter,以提取特定内容。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html
result = crawler.run(
url="https://www.nbcnews.com/business",
extraction_strategy=CosineStrategy(
semantic_filter="inflation rent prices"
)
)
print(f"CosineStrategy result with semantic filter: {result}")
使用 LLMExtractionStrategy
这个策略利用大型语言模型从网页中提取相关信息。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html
from crawl4ai.extraction_strategy import LLMExtractionStrategy
import os
result = crawler.run(
url="https://www.nbcnews.com/business",
extraction_strategy=LLMExtractionStrategy(
provider="openai/gpt-4o",
api_token=os.getenv('OPENAI_API_KEY')
)
)
print(f"LLMExtractionStrategy (no instructions) result: {result}")
你还可以提供特定的指令来指导提取。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html
result = crawler.run(
url="https://www.nbcnews.com/business",
extraction_strategy=LLMExtractionStrategy(
provider="openai/gpt-4o",
api_token=os.getenv('OPENAI_API_KEY'),
instruction="I am interested in only financial news"
)
)
print(f"LLMExtractionStrategy (with instructions) result: {result}")
目标提取
使用CSS选择器只提取H2标签!文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html
result = crawler.run(
url="https://www.nbcnews.com/business",
css_selector="h2"
)
print(f"CSS Selector (H2 tags) result: {result}")
交互提取
传递JavaScript代码点击“加载更多”按钮!文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html
const loadMoreButton = Array.from(document.querySelectorAll('button')).find(button => button.textContent.includes('Load More'));
loadMoreButton && loadMoreButton.click();
result = crawler.run(
url="https://www.nbcnews.com/business",
js=js_code
)
print(f"JavaScript Code (Load More button) result: {result}")
使用爬虫钩子
import time
from crawl4ai.web_crawler importWebCrawler
from crawl4ai.crawler_strategy import*
defdelay(driver):
print("Delaying for 5 seconds...")
time.sleep(5)
print("Resuming...")
defcreate_crawler():
crawler_strategy =LocalSeleniumCrawlerStrategy(verbose=True)
crawler_strategy.set_hook('after_get_url', delay)
crawler =WebCrawler(verbose=True, crawler_strategy=crawler_strategy)
crawler.warmup()
return crawler
crawler = create_crawler()
result = crawler.run(url="https://www.nbcnews.com/business", bypass_cache=True)
入门体验
拿之前文章做个验证。Redka = SQLite 重新实现 Redis文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html
from crawl4ai.web_crawler import WebCrawler
crawler = WebCrawler()
crawler.warmup()
result = crawler.run(
url='https://mp.weixin.qq.com/s?__biz=Mzg2MDg5NzE5NA==&mid=2247489168&idx=1&sn=9d7cee1d5641b0ad89568d48ccdef75c&chksm=ce1e3c55f969b5439f0efbbee58ebd3654238a90b049c603f13cc98450f5893e64d222d23f89&token=1468678215&lang=zh_CN#rd',
screenshot=true
)
print(result)
适用于 LLM 的输出格式
导出markdown
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html
JSON格式
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html
截屏
文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html