百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

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

off999 2024-12-15 16:05 27 浏览 0 评论

Crawl4AI

Crawl4AI是一款专为简化网页爬取和信息提取而设计的工具,特别适合大语言模型(LLMs)和AI应用。

无论你是通过REST API、Python 库,还是Google Colab笔记本来使用,Crawl4AI都能提供强大的功能,让网页数据提取变得更加简单和高效。你无需安装任何额外的库,就能轻松地从多个网页获取所需的信息。

Crawl4AI提供了多种使用方式:你可以直接使用官方服务器上的 REST API,也可以在本地运行服务器。

此外,Crawl4AI的Python库允许你根据具体需求自定义爬取和提取策略,提供更高级的控制。

通过Crawl4AI,你可以高效地提取网页上的文本、图片、音频、视频和链接,为你的LLMs和AI应用提供强大的数据支持。

主要功能

功能描述完全免费和开源Crawl4AI 是免费使用且开源的,任何人都可以访问。适用于 LLM 的输出格式支持 JSON、清理后的 HTML 和 markdown 格式。并发爬取可以同时爬取多个 URL,节省时间。媒体提取提取所有媒体标签,包括图片、音频和视频。链接提取从网页中提取所有外部和内部链接。元数据提取提取网页的元数据以获取更多上下文信息。自定义钩子定义自定义钩子,用于身份验证、头部信息和爬取前的页面修改。用户代理支持自定义 HTTP 请求的用户代理。截图功能在爬取过程中对网页进行截图。JavaScript 执行在爬取前执行自定义 JavaScript。高级分块和提取策略使用基于主题、正则表达式、句子分块、余弦聚类和 LLM 的提取策略。支持 CSS 选择器使用 CSS 选择器提取特定内容。指令/关键词优化传递指令或关键词以优化提取过程。

安装

使用 Crawl4AI 有三种方式:

1、作为库使用(推荐)

pip install "crawl4ai[all] @ git+https://github.com/unclecode/crawl4ai.git"

2、作为本地服务器(Docker)或使用 REST API

这个选项安装与transformer相关的依赖项并下载模型。

# 对于 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 上的预构建镜像

你可以使用Docker Hub上的预构建Crawl4AI镜像,这些镜像适用于所有平台(Mac,Linux,Windows)

# 拉取镜像
docker pull unclecode/crawl4ai:latest

# 运行容器
docker run -d -p 8000:80 unclecode/crawl4ai:latest

运行容器后,你可以测试是否正常工作:

在Windows (PowerShell)上:

Invoke-WebRequest -Uri http://localhost:8000

或者打开浏览器,导航到http://localhost:8000

快速入门指南

首先,我们创建一个WebCrawler实例并调用warmup()函数。

第一次运行Crawl4AI时可能需要几秒钟,因为它需要加载所需的模型文件。

from crawl4ai import WebCrawler

def create_crawler():
    crawler = WebCrawler(verbose=True)
    crawler.warmup()
    return crawler

crawler = create_crawler()

基本用法

只需提供一个URL!

result = crawler.run(url="https://www.nbcnews.com/business")
print(f"Basic crawl result: {result}")

截图

让我们对页面进行截图!

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的后续爬取会更快!让我们看看这个功能。

第一次爬取(缓存结果):

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!这个策略根据给定的正则表达式模式拆分文本。

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技术将文本拆分为句子。

from crawl4ai.chunking_strategy import NlpSentenceChunking

result = crawler.run(
    url="https://www.nbcnews.com/business",
    chunking_strategy=NlpSentenceChunking()
)
print(f"NlpSentenceChunking result: {result}")

添加提取策略

让我们变得更聪明,使用提取策略:CosineStrategy!这个策略利用余弦相似度提取语义上相似的文本块。

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,以提取特定内容。

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

这个策略利用大型语言模型从网页中提取相关信息。

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}")

你还可以提供特定的指令来指导提取。

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标签!

result = crawler.run(
    url="https://www.nbcnews.com/business",
    css_selector="h2"
)
print(f"CSS Selector (H2 tags) result: {result}")

交互提取

传递JavaScript代码点击“加载更多”按钮!

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

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

JSON格式

截屏

相关推荐

让 Python 代码飙升330倍:从入门到精通的四种性能优化实践

花下猫语:性能优化是每个程序员的必修课,但你是否想过,除了更换算法,还有哪些“大招”?这篇文章堪称典范,它将一个普通的函数,通过四套组合拳,硬生生把性能提升了330倍!作者不仅展示了“术”,更传授...

7 段不到 50 行的 Python 脚本,解决 7 个真实麻烦:代码、场景与可复制

“本文整理自开发者AbdurRahman在Stackademic的真实记录,所有代码均经过最小化删减,确保在50行内即可运行。每段脚本都对应一个日常场景,拿来即用,无需额外依赖。一、在朋...

Python3.14:终于摆脱了GIL的限制

前言Python中最遭人诟病的设计之一就是GIL。GIL(全局解释器锁)是CPython的一个互斥锁,确保任何时刻只有一个线程可以执行Python字节码,这样可以避免多个线程同时操作内部数据结...

Python Web开发实战:3小时从零搭建个人博客

一、为什么选Python做Web开发?Python在Web领域的优势很突出:o开发快:Django、Flask这些框架把常用功能都封装好了,不用重复写代码,能快速把想法变成能用的产品o需求多:行业...

图解Python编程:从入门到精通系列教程(附全套速查表)

引言本系列教程展开讲解Python编程语言,Python是一门开源免费、通用型的脚本编程语言,它上手简单,功能强大,它也是互联网最热门的编程语言之一。Python生态丰富,库(模块)极其丰富,这使...

Python 并发编程实战:从基础到实战应用

并发编程是提升Python程序效率的关键技能,尤其在处理多任务场景时作用显著。本文将系统介绍Python中主流的并发实现方式,帮助你根据场景选择最优方案。一、多线程编程(threading)核...

吴恩达亲自授课,适合初学者的Python编程课程上线

吴恩达教授开新课了,还是亲自授课!今天,人工智能著名学者、斯坦福大学教授吴恩达在社交平台X上发帖介绍了一门新课程——AIPythonforBeginners,旨在从头开始讲授Python...

Python GUI 编程:tkinter 初学者入门指南——Ttk 小部件

在本文中,将介绍Tkinter.ttk主题小部件,是常规Tkinter小部件的升级版本。Tkinter有两种小部件:经典小部件、主题小部件。Tkinter于1991年推出了经典小部件,...

Python turtle模块编程实践教程

一、模块概述与核心概念1.1turtle模块简介定义:turtle是Python标准库中的2D绘图模块,基于Logo语言的海龟绘图理念实现。核心原理:坐标系系统:原点(0,0)位于画布中心X轴:向右...

Python 中的asyncio 编程入门示例-1

Python的asyncio库是用于编写并发代码的,它使用async/await语法。它为编写异步程序提供了基础,通过非阻塞调用高效处理I/O密集型操作,适用于涉及网络连接、文件I/O...

30天学会Python,开启编程新世界

在当今这个数字化无处不在的时代,Python凭借其精炼的语法架构、卓越的性能以及多元化的应用领域,稳坐编程语言排行榜的前列。无论是投身于数据分析、人工智能的探索,还是Web开发的构建,亦或是自动化办公...

Python基础知识(IO编程)

1.文件读写读写文件是Python语言最常见的IO操作。通过数据盘读写文件的功能都是由操作系统提供的,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个...

Python零基础到精通,这8个入门技巧让你少走弯路,7天速通编程!

Python学习就像玩积木,从最基础的块开始,一步步搭建出复杂的作品。我记得刚开始学Python时也是一头雾水,走了不少弯路。现在回头看,其实掌握几个核心概念,就能快速入门这门编程语言。来聊聊怎么用最...

一文带你了解Python Socket 编程

大家好,我是皮皮。前言Socket又称为套接字,它是所有网络通信的基础。网络通信其实就是进程间的通信,Socket主要是使用IP地址,协议,端口号来标识一个进程。端口号的范围为0~65535(用户端口...

Python-面向对象编程入门

面向对象编程是一种非常流行的编程范式(programmingparadigm),所谓编程范式就是程序设计的方法论,简单的说就是程序员对程序的认知和理解以及他们编写代码的方式。类和对象面向对象编程:把...

取消回复欢迎 发表评论: