php如何抓取网页内容(学习搜索引擎Nutch,了解一个大型分布式的搜索引擎如何工作 )

优采云 发布时间: 2022-02-25 04:19

  php如何抓取网页内容(学习搜索引擎Nutch,了解一个大型分布式的搜索引擎如何工作

)

  本文主要来源于

  基本信息

  Nutch 是一个开源 Java 搜索引擎包,它提供了构建搜索引擎所需的所有工具和功能。使用Nutch,你不仅可以搭建自己的内网搜索引擎,还可以搭建全网搜索引擎。Nutch除了基本功能外,还有很多自己的特性,如Map-Reduce、Hadoop、Plugin等。

  Nutch 是一个开源的、Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的所有工具。

  nutch 是开源的,所以任何人都可以看到他的排序算法是如何工作的。商业搜索引擎排名算法是保密的,我们无法知道为什么要计算排名结果。此外,一些搜索引擎允许PPC,例如百度,这样的索引结果与网站内容无关。所以nutch是学术搜索和政府网站搜索的不错选择,因为公平的排名结果非常重要。

  学习搜索引擎 Nutch 并了解大型分布式搜索引擎的工作原理是一件非常有益的事情。在编写 Nutch 的过程中,我从学术和工业学校借鉴了很多知识:例如 Nutch 的核心部分已经用 MapReduce 重新实现。MapReduce 是一种分布式处理模型,最早由 Google Labs 提出。而且 Nutch 也吸引了很多研究人员,他们非常愿意尝试新的搜索算法,因为 Nutch 非常容易扩展。

  Nutch 非常灵活:可以由优秀的客户定制并集成到您的应用程序中,利用 Nutch 的插件机制,Nutch 可以作为搜索平台,搜索不同的信息载体。当然,最简单的方法是将 Nutch 集成到您的网站中,为您的用户提供搜索服务

  nutch的目标

  nutch 致力于让每个人都能轻松、廉价地配置世界级的网络搜索引擎。为了实现这一雄心勃勃的目标,nutch 必须能够:

  • 每个月取几十亿网页

• 为这些网页维护一个索引

• 对索引文件进行每秒上千次的搜索

• 提供高质量的搜索结果

• 以最小的成本运作

  nutch 和 luene

  Lucene 不是完整的应用程序,而是一个用于实现全文检索的软件库。

Nutch 是一个应用程序,可以以 Lucene 为基础实现搜索引擎应用。

  Lucene 为 Nutch 提供了一个用于文本索引和搜索的 API。一个常见的问题是;我应该使用 Lucene 还是 Nutch?最简单的答案是:如果你不需要抓取数据,你应该使用 Lucene。一个常见的应用场景是:你有数据源,需要为这些数据提供一个搜索页面。在这种情况下,最好的方法是直接从数据库中获取数据并使用 LuceneAPI 对其进行索引。

  Nutch的一般结构

  Nutch 整体分为三个主要部分:爬取、索引和搜索。各部分之间的关​​系如图1所示。Web db是Nutch的初始URL集合;Fetcher是用于抓取网页的爬虫,通常称为Crawler;indexer是用来建立索引的部分,它会生成索引文件并存储在系统中。中等的; searcher 是一个查询器,用于完成对某个词的搜索并返回结果。

  

  Nutch的运行过程

  在了解了 Nutch 的整体结构之后,我们来详细了解一下 Nutch 是如何工作的?Nutch的操作流程如图2所示。

  1. 将起始 URL 集合注入到 Nutch 系统之中。

2. 生成片段文件,其中包含了将要抓取的 URL 地址。

3. 根据URL地址在互联网上抓取相应的内容。

4. 解析所抓取到的网页,并分析其中的文本和数据。

5. 根据新抓取的网页中的URL集合来更新起始URL集合,并再次进行抓取。

6. 同时,对抓取到的网页内容建立索引,生成索引文件存放在系统之中。

  

  从用户的角度来看,Nutch 提供了一个基于 Tomcat 的应用程序,允许用户输入术语,然后 Nutch 会在已经建立的索引文件中进行搜索,并将相应的结果返回给用户。

  nutch的基本原理分析

  1 螺母的基本组成

  作为一个搜索引擎,nutch 的基本组成与其他搜索引擎相同。简单来说,它包括三个部分:爬虫、索引和搜索。

  2 nutch 工作流程

  在之前的nutch体验中,我们遵循nutch的工作流程,总结如下:

  1) 建立初始URL集

2) 将URL集注入crawldb数据库---inject

3) 根据crawldb数据库创建抓取列表---generate

4) 执行抓取,获取网页信息---fetch

5) 更新数据库,把获取到的页面信息存入数据库中---updatedb

6) 重复进行3~5的步骤,直到预先设定的抓取深度。---这个循环过程被称为“产生/抓取/更新”循环

7) 根据sengments的内容更新linkdb数据库---invertlinks

8) 建立索引---index

9) 用户通过用户接口进行查询操作

10) 将用户查询转化为lucene查询

11) 返回结果

其中,1~6属于爬虫部分;7、8属于索引部分;9~11属于查询部分。 (注: 进行内部网爬行时执行的crawl操作,实质上也是执行的以上一系列操作,这一点从它的抓取日志上可以看出)

  nutch 工作流分析

  爬虫——工作策略

  它的工作策略一般可以分为累积爬取和增量爬取。

  累积爬取是指从某个时间点开始,遍历系统允许存储和处理的所有网页。在理想的软硬件环境下,经过足够的运行时间,累积爬取策略可以保证爬取相当大的网页集合。但是由于网络数据的动态性,集合中的网页被抓取的时间点不同,页面更新的时间点也不同。因此,累积爬取的网页集合实际上并不能与真实环境中的网络数据保持一致。持续的。

  与累积爬取不同,增量爬取是指在一定规模的网页集合的基础上,通过更新数据,在现有集合中选择过期的网页,以保证抓取到的网页被爬取。数据与真实网络数据足够接近。增量爬取的前提是系统已经爬取了足够多的网页,并且有这些页面被爬取的时间的信息。

  在针对实际应用环境的网络爬虫设计中,通常会同时收录累积爬取和增量爬取策略。累积爬取一般用于数据集的整体建立或*敏*感*词*更新阶段,而增量爬取主要用于数据集的日常维护和即时更新。

  爬取策略确定后,如何充分利用网络带宽,合理确定网页数据更新的时间点,成为网络蜘蛛运行策略中的核心问题。

  工作流分析

  1.创建初始 URL 集

  建立初始URL集有两种方式:超链接和站长提交

    超链接:机器人程序根据网页链到其他网页中的超链接,就像日常生活中所说的“一传十,十传百……”一样,从少数几个网页开始.连到数据库上所有到其他网页的链接。理论上,若网页上有适当的超连结,机器人便可以遍历绝大部分网页。

  站长提交:在实际运行中,爬虫不可能抓取到所有站点,为此,网站站长可以向搜索引擎进行提交,要求收录,搜索引擎经过核查之后,便将该网站加入到URL集合中,进行抓取。

  2.注入

  inject操作调用的是nutch的核心包之一crawl包中的类injector

inject操作主要作用 将URL集合进行格式化和过滤,消除其中的非法URL,并设定URL状态(UNFETCHED),按照一定方法进行初始化分值;将URL进行合并,消除重复的URL入口; 将URL及其状态、分值存入crawldb数据库,与原数据库中重复的则删除旧的,更换新的。

inject操作结果:crawldb数据库内容得到更新,包括URL及其状态。

  3.生成

  generate操作调用的是crawl包中的类generator。

generate操作主要作用 从crawldb数据库中将URL取出并进行过滤对URL进行排序,通过域名、链接数和一种hash算法综合进行降

序排列\将排列列表写入segment

  4.获取

  fetch操作调用的是fetcher包中的类fercher。

fetch操作主要作用  执行抓取,按照segment文件夹下的抓取列表进行抓取过程中,页面的URL地址可能因为链接发生改变,从而需要更新URL地址抓取采用多线程方式进行,以提高抓取速度 fetch操作过程中调用了parse操作

fetch操作结果:将页面内容抓取下来,存于segment目录下

  5.解析

  parse操作调用的是parse包中的类parsesegment。

parse操作主要作用

解析segment中由fetch得到的页面,并进行整理,将页面分成为

parse-date和parse-text

parse-date中保存的是页面的题名、作者、日期、链接等内容

parse-text中保存的是页面的文本内容

parse操作结果:将fetch得到的页面解析为text和data,存于segment

目录下

  6.更新数据库

  updatedb操作调用的是crawl包中的类crawldb

updatedb操作主要作用

根据segment目录下fetch文件夹和parse文件夹中的内容,对crawldb

进行更新,增加新的URL,更换旧的URL

updatedb操作结果:更新了crawldb数据库,为下一轮抓取做准备

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线