Crawl4AI: 适合大语言模型的开源网页爬取与信息提取利器

2024-08-0909:10:57人工智能与大数据Comments316 views字数 5595阅读模式

Crawl4AI

Crawl4AI是一款专为简化网页爬取和信息提取而设计的工具,特别适合大语言模型(LLMs)和AI应用。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html

Crawl4AI: 适合大语言模型的开源网页爬取与信息提取利器文章源自菜鸟学院-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

Crawl4AI: 适合大语言模型的开源网页爬取与信息提取利器文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html

JSON格式

Crawl4AI: 适合大语言模型的开源网页爬取与信息提取利器文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html

截屏

Crawl4AI: 适合大语言模型的开源网页爬取与信息提取利器文章源自菜鸟学院-https://www.cainiaoxueyuan.com/ai/64842.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/ai/64842.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定