Crawl4AI v0.2.77 🕷️🤖
Crawl4AI 简化了网络爬虫和数据提取,使其适用于大型语言模型(LLMs)和人工智能应用。🆓🌐
[v0.2.77] - 2024-08-02
功能、性能和跨平台兼容性方面的重大改进!🚀
- 🐳 Docker 增强:
- 显著改进的 Dockerfile,便于在 Linux、Mac 和 Windows 上安装。
- 🌐 官方 Docker Hub 镜像:
- 在 Docker Hub 上发布了我们的第一个官方镜像,简化部署流程(unclecode/crawl4ai)。
- 🔧 Selenium 升级:
- 移除了对 ChromeDriver 的依赖,现在使用 Selenium 的内置功能以获得更好的兼容性。
- 🖼️ 图像描述:
- 实现了为网页提取的图像生成文本描述的功能。
- ⚡ 性能提升:
- 各种改进以提高整体速度和性能。
立即尝试!
✨ 访问我们的文档网站
✨ 查看演示
特性 ✨
- 🆓 完全免费和开源
- 🤖 适用于 LLM 的输出格式(JSON、清洁的 HTML、markdown)
- 🌍 支持同时爬取多个 URL
- 🎨 提取并返回所有媒体标签(图像、音频和视频)
- 🔗 提取所有外部和内部链接
- 📚 提取页面的元数据
- 🔄 用于身份验证、头部和爬取前页面修改的自定义钩子
- 🕵️ 用户代理自定义
- 🖼️ 截取页面截图
- 📜 在爬取前执行多个自定义 JavaScript
- 📚 各种分块策略:基于主题、正则表达式、句子等
- 🧠 高级提取策略:余弦聚类、LLM 等
- 🎯 支持 CSS 选择器
- 📝 传递指令/关键词以优化提取
Crawl4AI
🌟 向 v0.2.77 的贡献者致敬!
非常感谢这些杰出的贡献者,使这个版本成为可能:
- @aravindkarnam 提供了新的图像描述功能
- @FractalMind 贡献了我们的官方 Docker Hub 镜像
- @ketonkss4 帮助简化了我们的 Selenium 设置
你们的贡献正在推动 Crawl4AI 向前发展!🚀
酷炫示例 🚀
快速入门
from crawl4ai import WebCrawler
# 创建 WebCrawler 实例
crawler = WebCrawler()
# 预热爬虫(加载必要的模型)
crawler.warmup()
# 在 URL 上运行爬虫
result = crawler.run(url="https://www.nbcnews.com/business")
# 打印提取的内容
print(result.markdown)
如何安装 🛠
使用 pip 🐍
virtualenv venv
source venv/bin/activate
pip install "crawl4ai @ git+https://github.com/unclecode/crawl4ai.git"
使用 Docker 🐳
# 对于 Mac 用户(M1/M2)
# docker build --platform linux/amd64 -t crawl4ai .
docker build -t crawl4ai .
docker run -d -p 8000:80 crawl4ai
使用 Docker Hub 🐳
docker pull unclecode/crawl4ai:latest
docker run -d -p 8000:80 unclecode/crawl4ai:latest
以速度为先的设计 🚀
这个库最重要的设计原则也许就是速度。我们需要确保它能够尽可能快速地并行处理多个链接和资源。将这种速度与 Groq 等快速 LLM 结合起来,结果将会令人惊叹。
import time
from crawl4ai.web_crawler import WebCrawler
crawler = WebCrawler()
crawler.warmup()
start = time.time()
url = r"https://www.nbcnews.com/business"
result = crawler.run( url, word_count_threshold=10, bypass_cache=True)
end = time.time()
print(f"耗时:{end - start}")
让我们看看上面代码片段的计算时间:
[日志] 🚀 爬取完成,成功:True,耗时:1.3623387813568115 秒
[日志] 🚀 内容提取完成,成功:True,耗时:0.05715131759643555 秒
[日志] 🚀 提取过程,耗时:0.05750393867492676 秒。
总耗时:1.439958095550537
从页面获取内容花费了 1.3623 秒,提取内容花费了 0.0575 秒。🚀
从网页提取结构化数据 📊
从官方页面爬取所有 OpenAI 模型及其费用。
import os
from crawl4ai import WebCrawler
from crawl4ai.extraction_strategy import LLMExtractionStrategy
from pydantic import BaseModel, Field
class OpenAIModelFee(BaseModel):
model_name: str = Field(..., description="OpenAI 模型的名称。")
input_fee: str = Field(..., description="OpenAI 模型的输入 token 费用。")
output_fee: str = Field(..., description="OpenAI 模型的输出 token 费用。")
url = 'https://openai.com/api/pricing/'
crawler = WebCrawler()
crawler.warmup()
result = crawler.run(
url=url,
word_count_threshold=1,
extraction_strategy= LLMExtractionStrategy(
provider= "openai/gpt-4o", api_token = os.getenv('OPENAI_API_KEY'),
schema=OpenAIModelFee.schema(),
extraction_type="schema",
instruction="""从爬取的内容中,提取所有提到的模型名称以及它们的输入和输出 token 费用。
不要遗漏整个内容中的任何模型。一个提取的模型 JSON 格式应该像这样:
{"model_name": "GPT-4", "input_fee": "US$10.00 / 1M tokens", "output_fee": "US$30.00 / 1M tokens"}。"""
),
bypass_cache=True,
)
print(result.extracted_content)
执行 JS、使用 CSS 选择器过滤数据和聚类
from crawl4ai import WebCrawler
from crawl4ai.chunking_strategy import CosineStrategy
js_code = ["const loadMoreButton = Array.from(document.querySelectorAll('button')).find(button => button.textContent.includes('Load More')); loadMoreButton && loadMoreButton.click();"]
crawler = WebCrawler()
crawler.warmup()
result = crawler.run(
url="https://www.nbcnews.com/business",
js=js_code,
css_selector="p",
extraction_strategy=CosineStrategy(semantic_filter="technology")
)
print(result.extracted_content)
文档 📚
有关详细文档,包括安装说明、高级功能和 API 参考,请访问我们的文档网站。
贡献 🤝
我们欢迎开源社区的贡献。查看我们的贡献指南以获取更多信息。
许可证 📄
Crawl4AI 根据 Apache 2.0 许可证发布。
联系方式 📧
如有问题、建议或反馈,请随时联系:
- GitHub:unclecode
- Twitter:@unclecode
- 网站:crawl4ai.com
祝爬取愉快!🕸️🚀