Nutch & Anthelion ── 基于 Apache 许可协议的开源 Java 语言爬虫 Nutch Nutch 是基于开源 Java 语言实现的搜索引擎,在 Apache 许可下发行。Nutch 提供了我们运行自己的搜索引擎所需的全部工具,包括全文搜索和 Web 爬虫。 Nutch 是基于 Lucene 的,Lucene 为 Nutch 提供文本索引和全文搜索 API。 01、若不需要抓取数据,应使用 Lucene。若有数据源,需为这些数据提供一个搜索页面。在这种情况下,最好的方式是直接从数据库中取出数据,并用 Lucene API 建立索引。 02、若没有本地数据源,或数据源非常分散,应使用 Nutch。 Nutch 创始人是 Doug Cutting,他同时也是 Lucene、Hadoop 和 Avro 开源项目的创始人。 Nutch 诞生于 2002 年 8 月,是 Apache 旗下的一个用 Java 实现的开源搜索引擎项目,自 Nutch 1.2 版之后,Nutch 已从搜索引擎演化为网络爬虫,接着 Nutch 进一步演化为两大分支版本:1.X 和 2.X。这两大分支的最大区别,在于 2.X 对底层数据的存储进行了抽象,以支持各种底层存储技术。 在 Nutch 的进化过程中,产生了 Hadoop、Tika、Gora 和 Crawler Commons 四个 Java 开源项目。如今,这 4 个项目都发展迅速,极其火爆,尤其是 Hadoop,其已成为大数据处理的事实标准。Tika 使用多种现有的开源内容解析项目,来实现从多种格式的文件中提取元数据和结构化文本。Gora 支持把大数据持久化到多种存储实现。Crawler Commons 是一个通用的网络爬虫组件。 Nutch 致力于让每个人能很容易,同时花费很少,就可配置世界一流的 Web 搜索引擎。为完成这一宏伟目标, Nutch 必须能够做到: 01、每月抓取几十亿网页 02、为这些网页维护索引 03、对索引文件进行每秒上千次的搜索 04、提供高质量的搜索结果 05、以最小的成本运作 Nutch 由爬虫 crawler 和查询 searcher 组成。Crawler 主要用于从网络上抓取网页并为这些网页建立索引。Searcher 主要利用这些索引,检索用户的查找关键词来产生查找结果。两者之间的接口为索引,所以除去索引部分,两者之间的耦合度很低。 Crawler 和 Searcher 两部分尽量分开的目的,主要是为使 2 部分可分布式配置在不同硬件平台上;譬如:将 Crawler 和 Searcher 分别放在 2 个主机上,这样可提升性能。 Crawler 工作原理: 首先 Crawler 根据 WebDB 生成一个待抓取网页的 URL 集合叫做 Fetchlist,接着下载线程 Fetcher。根据 Fetchlist 将网页抓取回来,如果下载线程有很多个,那么就生成很多个 Fetchlist,也就是一个 Fetcher 对应一个 Fetchlist。然后 Crawler 用抓取回来的网页更新 WebDB,根据更新后的 WebDB 生成新的 Fetchlist,里面是未抓取的或新发现的 URLs。下一轮抓取循环重新开始。这个循环过程可以叫做 “产生/抓取/更新” 循环。 指向同一主机的 Web 资源 URLs,通常被分配到同一 Fetchlist 中,这可防止过多的 Fetchers 对一主机,同时进行抓取造成主机负担过重。另外,Nutch 遵守 Robots Exclusion Protocol,网站可通过自定义 Robots.txt 控制 Crawler 的抓取。 01、创建一个新 WebDb (admin db -create) 02、将抓取起始 URLs 写入 WebDB 中 (inject) 03、根据 WebDB 生成 fetchlist 并写入相应的 segment (generate) 04、根据 fetchlist 中的 URL 抓取网页 (fetch) 05、根据抓取网页更新 WebDb (updatedb) 06、循环 3-5 步直至预先设定的抓取深度 07、根据 WebDB 得到的网页评分和 links 更新 segments (updatesegs) 08、对所抓取的网页进行索引 (index) 09、在索引中丢弃有重复内容的网页和重复的 URLs (dedup) 10、将 segments 中的索引进行合并生成用于检索的最终 index (merge) segment、index、web database Crawler 重点包括两方面,Crawler 的工作流程和涉及的数据文件的格式和含义。数据文件主要包括三类:web database,一系列的 segment 加上 index。三者的物理文件分别存储在爬行结果目录下的 db 目录下,webdb 子文件夹内,segments 文件夹和 index 文件夹。 01、segment 一次爬行会产生很多个 segment,每个 segment 内存储的是爬虫 Crawler 在单独一次抓取循环中抓到的网页以及这些网页的索引。Crawler 爬行时会根据 WebDB 中的 link 关系按照一定的爬行策略生成每次抓取循环所需的 fetchlist, 然后,Fetcher 通过 fetchlist 中的 URLs 抓取这些网页并索引,然后将其存入 segment。Segment 是有时限的,当这些网页被 Crawler 重新抓取后,先前抓取产生的 segment 就作废了。 在存储中,Segment 文件夹是以产生时间命名的,方便我们删除作废的 segments 以节省存储空间。 02、index Index 是 Crawler 抓取的所有网页的索引,它是通过对所有单segment 中索引进行合并处理所得。 Nutch 利用 Lucene 技术进行索引,所以,Lucene 中对索引进行操作的接口对 Nutch 中的 index 同样有效。但是需要注意的是,Lucene 中的 segment 和 Nutch 中的不同,Lucene 中的 segment 是索引 index 的一部分,但 Nutch 中的 segment 只是 WebDB 中各个部分网页的内容和索引,最后通过其生成的 index 跟这些 segment 已经毫无关系了。 03、web database Web database,也叫 WebDB,其中存储的是爬虫所抓取网页之间的链接结构信息,它只在爬虫 Crawler 工作中使用而和 Searcher 的工作没有任何关系。 WebDB 内存储了两种实体的信息:page 和 link。 Page 实体通过描述网络上一个网页的特征信息来表征一实际网页,因为,网页有很多个需要描述,WebDB 中通过网页的 URL 和网页内容的 MD5 两种索引方法对这些网页实体进行了索引。Page 实体描述的网页特征主要包括网页内的 link 数目,抓取此网页的时间等相关抓取信息,对此网页的重要度评分等。 Link 实体描述的是两个 page 实体之间的链接关系。 雅虎 2015 年 12 月 20 日宣布开源 web 爬虫工具 Anthelion,该工具可解析 HTML 页面中的结构化数据。Anthelion 是 Nutch 插件,专注于爬取语义数据。 Anthelion 使用在线学习方法来基于页面上下文预测富数据 Web 页面,从之前查看的页面提取的元数据获取反馈。 Web 爬虫曾是雅虎的核心技术,甚至超过了其他应用: Yahoo Mail、Yahoo Financel、Yahoo Messengerl、Flickr 和 Tumblr,因此,雅虎在这个领域发布开源工具显得不同寻常。此前,雅虎刚宣布将剥离一些核心业务(但不包括阿里巴巴的股份),此外雅虎首席执行官 Marissa Mayer 刚刚生下双胞胎。 2014 年上海信息知识管理会议上,雅虎曾在一篇论文中详细介绍了 Anthelion。该论文的作者指出:“雅虎的爬虫技术开创了业界先河,那就是专注于那些通过 Microdata、Microformats 或 RDFa 等 markup 语言嵌入 HTML 页面的语义数据。 Microdata 和 RDFa 是标记不同结构化数据的句法格式,他们都兼容 Schema.org 的结构化数据词汇库,而 Schema.org 是谷歌、雅虎和 Bing 搜索引擎共同支持的项目。 雅虎研究人员在论文中展示了 Anthelion 爬虫技术的部署,如何提高搜索查询的相关结果数量。Anthelion 源代码现以 Apache 开源授权协议托管到 GitHub https://github.com/yahoo/anthelion,作为 Apache Nutch 开源 web 爬虫项目的一个组件。 雅虎研究人员在 Tumblr 发博文指出,Anthelion 能定向检索特定网页,譬如:那些使用 markup 标记电影名称和演员等至少 2 种属性的网页。 |