网站首页 > 精选文章 正文
今天给大家分享一下如何使用Nutch搭建自己的搜索引擎,Nutch 是一个开源Java 实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬虫。

本指南设置了一个非集群Nutch爬虫程序,该程序通过HBase存储其数据。我们将不学习如何设置Hadoop等,只学习在一台机器上抓取和索引网站的最低要求。
使用软件
- Nutch - 爬虫(获取和解析网站)
 - HBase - Nutch的文件系统存储(基本上是Hadoop组件)
 - Gora - Nutch使用的文件系统抽象(HBase是可能的实现之一)
 - ElasticSearch - 索引/搜索引擎工具,搜索Nutch抓取到的数据
 
依赖项
- OpenJDK 7 & ant
 - Nutch 2.3 RC (必须要2.3 或以上版本,2.2版本的不适用本教程)
 - HBase 0.94.26 (HBase 0.98 版本的不可以)
 - ElasticSearch 1.4.2
 
首先需要安装上面列出的这几项 OpenJDK, ant 和 ElasticSearch (也可以通过下面的网址下载)
https://github.com/apache/nutch/archive/release-2.3.tar.gz
http://mirror.cc.columbia.edu/pub/software/apache/hbase/hbase-0.94.26/hbase-0.94.26.tar.gz
https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.4.2.deb把 Nutch 和 HBase 解压到自己定义的文件目录内,下面教程中我们使用 $NUTCH_ROOT 代表你 Nutch 软件解压后的存放目录, $HBASE_ROOT 表你 HBase 软件解压后的存放目录!

首先启动 HBase
- 编辑 $HBASE_ROOT/conf/hbase-site.xml 这个配置文件(如果没有就新建)
 
<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>file:///full/path/to/where/the/data/should/be/stored</value>
  </property>
  <property>
    <name>hbase.cluster.distributed</name>
    <value>false</value>
  </property>
</configuration>- 编辑配置文件 $HBASE_ROOT/conf/hbase-env.sh 并启用 JAVA_HOME 并将其设置为正确的路径:
 
# export JAVA_HOME=/usr/java/jdk1.6.0/
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/这一步似乎是多余的,但即使在我的shell中设置了JAVA_HOME,HBase也无法识别它。
- 启动 HBase 命令:
 
$HBASE_ROOT/bin/start-hbase.sh启动 Nutch
- 启用配置文件 $NUTCH_ROOT/ivy/ivy.xml 中的配置项。把这一行取消注释即可
 
<dependency org="org.apache.gora" name="gora-hbase" rev="0.5" conf="*->default" />- 修改另一个配置文件来启用hbase, $NUTCH_ROOT/conf/gora.properties:
 
# gora.datastore.default=org.apache.gora.mock.store.MockDataStore
gora.datastore.default=org.apache.gora.hbase.store.HBaseStore- build 一下 Nutch
 
$ cd $NUTCH_ROOT
$ ant clean
$ ant runtime第一次运行此命令会有点慢,请耐心等待! 命令完成后会创建出这个文件夹 $NUTCH_ROOT/runtime/local.
- 修改Nutch的配置文件 $NUTCH_ROOT/runtime/local/conf/nutch-site.xml:
 
<configuration>
  <property>
    <name>http.agent.name</name>
    <value>zhuangpenglong</value> <!-- this can be changed to something more sane if you like -->
  </property>
  <property>
    <name>http.robots.agents</name>
    <value>zhuangpenglong</value> <!-- this is the robot name we're looking for in robots.txt files -->
  </property>
  <property>
    <name>storage.data.store.class</name>
    <value>org.apache.gora.hbase.store.HBaseStore</value>
  </property>
  <property>
    <name>plugin.includes</name>
    <!-- do **NOT** enable the parse-html plugin, if you want proper HTML parsing. Use something like parse-tika! -->
    <value>protocol-httpclient|urlfilter-regex|parse-(text|tika|js)|index-(basic|anchor)|query-(basic|site|url)|response-(json|xml)|summary-basic|scoring-opic|urlnormalizer-(pass|regex|basic)|indexer-elastic</value>
  </property>
  <property>
    <name>db.ignore.external.links</name>
    <value>true</value> <!-- do not leave the seeded domains (optional) -->
  </property>
  <property>
    <name>elastic.host</name>
    <value>localhost</value> <!-- where is ElasticSearch listening -->
  </property>
</configuration>- 配置HBase 的数据存储位置 $NUTCH_ROOT/runtime/local/conf/hbase-site.xml:
 
<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>file:///full/path/to/where/the/data/should/be/stored</value> 
      <!-- same path as you've given for HBase above -->
  </property>
  <property>
    <name>hbase.cluster.distributed</name>
    <value>false</value>
  </property>
</configuration>以上这些设置都是为了抓取网站
设置Nutch要抓取的 种子网站
- 创建一个空目录。然后在目录里新建一个包含种子URL列表的文本文件。
 
$ mkdir seed
$ echo "https://www.zhuangpenglong.com" >> seed/urls.txt- 通过提供一个文件URL将它们注入Nutch
 
$ $NUTCH_ROOT/runtime/local/bin/nutch inject  seed/urls.txt开始执行爬虫程序
- 生成要获取的新url集。这是基于注入的url和过时的url在Nutch爬行数据库:
 
$ $NUTCH_ROOT/runtime/local/bin/nutch generate -topN 10上述命令将为 10 个 URL 创建作业批次。
- 开始获取 URL:
 
$ $NUTCH_ROOT/runtime/local/bin/nutch fetch -all- 开始获取的网页内容 :
 
$ $NUTCH_ROOT/runtime/local/bin/nutch parse -all- 最后一步:更新 Nutch 的内部数据库:
 
$ $NUTCH_ROOT/runtime/local/bin/nutch updatedb -all在第一次运行时,这只会抓取注入的 URL。 上面的过程应该定期重复以保持索引最新。

将Nutch抓取到的内容放入 ElasticSearch
很简单每一条命令搞定:
$ $NUTCH_ROOT/runtime/local/bin/nutch index -all如何使用ElasticSearch 进行搜索
可以通过 ElasticSearch 官网指定的通用方式:
$ curl -X GET "http://localhost:9200/_search?query=庄朋龙"返回结果时json格式, 可以对接任意前端页面!!!
更全面的视频教程正在录制中,大家关注我,后面更新后就能看到推荐!
猜你喜欢
- 2024-12-10 赛博朋克2077下载完进不去怎么办 无法进入游戏解决方案
 - 2024-12-10 嵌入式学习之HEX转BIN文件
 - 2024-12-10 Andriod手机电池电量完美校正教程,让电池重放光芒
 - 2024-12-10 「Excel-VBA」功能模块-操作另一个Excel文件-01-文件打开窗口
 - 2024-12-10 IMX6ULL——启动流程(与stm32对比)
 - 2024-12-10 Linux下分析bin文件的10种方法
 - 2024-12-10 推荐两款好用的16进制编辑器
 - 2024-12-10 Java JDK是什么?JDK安装目录介绍
 - 2024-12-10 C# BIN文件读取以及CRC校验(匹配STM32F103)
 - 2024-12-10 和家亲摄像头刷萤石云不完美教程
 
- 最近发表
 
- 标签列表
 - 
- 向日葵无法连接服务器 (32)
 - git.exe (33)
 - vscode更新 (34)
 - dev c (33)
 - git ignore命令 (32)
 - gitlab提交代码步骤 (37)
 - java update (36)
 - vue debug (34)
 - vue blur (32)
 - vscode导入vue项目 (33)
 - vue chart (32)
 - vue cms (32)
 - 大雅数据库 (34)
 - 技术迭代 (37)
 - 同一局域网 (33)
 - github拒绝连接 (33)
 - vscode php插件 (32)
 - vue注释快捷键 (32)
 - linux ssr (33)
 - 微端服务器 (35)
 - 导航猫 (32)
 - 获取当前时间年月日 (33)
 - stp软件 (33)
 - http下载文件 (33)
 - linux bt下载 (33)
 
 
