Elastic 网络爬虫:为你的网站添加搜索功能

作者:来自 Elastic Lionel Palacin

为了演示如何使用 Elastic 网络爬虫,我们将以一个具体的网站为例,讲解如何在该网站上添加搜索功能。我们将探讨发现网站的方法,并利用 Elastic 网络爬虫提供的功能,以最佳方式准备待搜索的数据。

在本文中,我们将使用 Elastic Cloud 8.13 版本。

有关网络爬虫的更多内容,请详细阅读:

  • Enterprise:Web Crawler 基础 (一)(二)
  • ChatGPT 和 Elasticsearch:OpenAI 遇见私有数据(二)

Elastic 网络爬虫

是一个开箱即用的工具,使用户能够抓取网站内容并将其导入 Elasticsearch。

Elastic 网络爬虫从访问入口点 URL 开始每次爬取。从这里开始,爬虫获取网页内容并提取之。HTML 文档被转换成搜索文档并进行索引。

然后,它会跟随该页面指向的任何链接,遵守用户定义的规则集。使用相同的方法访问新的 URL,直到爬虫索引了所有可访问的网页。如果一个网页没有链接指向,爬虫就无法找到它。

网站发现

首次爬取

我们将以 “Books to Scrape” 网站作为爬取的简单网站示例,这是一个提供书籍信息选择的网站,专门为测试网络爬虫而设计。

如果你使用的是 Elastic Cloud,设置非常简单,因为 Elastic 网络爬虫是开箱即用的。如果你管理自己的 Elastic 部署,请确保检查此页面以了解需求。

让我们从 Kibana 首页开始。从那里,导航到搜索解决方案,然后创建一个新的网络爬虫。

为索引提供一个名称,在我们的例子中是 search-books,并在下一个屏幕中输入主网站 URL:https://books.toscrape.com/。然后验证域名,并等待执行一些检查,以确保该域名可以被爬取。

在这一点上,让我们通过点击 “Crawl => Crawl all domains” 来使用默认配置爬取网站。这样做,我们将看到正在被爬取的链接以及如何为每个网页索引文档。

查看文档列表时,我们会看到一些类别页面也被爬取了,但我们对这些页面不感兴趣,因为我们只想爬取书籍详情页面。

另外一个我们在展开书籍文档时注意到的问题是,书籍的价格或摘要在 body_content 字段中混合在一起。这使得这些重要信息在搜索查询中不易使用。

定义爬取规则

从我们的第一次爬取中,我们注意到 category 页面也被爬取了,而我们对它们不感兴趣,所以让我们将它们排除在爬取之外。

在爬取规则下,添加一个新规则来禁止爬取以路径模式 /catalogue/category/ 开头 (Begins with) 的页面。

现在我们可以在新规则生效的情况下重新进行一次爬取。

注意:作为探索过程的一部分,每次更改网络爬虫配置时,我建议删除内容。在最后一章 “准备生产部署” 中,我们将看到如何在不手动删除数据的情况下重新运行网络爬虫。

# Delete all documents
POST search-books/_delete_by_query
{"query": {"match_all": {}}
}

丰富数据

默认情况下,Elastic 网络爬虫使用默认模式从网页中提取所有信息。例如,HTML 标签 <title> 被提取到字段 title 中,而 <body> 标签被提取到字段 body_content 中。这是一个很好的基础,但大多数情况下,我们希望自定义数据的提取方式,并且丰富数据以在搜索应用程序中使用。

从自定义字段中提取数据

查看文档被索引的方式时,我们注意到我们想要将书籍摘要和价格分别提取到它们自己的字段中。

在探索新网站时,通常会自定义爬虫从网页中提取内容的方式,为此,提取规则是一个很好的工具。

使用浏览器检查工具,我们可以看到哪个 HTML 标签包含价格文本,这里是一个带有 class=price_color 的 HTML 标签 <p>。

提取规则使用 CSS 选择器或 XPath 来识别网页中的特定元素。我们可以使用浏览器控制台来测试它们。

要尝试 XPath,我们可以使用函数 $x。例如,要返回书籍摘要节点,我们可以在浏览器控制台中运行 $x("//article[@class='product_page']/p")[0]。

要尝试 CSS 选择器,我们可以使用 document.querySelectorAll。例如,要使用 CSS 选择器选择价格,我们可以在浏览器控制台中运行:document.querySelectorAll("div.product_main p.price_color")[0]。

根据我们在浏览器控制台测试的内容,让我们创建一个提取规则来添加两个新字段:summary 和 price。

提取规则

  • 名称:书页规则
  • 适用于所有 URL
  • 第一个字段:
    • Field name:summary
    • source:从 HTML 元素中提取内容
    • CSS 选择器://article[@class='product_page']/p
    • Content:使用从提取值中提取的内容
    • 将提取的内容存储为字符串
  • 第二个字段:
    • 字段名称:price
    • source:从 HTML 元素中提取内容
    • CSS 选择器:div.product_main p.price_color
    • Content:使用从提取值中提取的内容
    • 将提取的内容存储为字符串

数据摄取管道用于转换数据

通常,从网页提取的数据格式并不完全适合用于搜索引擎。在我们的例子中,我们已经将书籍价格单独提取到一个 price 字段中,但如果仔细观察,会发现它被索引为字符串:“£18.03”,这并不理想,因为它不便于执行比较搜索(例如,获取所有价格低于 20 英镑的书籍)或聚合操作(例如,计算科幻书的平均价格)。

为了在数据摄取时进行一些小的转换,我们可以使用 Elasticsearch 中的摄取管道。有许多处理器可用于执行不同的任务,在我们的案例中,我们将使用脚本处理器执行一个自定义函数,该函数将为每个被索引的文档执行,去除价格中的第一个字符,仅保留数字部分。

要管理摄取管道,请转到 Pipelines 标签页,点击 “Copy and Customize”,然后点击 “编辑管道” 按钮开始编辑摄取管道。

在那里添加一个脚本处理器,使用以下代码:

ctx['price_float'] = ctx['price'].substring(1)

保存所有更改,然后返回到网络爬虫索引配置页面。

我们添加的脚本将在摄取时创建一个名为 price_float 的新字段。我们需要编辑索引映射以提供正确的字段类型,在我们的情况下,我们希望将其索引为浮点型。

打开控制台并执行以下代码以更新索引映射:

# Add a new field with a type float
PUT search-books/_mapping
{"properties": {"price_float": {"type": "float"}}
}

现在我们可以删除索引中的所有文档,然后再次运行爬取。所有文档中都会存在一个名为 price_float 的新字段,其类型为浮点型。

启用语义搜索的机器学习推理管道

我们可以使用的另一种管道是推理管道,它允许我们在被索引的数据上运行机器学习模型。

在我们的案例中,我们希望利用 Elastic 的专有机器学习模型 ELSER,该模型能够对任何英语文本启用语义搜索。

返回到 Pipelines 标签页,向下滚动到 Machine Learning Inference Pipelines 部分。如果还未部署和启动 ELSER 模型,此处可以进行部署和启动。

然后,通过单击 “Add Inference Pipeline” 按钮添加一个新的推理管道。在第一个屏幕上选择 ELSER 模型,然后转到下一个屏幕,在那里选择推理管道的输入和输出字段。在我们的案例中,我们想要在图书 summary 上启用语义搜索。我们选择该字段并将其添加到列表中。

完成配置后,我们可以删除所有文档并再次运行网络爬虫。

测试查询

当我们使用提取规则和摄入管道配置网络爬虫后,我们的文档很容易进行搜索。

让我们看一个查询示例,该查询对书籍摘要执行语义搜索,并包含基于书籍价格的过滤器。

# Find books over £50 that talks about "Wars and family succession struggle on dry planets"
POST search-books/_search
{"_source": ["title", "summary", "price", "url"],"query": {"bool": {"should": [{"text_expansion": {"ml.inference.summary_expanded.predicted_value": {"model_id": ".elser_model_2_linux-x86_64","model_text": "Wars and family succession struggle on dry planets"}}}],"filter": [{"range": {"price_float": {"gte": 50}}}]}}
}

准备生产部署

在本章中,我们将讨论在将网络爬虫投入生产时一些重要的网络爬虫特性。

定时任务

由于网站经常更新,保持 Elasticsearch 中的数据与网站同步更新可能很重要。为此,我们可以利用 Elastic 网络爬虫的调度功能,定期爬取网站。

Elastic 网络爬虫会自动检测自上次爬取以来网页是否已更新,并将在 Elasticsearch 中更新相应的文档。如果自上次爬取以来某个网页已被删除,则该文档也将从 Elasticsearch 中删除。

受保护的网站

另一个有用的功能是能够爬取非公开可用或位于认证后的网站。

此文档详细解释了如何爬取位于私有网络中的网站。

如果访问特定网页需要认证,我们可以在域配置屏幕下的认证部分添加凭据或特定头部。

总结

在这篇博客文章中,我们看到了如何从头到尾发现一个新网站进行爬取,如何利用 Elastic 网络爬虫的功能准备数据以用于搜索应用,以及最后如何准备将其部署到生产环境。

如果你有兴趣了解更多关于 Elastic 摄入能力的信息,请查看其他开箱即用的连接器。如果你想在 GenAI 应用程序中使用摄入数据,请查看我们的教程。

准备在你的应用中构建 RAG 吗?想尝试不同的 LLMs 与向量数据库吗? 查看我们在 Github 上的 LangChain、Cohere 等示例笔记本,并加入即将开始的 Elasticsearch工程师培训!

原文: Elasticsearch open inference API adds support for OpenAI chat completions — Elastic Search Labs

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/313507.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

30 OpenCV 点多边形测试

文章目录 点多边形测试pointPolygonTest示例 点多边形测试 pointPolygonTest pointPolygonTest( InputArray contour,// 输入的轮廓 Point2f pt, // 测试点 bool measureDist // 是否返回距离值&#xff0c;如果是false&#xff0c;1表示在内面&#xff0c;0表示在边界上&a…

Spring Boot中判断轨迹数据是否经过设置的打卡点,且在PGSQL中把点拼接成线,判断某个点是否在线上或在线的50米范围内

问题描述 轨迹数据判断是否经过打卡点&#xff0c;轨迹数据太多&#xff0c;循环判断的话非常消耗内存。解决办法只需要把所有轨迹数据点拼成了一条线&#xff0c;然后只需要循环打卡点即可&#xff0c;打卡点不多&#xff0c;一般不会超过100个&#xff0c;如果多的话&#x…

“一个有趣的C语言代码”分析

“一个有趣的C语言代码” 一个有趣的C语言代码-流浪的海豚-ChinaUnix博客 #include <stdio.h> int print() {printf("hello world!\n");return 0; } int main(void) {long base[0];long* result base3;*(result1) *result;*result (long)print;return 0; …

ARM DMIPS算力说明

ARM DMIPS算力说明 ARM算力参考官网地址 https://en.wikipedia.org/wiki/List_of_ARM_processors Product familyARM architectureProcessorFeatureCache (I / D), MMUTypical MIPS MHzReferenceARM1ARMv1ARM1First implementationNoneARM2ARMv2ARM2ARMv2 added the MUL (mu…

无人零售与传统便利店的竞争优势

无人零售与传统便利店的竞争优势 成本控制 • 无人零售 显著降低了人力成本&#xff0c;无需支付店员薪资和相关福利&#xff0c;且通过智能化管理减少能源消耗与维护费用&#xff0c;尤其在高租金和高人流区域效益突出。 • 传统便利店 则承担较高的人员开支&#xff0c;…

Nginx 四层和七层代理区别、配置

四层&#xff1a;通过报文中的目标地址和端口&#xff0c;加上负载均衡设备设置的服务器选择方式&#xff0c;决定最终选择的内部服务器&#xff0c;使用tcp、udp协议。 七层&#xff1a;"内容交换"&#xff0c;通过报文中真正有意义的应用层内容&#xff0c;加上负…

GPT的全面历史和演变:从GPT-1到GPT-4

人工智能新篇章&#xff1a;GPT-4与人类互动的未来&#xff01; 本文探讨了生成式预训练 Transformer (GPT) 的显着演变&#xff0c;提供了从开创性的 GPT-1 到复杂的 GPT-4 的旅程。 每次迭代都标志着重大的技术飞跃&#xff0c;深刻影响人工智能领域以及我们与技术的互动。 我…

MIS微调SAM模型实时交互UI界面

前言 SAM模型的基本介绍可见SAM&#xff08;Segment Anything Model&#xff09;大模型使用--point prompt_sam大模型-CSDN博客 针对Meta团队去年发布的SAM大模型在医学图像分割领域表现性能较差的情况&#xff0c;笔者收集了一些MIS领域的数据集对SAM的架构进行fine tune&am…

akSmart大带宽服务器基础配置科普

在数字化时代&#xff0c;服务器的性能和网络带宽成为业务发展的关键因素。RakSmart作为知名的服务器提供商&#xff0c;其大带宽服务器备受用户青睐。那么&#xff0c;RakSmart大带宽服务器的基础配置究竟有哪些呢?本文将为您揭开这一神秘面纱。 首先&#xff0c;我们来看看R…

信创需求激增,国产服务器操作系统赋能数字化转型

信创&#xff0c;即信息技术应用创新&#xff0c;是指在关键领域和环节推进信息技术的自主创新&#xff0c;构建安全可控的信息技术体系。随着数字化转型的加速&#xff0c;信创需求激增&#xff0c;国产服务器操作系统在其中扮演着至关重要的角色。国产服务器操作系统如何赋能…

爬虫入门——Request请求

目录 前言 一、Requests是什么&#xff1f; 二、使用步骤 1.引入库 2.请求 3.响应 三.总结 前言 上一篇爬虫我们已经提及到了urllib库的使用&#xff0c;为了方便大家的使用过程&#xff0c;这里为大家介绍新的库来实现请求获取响应的库。 一、Requests是什么&#xff1…

发布 Chrome/Edge浏览器extension扩展到应用商店

Chrom Extension发布流程 创建和发布自定义 Chrome 应用和扩展程序&#xff1a;https://support.google.com/chrome/a/answer/2714278?hlzh-Hans 在 Chrome 应用商店中发布&#xff1a;https://developer.chrome.com/docs/webstore/publish?hlzh-cn 注册开发者帐号&#…

Java 实际项目开发之最少必要知识汇总

一、面向过程和面向对象 程序设计语言分为面向过程和面向对象 对于面向过程&#xff0c;强调的是过程&#xff0c;关心的是我去做 对于面向对象&#xff0c;强调的是对象&#xff08;万物皆对象&#xff09;&#xff0c;更关心的是我该让谁去做&#xff0c;这里的谁指的就是对象…

Hadoop+Spark大数据技术(微课版)曾国荪、曹洁版思维导图第四次作业 (第4章 HBase分布式DB)

1.简述Hbase的特点及与传统关系数据库的区别 HBase与传统关系数据库的区别 &#xff08;1&#xff09;数据类型 关系数据库具有丰富的数据类型&#xff0c;如字符串型、数值型、日期型、二进制型等。HBase只有字符串数据类型&#xff0c;数据的实际类型都是交由用户自己编写程序…

【Linux学习】Linux指令(四)

文章标题 &#x1f680;zip/unzip指令&#xff1a;&#x1f680;tar指令&#xff08;重要&#xff09;&#xff1a;&#x1f680;uname –r指令&#xff1a;&#x1f680;关机指令&#x1f680;几个常用操作 &#x1f680;zip/unzip指令&#xff1a; zip 与 unzip的安装 yum i…

【Git学习笔记(二)】Git的基本操作

Git的基本操作 前言正文1、Git本地仓库创建和一些基本概念1.1 本地仓库创建1.2 本地项目创建1.3 仓库区和工作区1.4 暂存区1.5 提交1.6 查看状态1.7 查看日志 2、Git服务器和远程仓库创建2.1 搭建自己的Git服务器2.2 免费服务器2.2.1 github.com2.2.2 gitee.com2.2.3 创建远程仓…

MySQL基础知识——MySQL事务

事务背景 什么是事务&#xff1f; 一组由一个或多个数据库操作组成的操作组&#xff0c;能够原子的执行&#xff0c;且事务间相互独立&#xff1b; 简单来说&#xff0c;事务就是要保证一组数据库操作&#xff0c;要么全部成功&#xff0c;要么全部失败。 注&#xff1a;MyS…

TCGAplot在线版:输入基因,一键绘制TCGA基因表达与TMB相关性雷达图

1.TCGAplot简介 华科同济医院的王雄老师课题组利用TCGA数据库&#xff0c;开发了一个TCGA多组学数据泛癌分析和可视化R包TCGAplot[1]。用于泛癌表达以及基因表达与 TMB、MSI、TIME 和启动子甲基化之间相关性等分析。 2.TMB简介 肿瘤突变负荷&#xff08;Tumor Mutation Burd…

【LLM】认识LLM

文章目录 1.LLM1.1 LLM简介1.2 LLM发展1.3 市面常见的LLM1.4 LLM涌现的能力 2.RAG2.1 RAG简介2.2 RAG 的工作流程2.3 RAG 和 Finetune 对比2.4 RAG的使用场景分析 3. LangChain3.1 LangChain简介3.2 LangChain的核心组件3.3 LangChain 入门 4.开发 RAG 应用的整体流程5. 环境配…

线上扭蛋机小程序成为年轻人创业选择

随着大众娱乐消费观的提升&#xff0c;带给消费者神秘感和惊喜感的扭蛋机开始走红&#xff0c;成为一个拥有广阔发展空间的行业。在当下二次元文化的火热下&#xff0c;扭蛋机的受众群体也遍布到了各个年龄层&#xff0c;深受大众的喜爱。 然而&#xff0c;玩家对扭蛋机的需求…