当前位置: 首页 > news >正文

无头浏览器与请求签名技术-Cloudflare防护

爬虫代理

在实际数据采集实践中,许多目标网站(例如 Amazon)都会采用 Cloudflare 等防护措施,防止机器人和非正常流量。本文将分享一个故障场景下的排查与改进方案,讲述如何利用无头浏览器、请求签名技术以及爬虫代理 IP来实现数据采集。

本文结构如下:

  • 时间轴呈现方案进程
  • 方案分析
  • 架构改进方案

时间轴呈现方案进程

  1. 初次尝试(T0):
    在最初采集 Amazon 商品信息时,使用常规的请求方式(如 Python 的 requests 库)直接访问目标页面,但由于 Cloudflare 的机制,返回了验证码页面或直接拒绝访问。
  2. 排查与调试(T1):
    经过详细分析,确认 Cloudflare 主要通过检测 Cookie、User-Agent 以及请求行为来判断是否为真实用户。传统的请求方式难以模拟完整的浏览器环境,导致防护措施生效。
  3. 引入无头浏览器(T2):
    为了完整地执行页面中的 JavaScript,并获取有效的 Cookie 信息,开始采用 Selenium 等无头浏览器方案。同时,利用代理 IP 技术规避单 IP 访问过于集中的风险。
  4. 请求签名技术落地(T3):
    在无头浏览器获取到 Cookie 信息后,通过对目标 URL 与 Cookie 的加密计算,生成请求签名。将签名附加到后续请求中,进一步模拟浏览器真实行为,绕过 Cloudflare 的二次验证。
  5. 系统测试与数据提取(T4):
    经过多次调试后,成功采集到 Amazon 上的商品标题、价格和评价等信息,同时整个流程在代理支持下实现了稳定的运行。

方案分析

Cloudflare 防护主要依赖以下几方面来辨识是否为正常用户请求:

  • Cookie 策略: Cloudflare 会在首次访问时生成一系列 Cookie,并要求后续请求带上这些 Cookie,否则将视为异常流量。
  • User-Agent 检测: 非浏览器默认的 User-Agent 或者缺失相关头信息的请求容易被直接屏蔽。
  • 行为监测与签名验证: 通过对请求 URL 及 Cookie 等信息进行加密计算,生成签名,验证请求是否来自真实用户。

传统的 HTTP 请求难以满足上述条件,因此本文引入了无头浏览器技术。通过 Selenium 模拟完整的浏览器行为,可以获取到 Cloudflare 设置的 Cookie,再结合自定义的请求签名算法(例如 MD5 散列计算),将签名附加到请求中,从而绕过防护。同时,采用爬虫代理技术,利用代理 IP、用户名和密码等信息,确保请求来源的多样性,进一步降低被限制的风险。


架构改进方案

在当前方案基础上,为提高系统的稳定性和扩展性,建议从以下几个方面进行架构改进:

  1. 无头浏览器集群化部署:
    利用 Docker 或 Kubernetes 部署无头浏览器集群,实现并发采集任务的分布式调度。这样既可以提高采集效率,也能避免单节点故障导致整个系统中断。
  2. 签名算法优化:
    根据目标网站的动态检测机制,持续调整和优化签名生成算法。可以考虑通过机器学习等方式不断学习目标网站的防护规则,实现自适应的请求签名策略。
  3. 代理池管理:
    构建一个自动化代理池,动态监控代理 IP 的可用性,并自动切换故障代理。参考爬虫代理的接入方式,实现代理IP的自动认证和更新。
  4. 多层次容错机制:
    在请求失败或防护触发时,设置重试、延时等容错机制,同时记录失败日志,方便后续问题排查与数据补采。
  5. 数据清洗与存储:
    对采集到的数据进行实时清洗、去重,并存储到数据库中。可以利用异步消息队列对爬虫任务进行解耦,提升系统整体的健壮性。

示例代码

下面给出一个基于 Selenium 的无头浏览器示例代码,展示如何设置代理、Cookie、User-Agent,并生成请求签名以采集 Amazon 商品信息。代码中引用了爬虫代理的域名、端口、用户名和密码(请根据实际情况替换)。

import time
import hashlib
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.common.by import Bydef generate_signature(url, cookies):"""模拟生成请求签名的逻辑这里简单地将 URL 与所有 cookie 拼接后计算 MD5 值,实际中可能需要更复杂的算法"""raw = url + ''.join([cookie['name'] + cookie['value'] for cookie in cookies])return hashlib.md5(raw.encode('utf-8')).hexdigest()def scrape_amazon_product(product_url):# 设置 Chrome 无头浏览器选项chrome_options = Options()chrome_options.add_argument("--headless")  # 开启无头模式# 设置代理 IP,参考亿牛云爬虫代理的配置(www.16yun.cn)proxy_host = "proxy.16yun.cn"  # 代理服务器域名proxy_port = "8080"               # 代理端口proxy_user = "16YUN"           # 代理用户名proxy_pass = "16IP"           # 代理密码# 如果代理需要认证,则需要构造代理认证字符串,此处为简单示例proxy = f"{proxy_host}:{proxy_port}"chrome_options.add_argument(f'--proxy-server=http://{proxy}')# 设置 User-Agent 模拟真实浏览器user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36"chrome_options.add_argument(f'user-agent={user_agent}')# 初始化 webdriver(确保已安装对应的 chromedriver 并配置到环境变量中)driver = webdriver.Chrome(options=chrome_options)try:# 访问目标页面(Amazon 商品页面)driver.get(product_url)# 等待页面加载及 Cloudflare 防护检测通过(根据实际情况调整等待时间)time.sleep(5)# 获取页面 Cookie,用于生成请求签名cookies = driver.get_cookies()signature = generate_signature(product_url, cookies)print("生成的请求签名:", signature)# 提取商品信息(标题、价格、评价等)# 商品标题product_title = driver.find_element(By.ID, "productTitle").text if driver.find_elements(By.ID, "productTitle") else "无商品标题"# 商品价格(价格可能位于不同的元素中,此处仅为示例)try:product_price = driver.find_element(By.ID, "priceblock_ourprice").textexcept Exception as e:product_price = "价格信息获取失败"# 商品评价(同样,评价信息的获取可能因页面结构不同而变化)try:product_review = driver.find_element(By.ID, "acrCustomerReviewText").textexcept Exception as e:product_review = "评价信息获取失败"print("商品标题:", product_title)print("商品价格:", product_price)print("商品评价:", product_review)finally:# 关闭浏览器driver.quit()if __name__ == '__main__':# 示例目标商品链接(请替换为实际存在的商品链接)target_url = "https://www.amazon.com/dp/B08N5WRWNW"scrape_amazon_product(target_url)

代码说明

  • 无头浏览器设置: 通过 chrome_options.add_argument("--headless") 启用无头模式,以便在后台静默运行浏览器。
  • 代理 IP 配置: 利用爬虫代理提供的域名、端口、用户名和密码,设置代理服务器,从而规避单 IP 请求风险。
  • User-Agent 与 Cookie: 在启动浏览器时,设置 User-Agent 参数;同时,浏览器执行页面中的 JavaScript 后能自动获取 Cloudflare 下发的 Cookie,这为后续请求签名提供数据支持。
  • 请求签名: 通过将目标 URL 与 Cookie 拼接后计算 MD5 散列值,模拟生成请求签名。

总结

在面对 Cloudflare 防护和复杂网站反爬机制时,单一的 HTTP 请求方案往往难以奏效。通过引入无头浏览器,可以完整模拟真实用户的浏览行为;结合请求签名技术,进一步通过 Cookie 与请求参数的加密验证,实现了对防护机制的绕过。同时,采用爬虫代理 IP确保了请求的分散性与稳定性。

未来,通过无头浏览器集群化、代理池管理及签名算法优化,可以不断提升数据采集的效率与成功率,为故障排查及架构改进提供更加成熟的解决方案。

相关文章:

无头浏览器与请求签名技术-Cloudflare防护

在实际数据采集实践中,许多目标网站(例如 Amazon)都会采用 Cloudflare 等防护措施,防止机器人和非正常流量。本文将分享一个故障场景下的排查与改进方案,讲述如何利用无头浏览器、请求签名技术以及爬虫代理 IP来实现数…...

6.聊天室环境安装 - Ubuntu22.04 - elasticsearch(es)的安装和使用

目录 介绍安装安装kibana安装ES客户端使用 介绍 Elasticsearch, 简称 ES,它是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,res…...

【NexLM 开源系列】让 AI 聊天更丝滑:SSE 实现流式对话!

🌟 在这系列文章中,我们将一起探索如何搭建一个支持大模型集成项目 NexLM 的开发过程,从 架构设计 到 代码实战,逐步搭建一个支持 多种大模型(GPT-4、DeepSeek 等) 的 一站式大模型集成与管理平台&#xff…...

具备多种功能的PDF文件处理工具

软件介绍 在日常办公和学习场景中,PDF文件使用极为频繁,而一款功能强大的PDF编辑软件能大幅提升处理效率。 今天要介绍的Adobe Acrobat Pro DC 2024.005.20414,就具备像编辑Word文档一样便捷编辑PDF的能力。 PDF文档在学习和工作中广泛应用…...

electron+vue+webview内嵌网页并注入js

vue内嵌网页可以使用iframe实现内嵌网页,但是只能通过postMessage间接通信,在electron环境下,vue可以直接使用webview来内嵌网页,支持 executeJavaScript、postMessage、send 等丰富的通信机制。 使用 webview的优势 性能更佳&…...

机器学习常见面试题

常见基模型 1. 线性模型(Linear Models) 特点:通过线性组合特征进行预测,适合处理线性关系。常见类型: 线性回归(Linear Regression)逻辑回归(Logistic Regression)岭回…...

单片机OTA升级中Bootloader怎么判断APP有没有问题?

没开发过OTA的工程师,职业生涯是不完整的。因为它能让设备远程更新功能,太方便了,产品有了这个功能,再也不会跟硬件工程师一起背锅了。 不过,新手玩OTA,搞不好,也会翻车,比如下载过程…...

《OpenCV》—— dlib(换脸操作)

文章目录 dlib换脸介绍仿射变换在 dlib 换脸中的应用 换脸操作 dlib换脸介绍 dlib 换脸是基于 dlib 库实现的一种人脸替换技术,以下是关于它的详细介绍: 原理 人脸检测:dlib 库中包含先进的人脸检测器,如基于 HOG(方向…...

从零开始实现大语言模型(十三):预训练大语言模型GPTModel

1. 前言 使用梯度下降算法通过下一个token预测任务预训练大语言模型GPTModel,前向传播流程每次会输入一个batch的长度均为context_len的训练样本,执行 batch_size context_len \text{batch\_size}\times\text{context\_len} batch_sizecontext_len次下…...

[C++面试] 对通透比较器了解多少?(较少涉及,可跳过)

一、入门 1、什么是比较器 在 C 中,比较器是一个可调用对象(函数、函数对象或 Lambda 表达式),用于定义元素之间的比较规则。 用途:通常作为参数传递给标准库中的排序函数或关联容器,以指定元素的顺序。…...

【高分论文密码】AI大模型和R语言的全类型科研图形绘制,从画图、标注、改图、美化、组合、排序分解科研绘图每个步骤

在科研成果竞争日益激烈的当下,「一图胜千言」已成为高水平SCI期刊的硬性门槛——数据显示很多情况的拒稿与图表质量直接相关。科研人员普遍面临的工具效率低、设计规范缺失、多维数据呈现难等痛点,因此科研绘图已成为成果撰写中的至关重要的一个环节&am…...

el-input-number添加自定义内容class-unit

在el-input,el-input-number中有需要在输入框后面添加单位的需求&#xff0c;这时候就需要用到class-unit <el-input-number size"small" class-unit"%" class"inputNumberClass"></el-input-number>// css .inputNumberClass[clas…...

MYSQL学习笔记(十一):MYSQL数据类型讲解

前言&#xff1a; 学习和使用数据库可以说是程序员必须具备能力&#xff0c;这里将更新关于MYSQL的使用讲解&#xff0c;大概应该会更新30篇&#xff0c;涵盖入门、进阶、高级(一些原理分析);这一篇数据类型&#xff0c;比较多&#xff0c;但是我感觉了解即可&#xff0c;ai时…...

【数据分享】1999—2023年我国地级市社会消费品零售总额和年末金融机构存贷款余额(Shp/Excel格式)

在之前的文章中&#xff0c;我们分享过基于2000-2024年《中国城市统计年鉴》整理的1999-2023年地级市的人口相关数据、染物排放和环境治理相关数据和房地产投资情况和商品房销售面积相关指标数据&#xff08;均可查看之前的文章获悉详情&#xff09;&#xff01; 本次我们分享…...

使用 MyBatis-Plus 实现数据库的多租户管理

在现代 SaaS&#xff08;软件即服务&#xff09;应用中&#xff0c;多租户架构是一种常见的设计模式。它允许多个租户共享同一个应用实例&#xff0c;同时确保每个租户的数据相互隔离。MyBatis-Plus 提供了强大的多租户支持&#xff0c;能够帮助开发者轻松实现多租户管理。本文…...

大语言模型学习--向量数据库基础知识

1.向量 向量是多维数据空间中的一个坐标点。 向量类型 图像向量 文本向量 语音向量 Embedding 非结构化数据转换为向量过程 通过深度学习训练&#xff0c;将真实世界离散数据&#xff0c;投影到高维数据空间上&#xff0c;通过数据在空间中间的距离体现真实世界的相似度 V…...

计算机三级网络技术备考(5)

第七章&#xff1a;路由器及其配置 考点1&#xff1a;路由器概述及其工作原理 考点2&#xff1a;路由器工作模式及基础配置 考点3&#xff1a;路由器的接口配置 【sdh 0 2 sonet 0】 考点4&#xff1a;路由器的路由配置 考点5&#xff1a;路由器DHCP配置 考点6&#xff1a…...

Java关键字与标识符

Java关键字是预定义的保留字&#xff0c;用于定义程序结构和语义&#xff0c;如if、for、class等&#xff0c;不能用作标识符。JDK 8有50个关键字&#xff0c;JDK 11引入var用于局部变量类型推断。标识符用于命名变量、类等&#xff0c;由字母、数字、_、$组成&#xff0c;不能…...

生活小妙招之UE ViewPortUV-SceneTextureUV

后处理材质customNode中写SceneTextureLookup遇到了一些问题&#xff0c;做做记录 比如要在custom中写一个普通的镜像模糊&#xff0c;脑子都不带转的上来就直接这么写了&#xff0c;像是顺理成章的就应该这么写&#xff0c;并且网上随便搜UE咋写镜像模糊估计都是这样式的。 但…...

FB投广探秘:为何Facebook广告账户不消耗

在Facebook上投放广告时&#xff0c;您是否遇到过这种情况:广告创建完成后却发现账户没消耗&#xff0c;广告没跑出去?为什么会遇到这种情况?小编将结合最新行业动态&#xff0c;为你解析广告为何无消耗。 一、原因解析 1、账户余额不足 最直接的原因往往最容易被忽视。若…...

亚信安全发布第七期《勒索家族和勒索事件监控报告》

本周态势快速感知 本周全球共监测到勒索事件121起&#xff0c;与上周相比&#xff0c;勒索事件数量大幅下降&#xff0c;仍需注意防范。从整体上看Clop是影响最严重的勒索家族&#xff1b;本周Ransomhub和Akira也是活动频繁的两个恶意家族&#xff0c;需要注意防范。本周&…...

flask实现mvc模式

Flask 默认是一个轻量级框架&#xff0c;并不强制使用 MVC 模式&#xff0c;但我们可以按照 MVC 结构来组织代码&#xff0c;使项目更加清晰和可维护。 Flask 实现 MVC 模式 Flask 本身并没有严格的 Controller 层&#xff0c;但我们可以通过 视图函数&#xff08;View Functi…...

基于LabVIEW的脚本化子VI动态生成

该示例展示了一种利用LabVIEW VI脚本&#xff08;VI Scripting&#xff09;技术&#xff0c;通过程序化方式动态生成并替换子VI的解决方案。核心逻辑为&#xff1a;基于预定义的模板VI&#xff0c;根据用户选择的数学操作&#xff08;加法或乘法&#xff09;&#xff0c;自动生…...

Linux 网络:skb 数据管理

文章目录 1. 前言2. skb 数据管理2.1 初始化2.2 数据的插入2.2.1 在头部插入数据2.2.2 在尾部插入数据 2.2 数据的移除 3. 小结 1. 前言 限于作者能力水平&#xff0c;本文可能存在谬误&#xff0c;因此而给读者带来的损失&#xff0c;作者不做任何承诺。 2. skb 数据管理 数…...

golang坐标转换 gomap3d库

gomap3d Go语言实现的多坐标系转换库&#xff0c;支持天文学/航天领域常用坐标系转换 基础算子支持c gomap3d 特性 支持5种坐标系互转&#xff1a; 站心坐标系 (AER)东北天坐标系 (ENU)地心地固坐标系 (ECEF)地心惯性坐标系 (ECI)大地坐标系 (LLA) 支持多种参考椭球体&#…...

电脑的常见问题的原因+解决方法

电脑常见问题涵盖软件和硬件两方面&#xff0c;以下是一些常见问题及解决方法&#xff1a; 软件问题 系统运行缓慢 原因&#xff1a;可能是开机启动项过多、系统垃圾文件堆积、病毒或恶意软件入侵、硬件驱动不兼容等。解决方法&#xff1a;利用系统自带的任务管理器或第三方软…...

JavaScript性能优化实战:从8s到0.8s的极致提升

‌摘要‌:页面卡顿、内存泄漏、CPU爆满?本文通过‌6个真实场景‌+‌可运行代码示例‌,手把手教你掌握JS性能优化核心技术!涵盖‌防抖节流、虚拟滚动、Web Workers、内存泄漏排查‌等高频痛点解决方案,最后提供Chrome性能分析工具实战指南,助你打造丝滑的Web应用! 一、性…...

英语学习(GitHub学到的分享)

【英语语法&#xff1a;https://github.com/hzpt-inet-club/english-note】 【离谱的英语学习指南&#xff1a;https://github.com/byoungd/English-level-up-tips/tree/master】 【很喜欢文中的一句话&#xff1a;如果我轻轻松松的学习&#xff0c;生活的幸福指数会提高很多…...

OTP单片机调试工具之—应广单片机ADC调试案例

上一篇文章说到了‘OTP单片机调试工具’的大概使用方法&#xff0c;现在做一个案例来说明情况。 这个案例是使用应广单片机ADC对可调电阻中间抽头电压值进行采样&#xff0c;分别用12bit和8bit进行显示&#xff0c;使用vdd做参考&#xff0c;采样数据没有进行滤波&#xff0c;通…...

Java基础关键_020_集合(四)

目 录 一、Set 集合 二、Map 集合 1.概览 2.说明 3.HashMap 说明 4.LinkedHashMap 说明 5.TreeMap 说明 6.Hashtable 说明 7.Properties 说明 三、Map 接口常用方法 1.put(K key, V value) 和 putAll(Map m) 2.get(Object key) 3.clear() 和 size() 4.contains…...

电商数据分析 电商平台销售数据分析 电商平台数据库设计 揭秘电商怎么做数据分析

《电商参谋数据分析平台方案》&#xff08;28页PPT&#xff09;是一套为电商行业量身定制的一体化解决方案&#xff0c;它通过全链路打通从数据获取到分析的全过程&#xff0c;帮助电商企业实现精细化运营和市场机会的挖掘。该方案针对电商行业在数据获取、加工整合及业务赋能方…...

Hugging Face的Transformers核心模块:Pipelines(参数说明,各种模型类型调用案例)

如果电脑配置不够可以参考文章《学AI-撸羊毛-免费GPU服务器-kaggle-每周30小时-可以进行数据训练&#xff0c;大模型微调》 申请免费服务器执行代码。 什么是Pipelines 将数据预处理、模型调用、结果后处理三部分组装成的流水线使我们能够直接输入文本便获得最终的答案 Pipeli…...

ChatGPT辅助学术写作有哪些挑战?怎么解决?

宝子们毕业之前需要完成的学术论文往往是学生时代最后一项挑战。无论宝子们对此过程多么熟悉&#xff0c;每次着手写新论文时&#xff0c;似乎都需重新规划、从头开始。 值得庆幸的是&#xff0c;借助ChatGPT、DeepSeek这些工具能够为论文旅程提供有力支持。ChatGPT作为备受推崇…...

【MySQL是怎么运行的】二、索引

引擎层有支持索引&#xff0c;如InnoDB和MyISAM&#xff0c;区别就是InnoDB支持事务、外键和行锁 索引物理结构 页&#xff1a;一页16KB&#xff0c;一页包含了多行记录 行&#xff1a;包含元数据和真实数据 元数据&#xff1a; record_type&#xff08;记录的类型&#xff…...

MySQL中有哪些索引

1&#xff0c;B-Tree索引&#xff1a;常见的索引类型 2&#xff0c;哈希索引&#xff1a;基于哈希表实现&#xff0c;只支持等值查询 &#xff0c;只有Memory存储引擎和NDB Cluster存储引擎显示支持哈希索引 3&#xff0c;全文索引&#xff1a;可在字符列上创建&#xff08;T…...

Node.js中HTTPS模块应用详解

1. HTTPS 模块的概念 HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;是 HTTP 的安全版本&#xff0c;通过 SSL/TLS 协议对数据进行加密&#xff0c;确保数据在传输过程中不被窃取或篡改。在 Node.js 中&#xff0c;https 模块提供了创建 HTTPS 服务器和客户…...

facebook游戏投广:提高广告关键数据的方法

在当今竞争激烈的数字营销领域&#xff0c;游戏广告的投放效果直接关系到游戏公司的市场表现和盈利能力。然而&#xff0c;许多游戏公司在广告投放上面临着诸多挑战&#xff0c;如高昂的成本、低效的转化率以及难以追踪的效果。那么&#xff0c;如何才能通过数据分析真正提升游…...

每天五分钟深度学习框架PyTorch:ResNet算法模型完成CAFIR十分类

本文重点 ResNet模型已经搭建完成了&#xff0c;本文我们使用ResNet来跑一下CAFIR10的数据集&#xff0c;看一下分类效果如何&#xff1f; 代码 本文总结 在之前的课程中我们对残差块以及ResNet模型进行了详细的介绍&#xff0c;并且我们对模型训练这些基础的数据集进行了详…...

Python中很常用的100个函数整理

Python 内置函数提供了强大的工具&#xff0c;涵盖数据处理、数学运算、迭代控制、类型转换等。本文总结了 100 个常用内置函数&#xff0c;并配备示例代码&#xff0c;提高编程效率。 1. abs() 取绝对值 print(abs(-10)) # 10 2. all() 判断所有元素是否为真 print(all([…...

nginx与openSSL版本不兼容问题

本人先前使用的nginx-version为1.18.0&#xff0c;openSSL-version为3.0.2&#xff1b; 在源码的安装configure过程中&#xff0c;出现以下报错 error: ‘ENGINE_free’ is deprecated: Since OpenSSL 3.0 [-Werrordeprecated-declarations]734 | ENGINE_free(en…...

【RabbitMQ】事务

事务的简单配置及使用 配置事务管理器声明队列生产者代码测试 RabbitMQ是基于AMQP协议实现的&#xff0c;该协议实现了事务机制&#xff0c;因此RabbitMQ也支持事务机制. SpringAMQP也提供了对事务相关的操作.RabbitMQ事务允许开发者确保消息的发送和接收是原子性的&#xff0c…...

【C#学习笔记03】进制转换与反码、补码、原码

1. 进制转换 计算机中的数据通常以二进制形式存储&#xff0c;但在编程和调试过程中&#xff0c;我们经常需要与十进制、八进制和十六进制打交道。因此&#xff0c;掌握进制转换是C语言学习中的重要一环。 1.1 进制的基本概念 二进制&#xff08;Binary&#xff09;&#xff…...

线性搜索算法

何时使用线性搜索算法&#xff1f; 当处理一个小数据集时。当搜索存储在连续内存中的数据集时。 线性搜索算法在什么情况下优于其他搜索算法&#xff1f; 当列表或数组未排序时&#xff0c;或者当输入的大小相对较小时&#xff0c;首选线性搜索算法。它易于实现&#xff0c;并…...

基于深度文档理解的开源 RAG 引擎RAGFlow的介绍和安装

目录 前言1. RAGFlow 简介1.1 什么是 RAGFlow&#xff1f;1.2 RAGFlow 的核心特点 2. RAGFlow 的安装与配置2.1 硬件与软件要求2.2 下载 RAGFlow 源码2.3 源码编译 Docker 镜像2.4 设置完整版&#xff08;包含 embedding 模型&#xff09;2.5 运行 RAGFlow 3. RAGFlow 的应用场…...

蓝桥杯—走迷宫(BFS算法)

题目描述 给定一个NM 的网格迷宫 G。G 的每个格子要么是道路&#xff0c;要么是障碍物&#xff08;道路用 11表示&#xff0c;障碍物用 0 表示&#xff09;。 已知迷宫的入口位置为 (x1​,y1​)&#xff0c;出口位置为 (x2​,y2​)。问从入口走到出口&#xff0c;最少要走多少…...

基于云函数的自习室预约微信小程序+LW示例参考

全阶段全种类学习资源&#xff0c;内涵少儿、小学、初中、高中、大学、专升本、考研、四六级、建造师、法考、网赚技巧、毕业设计等&#xff0c;持续更新~ 文章目录 [TOC](文章目录) 1.项目介绍2.项目部署3.项目部分截图4.获取方式 1.项目介绍 技术栈工具&#xff1a;云数据库…...

Flutter 学习之旅 之 flutter 不使用插件,实现简单带加载动画的 LoadingToast 功能

Flutter 学习之旅 之 flutter 不使用插件&#xff0c;实现简单带加载动画的 LoadingToast 功能 目录 Flutter 学习之旅 之 flutter 不使用插件&#xff0c;实现简单带加载动画的 LoadingToast 功能 一、简单介绍 二、LoadingToast 三、简单案例实现 四、关键代码 一、简单…...

GStreamer —— 2.17、Windows下Qt加载GStreamer库后运行 - “播放教程 5:色彩平衡“(附:完整源码)

运行效果 介绍 亮度、对比度、色相和饱和度是常见的视频调整&#xff0c; 在 GStreamer 中统称为 Color Balance 设置。 本教程展示了&#xff1a; • 如何找出可用的色彩平衡通道 • 如何更改它们 允许访问颜色平衡设置。如果 元素支持这个接口&#xff0c;只需将其转发给应用…...

在wsl2中安装ubuntu

Linux 是操作系统内核&#xff0c;Ubuntu 是基于Linux的发行版。 虚拟机 是运行操作系统的虚拟环境&#xff0c;可以在物理机上运行多个操作系统&#xff0c;包括Linux和Ubuntu。 1&#xff1a;启用 WSL 功能 以管理员身份打开 PowerShell。(winR&#xff0c;输入powershell&…...

SPFA算法——负权图且没有负环

SPFA算法其实是对Bellman-ford算法的优化&#xff0c;Bellman-ford算法更新最短路是采用的是遍历每一条边&#xff0c;找到最短的边进行更新d[v]min(d[v],d[u]w(u,v))&#xff0c;由 d[v]min(d[v],d[u]w(u,v))可知只有当 d[ u ]变小时才有可能更新&#xff0c;所以用一个队列存…...