Crawl4AI: 赋能AI用户的开源智能网页爬虫与数据提取
Crawl4AI: 赋能AI用户的开源智能网页爬虫与数据提取
在当今人工智能时代,网络爬虫扮演着至关重要的角色。它们不仅是数据收集的强大工具,更是驱动机器学习、自然语言处理等技术发展的关键引擎。
然而,对于用户来说,在面对复杂多变的网络环境和各异的网站结构时,常常会遇到诸多挑战。爬取中文网站时,编码问题、反爬机制、以及对中文语义的理解都成为了阻碍数据获取的绊脚石。
正是在这样的背景下,我发现了 Crawl4AI,一款专为大型语言模型(LLM)和人工智能应用设计的高效、灵活且完全开源的网页爬虫与数据提取工具。
它致力于降低用户在数据获取方面的门槛,赋能开发者以快速、高效、便捷的方式从网络中提取所需信息。
概览
Crawl4AI 是一款功能丰富、且对 LLM 非常友好的爬虫框架。它拥有以下核心优势:
- 完全开源且免费:Crawl4AI 采用 Apache 2.0 协议,允许用户自由使用、修改和分发,无需担心付费或商业限制。
- 专为 AI 设计:自动将网页内容转换为结构清晰、简洁的 Markdown 格式,极大地简化了 RAG(检索增强生成)流程和微调任务的数据获取步骤。
- 速度快,效率高:Crawl4AI 拥有出色的性能,能够在短时间内抓取大量页面,并通过启发式算法降低对昂贵模型的依赖。
- 高度灵活可配置:支持多种配置选项,包括自定义 User-Agent、代理设置、会话管理等,轻松应对各种反爬策略。
核心优势
Crawl4AI 的强大之处体现在以下几个核心方面:
-
速度与效率
Crawl4AI 追求极致性能,凭借其架构优化,能以极快的速度抓取网页。与同类工具相比,Crawl4AI 在速度上具有显著优势。 -
灵活的配置
Crawl4AI 提供了两个核心配置类,
BrowserConfig
和CrawlerRunConfig
,方便用户灵活地定制爬虫的行为:-
BrowserConfig
:用于配置浏览器级别的设置,例如是否启用无头模式、设置 User-Agent、配置代理等。 -
CrawlerRunConfig
:用于配置单次抓取任务的行为,例如缓存模式、内容选择、内容过滤、JavaScript 执行等。
-
-
多结构数据提取
Crawl4AI 支持多种数据提取策略,能够从网页中提取出结构化的信息:
- JSON CSS Extraction:使用 CSS 选择器从结构化的网页中提取数据,速度快、效率高。
- JSON XPath Extraction:使用 XPath 表达式从 XML 或 HTML 文档中提取数据,更加灵活。
- LLM Extraction:结合大型语言模型,从非结构化的网页中提取信息,适用于处理复杂或语义化的内容。
-
可扩展的大规模数据处理能力
Crawl4AI 通过内存自适应调度器(MemoryAdaptiveDispatcher
)来支持大规模并发爬取,可以根据系统内存使用情况动态地调整并发任务数量,防止内存溢出,保证爬虫的稳定运行。同时还提供了流式处理的支持,能够在抓取的同时处理数据,无需等待所有任务完成,大大提高了效率。 -
协议支持
Crawl4AI 默认支持 HTTP(S) 协议,但同时也考虑到网络爬虫的伦理和法律问题,提供了robots.txt
协议的支持,可以通过设置check_robots_txt=True
来遵守网站的爬取规则,避免对网站造成不必要的负担。
快速上手
以下是使用 Crawl4AI 的快速上手指南:
1. 安装
使用 pip 安装 Crawl4AI:
pip install crawl4ai
crawl4ai-setup
2. 编写 Python 脚本
创建一个 Python 脚本,例如 crawl.py
,并添加以下代码:
import asyncio
from crawl4ai import AsyncWebCrawlerasync def main():async with AsyncWebCrawler() as crawler:result = await crawler.arun(url="https://www.example.com")print(result.markdown[:500])if __name__ == "__main__":asyncio.run(main())
3. 运行脚本
在命令行中运行该脚本:
python crawl.py
4. 使用命令行界面(CLI)
如果你只需要快速的抓取一个网页,可以使用我们提供的CLI工具:
crwl https://www.nbcnews.com/business -o markdown
高级功能
Crawl4AI 提供了许多高级功能,可以满足各种复杂的爬取需求。
1. 高级的网页遍历方法:深度爬取
Crawl4AI 支持深度爬取,可以通过配置 deep_crawl_strategy
参数来控制爬取的深度和范围。目前支持三种深度爬取策略:
-
BFSDeepCrawlStrategy
(广度优先搜索):逐层遍历网页。 -
DFSDeepCrawlStrategy
(深度优先搜索):沿着一条路径深入挖掘,直到无法再深入为止。 -
BestFirstCrawlingStrategy
:基于评分函数来决定下一个要爬取的链接,优先爬取最有价值的页面。
2. 代理与安全
你可以通过 BrowserConfig
中的 proxy
或 proxy_config
参数来配置代理,实现 IP 轮换和匿名爬取。
browser_config = BrowserConfig(proxy_config={"server": "http://proxy.example.com:8080","username": "user","password": "pass",}
)
3. 会话管理
通过设置 CrawlerRunConfig
中的 session_id
参数,可以在多次请求之间保持会话状态,例如模拟用户登录后的操作。
run_config = CrawlerRunConfig(session_id="my_session"
)
4. 浏览器配置与用户代理
你可以通过 BrowserConfig
中的 user_agent
参数来设置自定义的用户代理,或者使用 user_agent_mode
参数来随机生成用户代理,以模拟真实用户的行为,避免被网站的反爬机制识别。
browser_config = BrowserConfig(user_agent_mode="random",user_agent_generator_config={"device_type": "mobile", "os_type": "android"},
)
5. LLM配置
Crawl4AI现在提供 LlmConfig
对象,用于配置 LLM 提供程序。这简化了在需要 LLM 的策略和函数中传递provider字符串、API 令牌和基本 URL 的过程,从而可以重复使用并快速试验不同的 LLM 配置。
您可以通过以下两种方式传递LLM密钥:
a)在本地设置环境变量并在 LlmConfig 对象内部调用它
os.environ["OPENAI_API_KEY"] = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"llm_config = LlmConfig(provider="openai/gpt-4", api_token=os.getenv("OPENAI_API_KEY"))
b)将 api_token 直接传递给 LlmConfig 对象:
llm_config = LlmConfig(provider="openai/gpt-4", api_token="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
6. 结构化数据提取
Crawl4AI 支持多种结构化数据提取方式,包括:
- JSON CSS Extraction:使用 CSS 选择器从 HTML 页面中提取数据。
- JSON XPath Extraction:使用 XPath 表达式从 HTML 页面中提取数据。
- LLM Extraction:使用大型语言模型从非结构化的文本中提取数据。
7. 内容过滤
Crawl4AI 提供了多种内容过滤策略,可以根据关键词、BM25 算法或大型语言模型来过滤网页内容,提取出最相关的信息。例如,使用 BM25ContentFilter
可以根据用户查询来过滤网页内容:
from crawl4ai.content_filter_strategy import BM25ContentFilterfilter = BM25ContentFilter(user_query="machine learning")
应用场景
Crawl4AI 在实际应用中拥有广泛的应用场景:
- 研究助手:用于快速抓取和整理学术论文、研究报告等信息,辅助科研人员进行文献综述和数据分析。
- 数据分析:用于抓取电商网站的商品信息、社交媒体的用户数据等,为商业决策提供数据支持。
- AI 模型训练:用于构建高质量的训练数据集,提升 AI 模型的性能。
- 新闻聚合:定时抓取多个新闻网站的内容,生成个性化的新闻摘要或报告。
提问环节:
请具体说明一下该项目的数据缓存和多网页爬取?
1. 数据缓存
数据缓存是 Crawl4AI 的一项重要特性,它可以将抓取到的网页内容保存在本地,下次再次请求相同页面时,直接从缓存中读取,而无需重新发起网络请求。这极大地提高了爬取效率,并降低了对目标网站的访问压力。
1.1 缓存模式
Crawl4AI 使用 CacheMode
枚举类型来控制缓存行为。你可以在 CrawlerRunConfig
中指定缓存模式:
from crawl4ai import CrawlerRunConfig, CacheModeconfig = CrawlerRunConfig(cache_mode=CacheMode.ENABLED) # 启用缓存(默认)
以下是 CacheMode
的各个选项:
-
CacheMode.ENABLED
: 默认模式,先尝试从缓存读取数据,如果缓存不存在,则发起网络请求,并将结果写入缓存。 -
CacheMode.DISABLED
: 禁用所有缓存功能,每次都发起网络请求。 -
CacheMode.READ_ONLY
: 只从缓存读取数据,不写入新数据到缓存。 -
CacheMode.WRITE_ONLY
: 只将数据写入缓存,不从缓存读取数据。 -
CacheMode.BYPASS
: 绕过缓存,直接发起网络请求,并将结果写入缓存。
1.2 清理缓存
Crawl4AI 提供了 aclear_cache()
和 aflush_cache()
两个方法来管理缓存:
-
aclear_cache()
:清空数据库中的所有缓存数据,但保留数据库文件。async with AsyncWebCrawler() as crawler:await crawler.aclear_cache()
-
aflush_cache()
:直接删除数据库文件,下次使用时会重新创建数据库。async with AsyncWebCrawler() as crawler:await crawler.aflush_cache()
2. 多网页爬取
Crawl4AI 提供了 arun_many()
方法,可以同时抓取多个网页,大幅提升爬取效率。同时,Crawl4AI 通过调度器(Dispatcher)来控制并发数量,避免对目标网站造成过大的压力。
2.1 使用 arun_many()
方法
import asyncio
from crawl4ai import AsyncWebCrawler, CrawlerRunConfigasync def main():urls = ["https://example.com/page1","https://example.com/page2","https://example.com/page3"]async with AsyncWebCrawler() as crawler:results = await crawler.arun_many(urls=urls) # 自动处理并发for result in results:if result.success:print(f"成功抓取:{result.url}")else:print(f"抓取失败:{result.url},错误信息:{result.error_message}")if __name__ == "__main__":asyncio.run(main())
2.2 调度器(Dispatcher)
Crawl4AI 使用调度器来管理并发任务,主要有两种调度器:
-
MemoryAdaptiveDispatcher
:根据系统内存使用情况动态调整并发数量,避免内存溢出。from crawl4ai import MemoryAdaptiveDispatcherdispatcher = MemoryAdaptiveDispatcher(memory_threshold_percent=80)
-
memory_threshold_percent
:内存使用阈值,当内存使用超过该值时,调度器会暂停任务。 -
max_session_permit
:允许的最大并发任务数。 -
check_interval
:检查内存使用情况的间隔时间(秒)。
-
-
SemaphoreDispatcher
:使用信号量来控制并发数量,简单直接。from crawl4ai import SemaphoreDispatcherdispatcher = SemaphoreDispatcher(semaphore_count=5)
-
semaphore_count
:允许的最大并发任务数。
-
2.3 使用示例:内存自适应调度器
import asyncio
from crawl4ai import AsyncWebCrawler, CrawlerRunConfig, MemoryAdaptiveDispatcherasync def main():urls = ["https://example.com/page1","https://example.com/page2","https://example.com/page3"]dispatcher = MemoryAdaptiveDispatcher(memory_threshold_percent=80)async with AsyncWebCrawler() as crawler:results = await crawler.arun_many(urls=urls, config=CrawlerRunConfig(), dispatcher=dispatcher)for result in results:if result.success:print(f"Successfully crawled: {result.url}")else:print(f"Failed to crawl: {result.url}")if __name__ == "__main__":asyncio.run(main())
2.4 流式处理(Streaming)
arun_many()
也支持流式处理,可以在抓取的同时处理数据,无需等待所有任务完成。
import asyncio
from crawl4ai import AsyncWebCrawler, CrawlerRunConfigasync def main():urls = ["https://example.com/page1","https://example.com/page2","https://example.com/page3"]config = CrawlerRunConfig(stream=True) # 开启流式处理async with AsyncWebCrawler() as crawler:async for result in crawler.arun_many(urls=urls, config=config):if result.success:print(f"Successfully crawled: {result.url}")else:print(f"Failed to crawl: {result.url}")if __name__ == "__main__":asyncio.run(main())
2.5 总结
这个项目的维护和更新也是比较频繁,社区活跃度还是比较高,目前不用担心不能使用的问题。
这也是我的日常获取信息的工具,推荐有条件的朋友可以用用看。
项目地址:
Crawl4ai
点个关注,不麋鹿!
相关文章:
Crawl4AI: 赋能AI用户的开源智能网页爬虫与数据提取
Crawl4AI: 赋能AI用户的开源智能网页爬虫与数据提取 在当今人工智能时代,网络爬虫扮演着至关重要的角色。它们不仅是数据收集的强大工具,更是驱动机器学习、自然语言处理等技术发展的关键引擎。 然而,对于用户来说,在面对复杂多…...
C++ primer plus 第七节 函数探幽完结版
系列文章目录 C primer plus 第一节 步入C-CSDN博客 C primer plus 第二节 hello world刨析-CSDN博客 C primer plus 第三节 数据处理-CSDN博客 C primer plus 第四节 复合类型-CSDN博客 C primer plus 第五节 循环-CSDN博客 C primier plus 第七节 函数探幽第一部分-CSDN博客 …...
linux | Vim 命令快捷操作
注:本文为过去的 “vim 使用笔记”。 跳转命令 跳转命令 #:向前查找光标当前所在单词,并跳转到该单词的上一个出现位置。*:向后查找光标当前所在单词,并跳转到该单词的下一个出现位置。 行内跳转 0:跳转…...
RuleOS:区块链开发的“新引擎”,点燃Web3创新之火
RuleOS:区块链开发的“新引擎”,点燃Web3创新之火 在区块链技术的浪潮中,RuleOS宛如一台强劲的“新引擎”,为个人和企业开发去中心化应用(DApp)注入了前所未有的动力。它以独特的设计理念和强大的功能特性&…...
梯度本质论:从黎曼流形到神经网络的拓扑寻优
一、微分几何框架下的梯度再诠释 在标准数学分析中,梯度被定义为标量场 f : R n → R f:\mathbb{R}^n→\mathbb{R} f:Rn→R的导数张量 ∇ f ( ∂ f ∂ x 1 , . . . , ∂ f ∂ x n ) \nabla f(\frac{\partial f}{\partial x_1},...,\frac{\partial f}{\partial x_n…...
LVGL直接解码png图片的方法
通过把png文件解码为.C文件,再放到工程中的供使用,这种方式随时速度快(应为已经解码,代码中只要直接加载图片数据显示出来即可),但是不够灵活,适用于哪些简单又不经常需要更换UI的场景下使用。如…...
代码随想录算法营Day59 | 寻找存在的路径, 冗余连接,冗余连接II
寻找存在的路径 这题使用并查集即可。并查集加路径压缩。 #include <iostream> using namespace std; int find(int* father,int u){return father[u] u ? u : father[u] find(father,father[u]); }bool isSame(int* father,int u,int v){return find(father,u) fi…...
物联网智慧农业一体化解决方案-可继续扩展更多使用场景
在智慧农业中,从种子、施肥、灌溉、锄地、农具管理、日常照料到蔬菜档案管理,以及与客户、供应商、市场的对接,可以通过物联网(IoT)、大数据、人工智能(AI)、区块链和云计算等技术,构建一个从生产到销售的全流程数字化、智能化农业生态系统。以下是实现方案和技术路径的…...
第八节:基于Winform框架的串口助手小项目---完结优化《C#编程》
C# 实战串口助手完成! ----------------------------不竭余力,方能成长!-----------WHAPPY 源码:我会分享开源平台,可以艾特me!(2025/3/5)时间紧张任务中! 文章上所说的…...
Python已知后序遍历和中序遍历,求先序遍历
步骤一:树的构建 字典 def createTree(arr1,arr2,tree):if len(arr1)0 and len(arr2)0 :returnroot len(arr1)-1# print(arr1[root],root)flag arr2.index(arr1[root])# print(flag)len_right len(arr2)-flag-1len_left flagif len(arr2[:flag])>1:lchild …...
三维建模与视频融合(3D-Video Integration)技术初探。
三维建模与视频融合(3D-Video Integration)是一种将虚拟三维模型无缝嵌入实拍视频场景的技术,广泛应用于影视特效、增强现实(AR)、游戏开发、广告制作 、视频监控 等领域。 一、技术核心流程 三维建模与动画 使用工具…...
基于uniapp的蓝牙打印功能(佳博打印机已测试)
相关步骤 1.蓝牙打印与低功耗打印的区别2.蓝牙打印流程2.1 搜索蓝牙2.2 连接蓝牙 3.连接蓝牙设备4.获取服务5.写入命令源码gbk.jsglobalindex.ts 1.蓝牙打印与低功耗打印的区别 低功耗蓝牙是一种无线、低功耗个人局域网,运行在 2.4 GHz ISM 频段 1、低功耗蓝牙能够…...
基于Django的协同过滤算法养老新闻推荐系统的设计与实现
基于Django的协同过滤算法养老新闻推荐系统(可改成普通新闻推荐系统使用) 开发工具和实现技术 Pycharm,Python,Django框架,mysql8,navicat数据库管理工具,vue,spider爬虫࿰…...
PROFINET转PROFIBUS从案例剖析网关模块的协议转换功能
一、 案例背景 在当下追求高效协同的工业自动化生产体系里,设备间的无缝互联互通堪称关键要素。某企业的生产车间中,有一台性能稳定的变频器,其配备的是PROFIBUS接口。与此同时,操控整个生产线的核心大脑——西门子1500 PLC&…...
BZOJ2121 字符串游戏
想出来了一半,然后看了眼题解,果然还是和状压不熟导致的。 题目大意 给你一个字符串 L L L 和一个有 n n n 个字符串的集合 S S S,每次操作可以在 L L L 中选择一个子串,如果这个子串在集合 S S S 中,那么这个子…...
计算机组成原理:计算机系统的性能指标
文章目录 什么是计算机系统的性能指标硬件与计算机系统性能的关系软件与计算机系统性的关系计算机硬件的相关性能指标基本性能指标机器字长数据通路带宽主存容量吞吐量响应时间 与运算速度相关的性能指标CPU时钟频率和时钟周期CPICPU执行时间IPCMIPSMFLOPS 使用基准程序进行性能…...
特定领域软件架构DSSA
特定领域软件架构(Domain-Specific Software Architecture DSSA)是专用于解决某一特定类型任务(领域)的架构。它在该领域内提供了一套标准化的组合构建和软件架构,以满足独特需求和约束。DSSA通过结合特定问题领域的专…...
ubuntu22.04安装RAGFlow配合DeepSeek搭建本地知识库
一、简介 RAGFlow 是一个基于对文档的深入理解的开源 RAG(检索增强生成)引擎。当与 LLM 集成时,它能够提供真实的问答功能,并以来自各种复杂格式数据的有根据的引用为后盾。 二、安装 1.环境要求 CPU ≥ 4 核 (x86…...
Python爬虫实战:爬取财金网实时财经信息
注意:以下内容仅供技术研究,请遵守目标网站的robots.txt规定,控制请求频率避免对目标服务器造成过大压力! 一、引言 在当今数字化时代,互联网数据呈爆炸式增长,其中蕴含着巨大的商业价值、研究价值和社会价值。从金融市场动态分析到行业趋势研究,从舆情监测到学术信息收…...
【Python修仙编程】(二) Python3灵源初探(7)
字典的修炼——修仙者的法宝库 师傅玄天真人在他面前摊开一本泛黄的法典,上面写着:“字典是修仙者存储法宝的仓库,能让你快速找到需要的宝贝。” “师傅,字典是啥玩意儿?”林羽挠挠头,一脸懵逼。 “字典…...
Docker 学习(四)——Dockerfile 创建镜像
Dockerfile是一个文本格式的配置文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。有了Dockerfile,当我们需要定制自己额外的需求时,只需在D…...
智慧校园总体方案
1. 智慧校园内涵与发展 智慧校园作为现代教育信息化的产物,其发展经历了从校园网建设到数字校园,再到智慧校园的转变。技术驱动与理念引领并重,以实现网络学习、校务治理、校园文化和校园生活的全面升级。教育部《教育信息化2.0行动计划》强…...
为什么js小数相加,会产生精度缺失的问题,怎么解决?
为什么js小数相加,会产生精度缺失的问题,怎么解决? 在 JavaScript 中,小数相加会产生精度缺失问题,主要是由 JavaScript 采用的 IEEE 754 双精度 64 位浮点数表示法所导致的,下面详细解释其中的原因&#…...
【JavaScript】DOM和BOM是什么?
作者 :Yuppie001 作者主页 : 传送 本文专栏 :JavaScript 🌟🌟🌟🌟🌟🌟🌟🌟 DOM和BOM: 一.什么是DOMDOM是如何工作 二.BOMÿ…...
虚拟系统配置案例
安全策略要求: 1、只存在一个公网IP地址,公司内网所有部门都需要借用同一个接口访问外网 2、财务部禁止访问Internet,研发部门只有部分员工可以访问Internet,行政部门全部可以访问互联网 3、为三个部门的虚拟系统分配相同的资源类…...
Easysearch 新功能: IK 字段级别词典
Easysearch 1.10 版本在 IK 词典部分增加了字段级别词典的功能。 字段级别词典的功能支持用户对不同的字段设置不同的分词词库,用户既可以完全使用自己的词库,也支持在 ik 默认的词库上增加自定义的词库内容。 在整体使用上,ik 自定义词库的…...
微信小程序接入deepseek
先上效果 话不多说,直接上代码(本人用的hbuilder Xuniapp) <template><view class"container"><!-- 聊天内容区域 --><scroll-view class"chat-list" scroll-y :scroll-top"scrollTop":…...
大白话react第十六章React 与 WebGL 结合的实战项目
大白话react第十六章React 与 WebGL 结合的实战项目 1. 项目简介 React 是一个构建用户界面的强大库,而 WebGL 则允许我们在网页上实现高性能的 3D 图形渲染。将它们结合起来,我们可以创建出炫酷的 3D 网页应用,比如 3D 产品展示、虚拟场景…...
DeepSeek-R1:引领AI领域革新,MLA技术助力模型迁移
摘要 DeepSeek的MLA技术实现了大型机器学习模型的轻松迁移,其突破性产品DeepSeek-R1凭借显著降低的训练和推理成本,吸引了业界广泛关注。MLA技术的核心在于创新性的低秩压缩键值缓存架构,使得推理成本大幅减少,仅为同等性能大型模…...
Nginx:从入门到实战使用教程
全方位解析Nginx:从入门到实战使用教程 Nginx安装、配置详细教程 文章目录 全方位解析Nginx:从入门到实战使用教程导语一、Nginx简介二、Nginx安装与配置 1. 在CentOS系统上安装Nginx:2. 在Ubuntu系统上安装Nginx:3. Nginx配置文…...
SyntaxError: Unexpected token ‘xxx‘
🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》 🍚 蓝桥云课签约作者、…...
GaussDB安全配置指南:从认证到防御的全方面防护
一、引言 随着企业数据规模的扩大和云端化进程加速,数据库安全性成为运维的核心挑战之一。GaussDB作为一款高性能分布式数据库,提供了丰富的安全功能。本文将从 认证机制、权限控制、数据加密、审计日志 等维度,系统性地讲解如何加固 Ga…...
[项目]基于FreeRTOS的STM32四轴飞行器: 四.LED控制
基于FreeRTOS的STM32四轴飞行器: 四.LED控制 一.配置Com层二.编写驱动 一.配置Com层 先在Com_Config.h中定义灯位置的枚举类型: 之后定义Led的结构体: 定义飞行器状态: 在Com_Config.c中初始化四个灯: 在Com_Config.h外部声明…...
Python——计算机网络
一.ip 1.ip的定义 IP是“Internet Protocol”的缩写,即“互联网协议”。它是用于计算机网络通信的基础协议之一,属于TCP/IP协议族中的网络层协议。IP协议的主要功能是负责将数据包从源主机传输到目标主机,并确保数据能够在复杂的网络环境中正…...
【并发编程】聊聊定时任务ScheduledThreadPool的实现原理和源码解析
ScheduledThreadPoolExecutor 是在线程池的基础上 拓展的定时功能的线程池,主要有四种方式,具体可以看代码, 这里主要描述下 scheduleAtFixedRate : 除了第一次执行的时间,后面任务执行的时间 为 time MAX(任务执行时…...
nginx-静态资源部署
目录 静态资源概述 静态资源配置指令 listen指令 server_name指令 精确匹配 ?编辑 ?编辑 使用通配符匹配 使用正则表达式匹配 匹配执行顺序 default_server属性 location指令 root指令 alias指令 root与alisa指令的区别 index指令 error_page指令 直接使用…...
WebGPT: 基于浏览器辅助的问答系统,结合人类反馈优化答案质量
【摘要】 本论文介绍了WebGPT,这是一种通过浏览器辅助问答系统来使用人类反馈进行训练和优化的模型。具体来说,该系统通过与基于文本的网络浏览环境互动,使模型能够搜索和导航网络,从而提高其回答长文本问题的能力。通过将任务设计为人类可以完成的任务,研究人员能够利用…...
C# 异步任务队列封装
在 C# 中,可以使用 Task 和 ConcurrentQueue 来构建一个 异步任务队列,确保任务按照 FIFO(先进先出)顺序执行,并支持并发安全。 设计方案 任务队列 (ConcurrentQueue<Func>) 存储异步任务(每个任务都…...
安装并运行hadoop程序
1.在虚拟机上安装javaJDK (1)把javaJDK文件上传到服务器 在opt文件夹下新建一个software文件夹,将jdk拖入software (2)解压文件 在opt文件夹下新建一个module文件夹,确认上传成功之后,在softwa…...
第TR3周:Pytorch复现Transformer
🍨 本文为🔗365天深度学习训练营中的学习记录博客 🍖 原作者:K同学啊 Transformer通过自注意力机制,改变了序列建模的方式,成为AI领域的基础架构 编码器:理解输入,提取上下文特征…...
51c视觉~3D~合集2
我自己的原文哦~ https://blog.51cto.com/whaosoft/13422809 #中科大统一内外参估计和3DGS训练 这下真的不用相机标定了? 同时优化相机的内外参和无序图像数据 在给定一组来自3D场景的图像及其相应的相机内参和外参的情况下,3D高斯喷溅ÿ…...
dify在腾讯云服务器上部署
Dify 是一个开源的 LLM 应用开发平台。提供从 Agent 构建到 AI workflow 编排、RAG 检索、模型管理等能力,轻松构建和运营生成式 AI 原生应用,比 LangChain 更易用。 首先到dify官方网站上有详细介绍 https://docs.dify.ai/zh-hans/getting-started/ins…...
Redis——缓存穿透、击穿、雪崩
缓存穿透 什么是缓存穿透 缓存穿透说简单点就是大量请求的 key 根本不存在于缓存中,导致请求直接到了数据库上,根本没有经过缓存这一层。举个例子:某个黑客故意制造我们缓存中不存在的 key 发起大量请求,导致大量请求落到数据库…...
Java 并发编程:synchronized 与 Lock 的区别
精心整理了最新的面试资料和简历模板,有需要的可以自行获取 点击前往百度网盘获取 点击前往夸克网盘获取 Java 并发编程:synchronized 与 Lock 的深度对比 在 Java 多线程编程中,同步机制是保证线程安全的核心手段。synchronized 关键字和 …...
12组复古暖色调旅行电影摄影照片调色Lightroom预设 12 Warm Vintage Film Lightroom Presets
使用这 12 种暖色复古胶片 Lightroom 预设来转换您的照片,旨在将经典胶片的永恒精髓带入您的数字编辑中。每个预设都经过精心制作,以唤起丰富的色彩、微妙的颗粒和怀旧的色调。 这些预设非常适合寻求复古魅力和现代精度融合的摄影师,将毫不费…...
WebSocket:实现实时通信的利器
在现代Web应用中,实时通信变得越来越重要。无论是聊天应用、在线游戏,还是实时数据推送,传统的HTTP请求-响应模式已经无法满足需求。WebSocket作为一种全双工通信协议,应运而生,成为实现实时通信的利器。本文将深入探讨…...
小谈java内存马
基础知识 (代码功底不好,就找ai优化了一下) Java内存马是一种利用Java虚拟机(JVM)动态特性(如类加载机制、反射技术等)在内存中注入恶意代码的攻击手段。它不需要在磁盘上写入文件,…...
wordpress自定the_category的输出结构
通过WordPress的过滤器the_category来自定义输出内容。方法很简单,但是很实用。以下是一个示例代码: function custom_the_category($thelist, $separator , $parents ) {// 获取当前文章的所有分类$categories get_the_category();if (empty($categ…...
Flink深入浅出之01:应用场景、基本架构、部署模式
Flink 1️⃣ 一 、知识要点 📖 1. Flink简介 Apache Flink — Stateful Computations over Data StreamsApache Flink 是一个分布式大数据处理引擎,可对有界数据流和无界数据流进行有状态的计算。Flink 能在所有常见集群环境中运行,并能以…...
react脚手架(creat-react-app)
安装 react脚手架 React官方提供的脚手架工程Create React App:https://github.com/facebook/create-react-app npm install create-react-app -g 全局安装 create-react-app my-react (my-react为项目名称,可以自定义) cd my-react 启动项目:…...