精华内容
参与话题
问答
  • nutch爬虫原来是这样操作的!

    千次阅读 2019-01-15 15:03:29
    一、nutch简介 nutch是大名鼎鼎的Doug Cutting发起的爬虫项目,nutch孵化了现在大数据处理框架Hadoop。在nutch V 0.8.0 版本之前,Hadoop是nutch的一部分,从nutch V0.8.0开始,HDFS和MapReduce从nutch中剥离出成为...

    一、nutch简介

    nutch是大名鼎鼎的Doug Cutting发起的爬虫项目,nutch孵化了现在大数据处理框架Hadoop。在nutch V 0.8.0 版本之前,Hadoop是nutch的一部分,从nutch V0.8.0开始,HDFS和MapReduce从nutch中剥离出成为Hadoop。v0.8.0之后,nutch就完全构建在Hadoop的基础之上了。

    Nutch是一个开源的网络爬虫,在搜索引擎中负责爬取网页,同时自动维护网页的URL信息,例如相同网页去重、网页定时更新、网页重定向。nutch采用了MapReduce分布式爬取和解析,具有良好的水平扩展性。
    现在版本的Nutch本身并不具有搜索功能(V1.2之后,nutch专注于爬取数据),但是可以自动向搜索服务器提交爬取的网页。例如,solr,可以通过Nutch自带的命令,来控制Nutch是否将网页提交给索引服务器。
    Nutch虽然是优秀的分布式爬虫框架,但是它的所有设计,都是为了搜索引擎服务的。在hadoop上用map-reduce框架开发,并不是很适合做数据抽取的业务。如果你的业务是做数据抽取(精抽取),而不是搜索引擎。不一定要选用Nutch。
    nutch现在分为两个分支。一个是1.x系列,一个是2.x系列。它们的主要区别是2.x引入了Gora作为存储抽象层,从而支持各种NoSQL数据库,如HBase,Cassandra等

    二、nutch安装

    1.nutch的运行环境
        JDK1.7及以上
        需要使用linux操作系统

    2.解压:

    设置环境变量

    验证: nutch

    3.目录结构

    bin:两个文件,一个是nutch,一个是crawl,
            crawl是对nutch中的命令进行了封装,实现了一站式调用。
            
    conf:里面保存了nutch的基本配置信息,nutch-default.xml nutch-site.xml parse-plugins.xml regex-urlfilter.txt
        
      docs:api文档
      lib:存储了nutch的依赖jar包
      plugins:存储了nutch使用的插件jar包

    三、nutch 爬虫

    nutch 爬取准备工作

    1:在nutch-site.xml中添加http.agent.name的配置。如果不配置,启动会报错。

    2:创建一个种子地址目录,urls(在nutch 目录中就可以),在目录下面创建一些种子文件,种子文件中保存种子地址。每一个种子地址占一行。http:www.zhaozhiyong.cn

       注意:种子地址必须以类似于http的字符开头

    3:(可选):控制爬取的url范围,只爬取站内,在regex-urlfilter.txt 最后添加 :+^http://([a-z0-9]*\.)*bbs.superwu.cn/[\s\S]*
      

    4:nutch爬取数据   bin/crwal urls crawl 1
        crawl urls crawl 1
        urls:表示是种子目录
        crawl:表示是爬取文件的存储位置
        1:表示是爬取的层次


    5.nucth爬取生成的目录
        在爬取的时候指定的crawl中会有下面几个目录
        crawldb:存储的是待爬取的url
            查看目录数据:nutch readdb crawl/crawldb -stats -sort
        linkdb:存储的是反链信息
            查看目录数据:nutch readlinkdb crawl/linkdb -dump links 
        segments:存储的是网站所有数据信息
            查看目录数据:nutch readseg -dump crawl/segments/20150906090648 sgedb
            
        一个segment包括以下子目录:
            crawl_generate:包含需要抓取的网址列表
            crawl_fetch:包含每个抓取页面的状态
            content:包含每个抓取页面的原始内容
            parse_text:包含每个抓取页面的解析文本
            parse_data:包含每个页面的外部链接(外链)和元数据
            crawl_parse:包含网址的外部链接地址,用于更新crawldb数据库


       

    6.查看nutch生成的数据
        nutch中的数据都是sequencefile格式的,除了使用上面的nutch命令查看之外
            还可以使用java代码读取这些文件
            参考资料<查看nutch生成的中间文件>
            注意:在使用提供的代码读取文件时,需要先使用more命令查看对应文件中存储的数据类型
                对应需要修改代码中27行中的value的类型。

     

    四、在solr中对爬取的数据建立索引

    在使用solr的之前做以下步骤:

    1):需要把nutch下的schema-solr4.xml拷贝到solr中


            命令:cp /usr/local/nutch/conf/schema-solr4.xml /usr/local/solr-4.10.4/example/solr/collection1/conf

    2):删除solr中的默认配置文件schema.xml,在把刚才拷贝过去的文件该名称
            cd /usr/local/solr-4.10.4/example/solr/collection1/conf
            rm schema.xml
            mv schema-solr4.xml schema.xml

    3):在schema.xml中添加一个字段配置
            <field name="location" type="string" stored="true" indexed="true"/>

    或者也可以动态指定,
            例子:crawl -i -D "solr.server.url=http://192.168.1.170:8983/solr" urls crawl 1

     

    1.启动solr

        cd /usr/local/solr-4.10.4/example
        java -jar start.jar

    2.

    命令:crawl -i urls crawl 1

    -i:表示会对爬取的数据建立索引,默认会在本机solr中建立索引,
            如果使用其他服务器上的solr,需要修改nutch-default中solr.server.url的值,
            建议在nutch-site.xml中进行覆盖。

    3.检验

    http://127.0.0.1:8983/solr/  可以通过query 查看到content的内容

    注意:如果把爬取层次改为2层,发先抓取的数据还是很少,那是因为在regex-urlfilter.txt中对url进行了过滤
            把url中包含?=之类的都忽略掉了。
            所以可以把这个配置直接注释掉,或者修改为其他规则。
            详细修改,参考:<regex-urlfilter解释.txt>

    五、nutch源码导入到eclipse

    先安装ant
        cd /usr/local
        tar -zxvf apache-ant-1.9.6-bin.tar.gz
        mv apache-ant-1.9.6 ant
        export ANT_HOME=/usr/local/nutch
        export PATH=$ANT_HOME/bin:$PATH
       

    nutch的源码是ant管理的,所以不能直接导入到eclipse,需要转换可以使用ant eclipse -verbose但是,nutch的依赖是使用ivy管理的,
    在执行转换的过程中会下载依赖的jar包,jar包很多,所以建议使用提供的.ivy.zip文件。
    这样在转换的时候就需要指定一下ivy jar包的存放位置,使用下面命令
    ant eclipse -Divy.default.ivy.user.dir=/usr/local/.ivy -verbose
            
    转换完成之后就可以导入到eclipse中了,但是导入之后发现源码报错,

    需要修改java buildpath->order and export ->把apache-nutch-1.10/src/bin 移动到最上面,   使用top按钮。
       

    六、nutch源码编译

    需要先把.ivy.zip包解压到/usr/local目录下面

    解压unzip .ivy.zip(在Linux 下)
        如果提示没有unzip命令,则使用yum install -y unzip

    下载nutch源码,解压,重命名

    cd /usr/local
        tar -zxvf apache-nutch-1.10-src.tar.gz 
        mv apache-nutch-1.10 nutch_src
        cd nutch_src
        ant -Divy.default.ivy.user.dir=/usr/local/.ivy –verbose

    注意:在编译源码之前,需要修改nutch_src/conf/nutch-site.xml,
            在里面添加http.agent.name属性
            <property>
              <name>http.agent.name</name>
              <value>my nutch spider</value>
            </property>

     

    七:nutch运行的两种方式


          

    在nutch官网下载的nutch的bin压缩包,只支持在使用本地模式运行nutch
        想要使用集群模式的话需要使用编译后的源码中的脚本

    cd /usr/local/nutch_src/runtime/deploy
        bin/crawl /urls /crawl 1

    注意:在使用这种方式的时候要保证nutch所在的节点上面配置的有HADOOP_HOME
            环境变量,因为nutch在向集群中提交任务的时候会根据这个环境变量对应
            的目录下面的配置文件找集群的地址。
            /urls 表示是hdfs上面的文件,里面必须要有一个种子文件

    1:nutch的采集流程
        inject:表示注入url
        generagete:生成爬取列表
        fetch:爬取url
        parse:解析url
        updatedb:更新crawldb数据库
        
        一般情况下,inject只会执行一次,generate、fetch、parse、updatedb这四步是一个循环。
        

    需要nutch的视频资料可以扫描下方微信二维码:

    展开全文
  • nutch入门

    2018-01-03 20:36:22
    环境nutch官网 http://nutch.apache.org/ linux系统 CentOS 7.3 64位 ... apache-nutch-1.14-src.tar.gzyum search jdk | grep java yum install java-1.8.0-openjdk vi /etc/profile#set java environment JAV

    环境

    nutch官网 http://nutch.apache.org/
    linux系统 CentOS 7.3 64位
    jdk1.8
    apache-nutch-2.2.1-src.tar.gz
    mysql

    jdk配置

    yum search jdk | grep java
    yum install java-1.8.0-openjdk
    vi /etc/profile

    添加内容

    #set java environment
    JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-5.b12.el7_4.x86_64
    JRE_HOME=$JAVA_HOME/jre
    CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
    PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
    export JAVA_HOME JRE_HOME CLASS_PATH PATH

    ant 安装

    yum install ant

    nutch构建

    wget http://archive.apache.org/dist/nutch/2.2.1/apache-nutch-2.2.1-src.tar.gz
    tar -xvf apache-nutch-2.2.1-src.tar.gz
    cd apache-nutch-2.2.1/
    ant

    ivysettings.xml maven仓库更改

    http://maven.aliyun.com/nexus/content/groups/public/

    生成 runtime文件夹,其下有delopy local两个文件夹

    deploy对hadoop有依赖,hdfs进行存储,而mapreduce进行分析,辅以其他的功能。 local没有依赖。

    配置nutch对mysql的支持,修改${APACHE_NUTCH_HOME}/ivy/ivy.xml文件,分别:

    --找到以下行取消注释
    <dependency org="mysql" name="mysql-connector-java" rev="5.1.18" conf="*->default"/>
    <dependency org="org.apache.gora" name="gora-sql" rev="0.1.1-incubating" conf="*->default" />

    数据库连接配置

    编辑${NUTCH_HOME}/conf/gora.properties文件

    ###############################
    # MySQL properties           
    ###############################
    gora.sqlstore.jdbc.driver=com.mysql.jdbc.Driver
    gora.sqlstore.jdbc.url=jdbc:mysql://192.168.58.1:3306/nutch?createDatabaseIfNotExist=true
    gora.sqlstore.jdbc.user=root
    gora.sqlstore.jdbc.password=123456

    修改nutch-site配置文件

     vim nutch-site.xml 
    <property>
    <name>http.agent.name</name>
    <value>LiuXun Nutch Spider</value>
    </property>
    
    <property>
    <name>http.accept.language</name>
    <value>ja-jp, en-us,en-gb,en;q=0.7,*;q=0.3</value>
    <description>Value of the “Accept-Language” request header field.
    This allows selecting non-English language as default one to retrieve.
    It is a useful setting for search engines build for certain national group.
    </description>
    </property>
    
    <property>
    <name>parser.character.encoding.default</name>
    <value>utf-8</value>
    <description>The character encoding to fall back to when no other information
    is available</description>
    </property>
    
    <property>
    <name>storage.data.store.class</name>
    <value>org.apache.gora.sql.store.SqlStore</value>
    <description>The Gora DataStore class for storing and retrieving data.
    Currently the following stores are available: ….
    </description>
    
    </property>
    //特别添加
    <property>
        <name>generate.batch.id</name>
        <value>*</value>
    </property>

    然后命令行执行:

    ant clear

    再执行

    ant runtime

    开始爬取

    mkdir  urls
    vim url.txt    ------写入需要爬的网站

    输入命令

    bin/nutch crawl urls -depth 3 -topN 5
    展开全文
  • Nutch2.3.1 环境搭建

    2018-04-11 13:11:50
    Nutch2.3.1 环境搭建 Nutch2.3.1 环境搭建 Nutch2.3.1 环境搭建 亲测可用,我自己安装和搭建过程的记录文档
  • Nutch 深入浅出

    万次阅读 2017-11-06 19:09:53
    首先了解一下什么是Nutch。  Nutch是一个开源Java实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬虫。 Nutch的组成:  爬虫crawler和查询searcher。Crawler主要用于从网络...
    首先了解一下什么是Nutch。

        Nutch是一个开源Java实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬虫。


    Nutch的组成:
        爬虫crawler和查询searcher。Crawler主要用于从网络上抓取网页并为这些网页建立索引。Searcher主要利用这些索引检索用户的查找关键词来产生查找结果。两者之间的接口是索引,所以除去索引部分,两者之间的耦合度很低。

        Crawler和Searcher两部分尽量分开的目的主要是为了使两部分可以分布式配置在硬件平台上,例如将Crawler和Searcher分别放在两个主机上,这样可以提升性能


    Nutch的目标:

    Nutch 致力于让每个人能很容易,同时花费很少就可以配置世界一流的Web搜索引擎。为了完成这个宏伟的目标,nutch必须能够做到:
    • 每个月取几十亿网页
    • 为这些网页维护一个索引
    • 对搜引文件进行每秒上千次的搜索
    • 提供高质量的搜索结果
    • 以最小的成本运作

    这将是一个巨大的挑战


    Nutch的安装:

    首先获取nutch2.3

    wget https://archive.apache.org/dist/nutch/2.3/apache-nutch-2.3-src.tar.gz

    解压nutch 2.3

    tar -zxvf apache-nutch-2.3-src.tar.gz

    重名字nutch

    mv apache-nutch-2.3 nutch


     nutch的配置:

    第一步:进入conf/nutch-site.xml

    <!-- 指定gora 后端 ,指定存储位置为Hbase-->
    <property>
         <name>storage.data.store.class</name>
         <value>org.apache.gora.hbase.store.HBaseStore</value>
         <description>Default class for storing data</description>
    </property> 
    
    <!-- 指定nutch插件 -->
    <property>
          <name>plugin.includes</name> 
    <value>protocol-httpclient|urlfilter-regex|index-(basic|more)|
    query-(basic|site|url|lang)|indexer-solr|nutch-extensionpoints|
    protocol-httpclient|urlfilter-regex|parse-(text|html|msexcel|msword
    |mspowerpoint|pdf)|summary-basic|scoring-opic|urlnormalizer-(pass
    |regex|basic)protocol-http|urlfilter-regex|parse-(html|tika|metatags)
    |index-(basic|anchor|more|metadata)</value>
    </property>
    
    第二步:进入ivy/ivy.xml
    <!--取消这个批注,使用hbase做为gora的后端 -->
    <dependency org="org.apache.gora" name="gora-hbase" 
       rev="0.5" conf="*->default" />
    
    第三步:进入 conf/gora.properties增加如下一行
    <--将HbaseStore设为默认的存储 -->
    gora.datastore.default=org.apache.gora.hbase.store.HBaseStore
    

    第四步:进入nutch 的目录下

    监测ant的版本输入ant –version

    输入ant runtime 命令

    这个命令将构建你的apache nutch,在nutch的家目录下面将创建相应的目录(runtime)。这个步骤是必须的,因为nutch2.3仅仅作为源码进行了发布。所有的目录里面最重要的是runtime,包含了所有需要爬行的脚本

    ant之后:

    第五步:进入runtime/local/conf中,打开nutch-site,加入Http代理的名字。

    <property>
       <name>http.agent.name</name>
       <value>My Nutch Spider</value>
    </property>
    <!--同时指定gora后端,以及指定插件。
    <property>
          <name>storage.data.store.class</name>
           <value>org.apache.gora.hbase.store.HBaseStore</value>
            <description>Default class for storing data</description>
    </property>
    
    <!-- 指定nutch插件 -->
    <property>
          <name>plugin.includes</name> <value>protocol-httpclient|urlfilter-regex|index-(basic|more)|query-(basic|site|url|lang)|indexer-solr|nutch-extensionpoints|protocol-httpclient|urlfilter-regex|parse-(text|html|msexcel|msword|mspowerpoint|pdf)|summary-basic|scoring-opic|urlnormalizer-(pass|regex|basic)protocol-http|urlfilter-regex|parse-(html|tika|metatags)|index-(basic|anchor|more|metadata)</value>
    </property>
    
    第六步:

    在 runtime/local目录下,创建一个urls目录。
    mkdir urls
    进入urls目录
    vi seed.txt
    在seed.txt中加入需要抓取的网址。
    第七步:

    测试:前提是在你的本机上已经安装好了Solr

    bin/crawl <seedDir> <crawlID> <solrURL><numberOfRounds>

    bin/crawl urls/seed.txt alan http://192.168.14.151:8983/solr/  2 


    Nutch抓取过程:


    1) 建立初始 URL 集 
    2) 将 URL 集注入 crawldb 数据库---inject 

    crawldb中存放的是url地址,第一次根据所给url::http://blog.csdn.net/shuaigexiaobo/进行注入,然后updatecrawldb 保存第一次抓取的url地址,下一次即depth=2的时候就会从crawldb中获取新的url地址集,进行新一轮的抓取。

    crawldb中有两个文件夹:current 和old. current就是当前url地址集,old是上一次的一个备份。每一次生成新的,都会把原来的改为old。


    3) 根据 crawldb 数据库创建抓取列表---generate 
    4) 执行抓取,获取网页信息---fetch

    5) 解析抓取的内容---parse segment  
    6) 更新数据库,把获取到的页面信息存入数据库中---updatedb 
    7) 重复进行 3~5 的步骤,直到预先设定的抓取深度。

         ---这个循环过程被称为“产生/抓取/更新”循环 
    8) 根据 sengments 的内容更新 linkdb 数据库---invertlinks 

    可以看到,一个segment包括以下子目录(多是二进制格式):

    content:包含每个抓取页面的内容

    crawl_fetch:包含每个抓取页面的状态 
    crawl_generate:包含所抓取的网址列表 
    crawl_parse:包含网址的外部链接地址,用于更新crawldb数据库 
    parse_data:包含每个页面的外部链接和元数据 
    parse_text:包含每个抓取页面的解析文本

     

    每个文件的生成时间

    1.crawl_generate在Generator的时候生成; 
    2.content,crawl_fetch在Fetcher的时候生成; 
    3.crawl_parse,parse_data,parse_text在Parse segment的时候生成。

     

    linkdb: 链接数据库,用来存储每个网址的链接地址,包括源地址和链接地址。


    9) 建立索引---index

    感谢:http://www.cnblogs.com/huligong1234/p/3515214.html


    Nutch的 过滤

    在Nutch的conf目录中有automaton-urlfilter.txt、regex-urlfilter.txt、suffix-urlfilter.txt、prefix-urlfilter.txt、domain-urlfilter.txt几个文件用于实现过滤抓取数据,比如不抓取后缀为gif、exe的文件等,通过修改其中的值可以达到只抓取感兴趣的内容的目的,在一定程度上也有助于提高抓取速度。

    在抓取过程中,这几个文件不是都起作用的,默认情况下只有regex-urlfilter.txt会达到过滤目的,这一点可以从Nutch-default.xml确认。在进行过滤规则的修改之前,先说明Nutch的过滤器原理。在Nutch中,过滤器是通过插件的方式实现的,插件在nutch-default.xml中定义,具体如下:

    <!-- pluginproperties -->

    <property>

      <name>plugin.folders</name>

      <value>plugins</value>

    </property>

    <property>

     <name>plugin.auto-activation</name>

      <value>true</value>

    </property>

    <property>

      <name>plugin.includes</name>

     <value>protocol-http|urlfilter-regex|parse-(html|tika)|index-(basic|anchor)|urlnormalizer-(pass|regex|basic)|scoring-opic</value>

    </property>

    <property>

      <name>plugin.excludes</name>

      <value></value>

    </property>

    其中plugin.folders定义了插件放置的位置,该值可以为绝对路径或者相对路径,若为相对路径则会在classpath中搜索,默认值为plugins,编译后的Nutch,会包含该文件夹。plugin.includes以正则表达式的方式定义了哪些插件将被包含在Nutch中,可以根据属性值查看plugins中的目录来确定默认值,比如urlfilter-regex,则说明默认情况下,过滤器插件使用的是urlfilter-regex,也即regex-urlfilter.txt文件。plugin.excludes属性以正则表达式的方式定义了哪些插件将被排除在Nutch之外定义了。

    在了解了插件的定义后,具体看看过滤器分几种以及如何定义的。过滤器在nutch-default.xml中的定义如下:

    <!-- urlfilterplugin properties -->

    <property>

      <name>urlfilter.domain.file</name>

     <value>domain-urlfilter.txt</value>

    </property>

    <property>

      <name>urlfilter.regex.file</name>

     <value>regex-urlfilter.txt</value>

    </property>

    <property>

     <name>urlfilter.automaton.file</name>

     <value>automaton-urlfilter.txt</value>

    </property>

    <property>

     <name>urlfilter.prefix.file</name>

     <value>prefix-urlfilter.txt</value>

    </property>

    <property>

     <name>urlfilter.suffix.file</name>

     <value>suffix-urlfilter.txt</value>

    </property>

    <property>

      <name>urlfilter.order</name>

      <value></value>

    </property>

    通过上面的代码可知,过滤器可以分为5种,分别为:DomainURLFilter、RegexURLFilter、AutomatonURLFilter 、PrefixURLFilter、SuffixURLFilter,这5中过滤器的配置过滤规则的文件分别为:domain-urlfilter.txt、regex-urlfilter.txt、automaton-urlfilter.txt、prefix-urlfilter.txt、suffix-urlfilter.txt。属性urlfilter.order则定义了过滤器的应用顺序,所有过滤器都是与的关系。

    了解了Nutch中是如何定义过滤器之后,再来看看具体的过滤规则文件,以regex-urlfilter.txt(默认情况下即按照该文件中的规则抓取数据)为例。该文件中定义的规则如下:

    # skip file: ftp:and mailto: urls

    -^(file|ftp|mailto):

     

    # skip image andother suffixes we can't yet parse

    # for a moreextensive coverage use the urlfilter-suffix plugin

    -\.(gif|GIF|jpg|JPG|png|PNG|ico|ICO|css|CSS|sit|SIT|eps|EPS|wmf|WMF|zip|ZIP|ppt|PPT|mpg|MPG|xls|XLS|gz|GZ|rpm|RPM|tgz|TGZ|mov|MOV|exe|EXE|jpeg|JPEG|bmp|BMP|js|JS)$

     

    # skip URLscontaining certain characters as probable queries, etc.

    -[?*!@=]

     

    # skip URLs withslash-delimited segment that repeats 3+ times, to break loops

    -.*(/[^/]+)/[^/]+\1/[^/]+\1/

     

    # accept anythingelse

    +.

     

    其中#表示注释内容,-表示忽略,+表示包含。若待抓取的url匹配该文件中的一个模式,则根据该模式前面的加号或者减号来判断该url是否抓取或者忽略,若url跟该文件中定义的规则都不匹配,则忽略该url。

    感谢:http://blog.csdn.net/skywalker_only/article/details/17562543


    Nutch 性能优化

    读Nutch-site.xml

    在nutch-site.xml中:

    <name>fetcher.threads.fetch</name>

    <value>10</value>

    最大抓取线程数量

    <name>fetcher.threads.per.queue</name>  

    <value>1</value>

    同一时刻抓取网站的最大线程数量

    配置这两个参数,扩大10至50倍,可以极大的加大抓取的性能。


    更多关于Nutch-default.xml内容:参考 http://blog.csdn.net/xxx0624_/article/details/45703525

    更多关于Nucth-site.xml文件,请 参考:http://www.cnblogs.com/zhjsll/p/4704371.html











    展开全文
  • Nutch 是一个开源Java实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬虫。
    Nutch 是一个开源Java实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。包括全文搜索和Web爬虫

    简介

    编辑
    Nutch 是一个开源Java 实现的搜索引擎。它提供了我们运行自己
    的搜索引擎所需的全部工具。包括全文搜索和Web爬虫。
    尽管Web搜索是漫游Internet的基本要求, 但是现有web搜索引擎的数目却在下降. 并且这很有可能进一步演变成为一个公司垄断了几乎所有的web搜索为其谋取商业利益.这显然 不利于广大Internet用户.
    Nutch为我们提供了这样一个不同的选择. 相对于那些商用的搜索引擎, Nutch作为开放源代码 搜索引擎将会更加透明, 从而更值得大家信赖. 现在所有主要的搜索引擎都采用私有的排序算法, 而不会解释为什么一个网页会排在一个特定的位置. 除此之外, 有的搜索引擎依照网站所付的 费用, 而不是根据它们本身的价值进行排序. 与它们不同, Nutch没有什么需要隐瞒, 也没有 动机去扭曲搜索的结果. Nutch将尽自己最大的努力为用户提供最好的搜索结果.
    Nutch目前最新的版本为version v2.3。[1] 

    目标

    编辑
    Nutch 致力于让每个人能很容易, 同时花费很少就可以配置世界一流的Web搜索引擎. 为了完成这一宏伟的目标, Nutch必须能够做到:
    * 每个月取几十亿网页
    * 为这些网页维护一个索引
    * 对索引文件进行每秒上千次的搜索
    * 提供高质量的搜索结果
    组成
    爬虫crawler和查询searcher。Crawler主要用于从网络上抓取网页并为这些网页建立索引。Searcher主要利用这些索引检索用户的查找关键词来产生查找结果。两者之间的接口是索引,所以除去索引部分,两者之间的耦合度很低。
    Crawler和Searcher两部分尽量分开的目的主要是为了使两部分可以分布式配置在硬件平台上,例如将Crawler和Searcher分别放在两个主机上,这样可以提升性能。

    爬虫

    编辑
    Crawler的重点在两个方面,Crawler的工作流程和涉及的数据文件的格式和含义。数据文件主要包括三类,分别是web database,一系列的segment加上index,三者的物理文件分别存储在爬行结果目录下的db目录下webdb子文件夹内,segments文件夹和index文件夹。那么三者分别存储的信息是什么呢?
    一次爬行会产生很多个segment,每个segment内存储的是爬虫Crawler在单独一次抓取循环中抓到的网页以及这些网页的索引。Crawler爬行时会根据WebDB中的link关系按照一定的爬行策略生成每次抓取循环所需的fetchlist,然后Fetcher通过fetchlist中的URLs抓取这些网页并索引,然后将其存入segment。Segment是有时限的,当这些网页被Crawler重新抓取后,先前抓取产生的segment就作废了。在存储中。Segment文件夹是以产生时间命名的,方便我们删除作废的segments以节省存储空间。
    Index是Crawler抓取的所有网页的索引,它是通过对所有单个segment中的索引进行合并处理所得的。Nutch利用Lucene技术进行索引,所以Lucene中对索引进行操作的接口对Nutch中的index同样有效。但是需要注意的是,Lucene中的segment和Nutch中的不同,Lucene中的segment是索引index的一部分,但是Nutch中的segment只是WebDB中各个部分网页的内容和索引,最后通过其生成的index跟这些segment已经毫无关系了。
    Web database,也叫WebDB,其中存储的是爬虫所抓取网页之间的链接结构信息,它只在爬虫Crawler工作中使用而和Searcher的工作没有任何关系。WebDB内存储了两种实体的信息:page和link。Page实体通过描述网络上一个网页的特征信息来表征一个实际的网页,因为网页有很多个需要描述,WebDB中通过网页的URL和网页内容的MD5两种索引方法对这些网页实体进行了索引。Page实体描述的网页特征主要包括网页内的link数目,抓取此网页的时间等相关抓取信息,对此网页的重要度评分等。同样的,Link实体描述的是两个page实体之间的链接关系。WebDB构成了一个所抓取网页的链接结构图,这个图中Page实体是图的结点,而Link实体则代表图的边。

    工作流程

    编辑
    在创建一个WebDB之后(步骤1), “产生/抓取/更新”循环(步骤3-6)根据一些种子URLs开始启动。当这个循环彻底结束,Crawler根据抓取中生成的segments创建索引(步骤7-10)。在进行重复URLs清除(步骤9)之前,每个segment的索引都是独立的(步骤8)。最终,各个独立的segment索引被合并为一个最终的索引index(步骤10)。
    其中有一个细节问题,Dedup操作主要用于清除segment索引中的重复URLs,但是我们知道,在WebDB中是不允许重复的URL存在的,那么为什么这里还要进行清除呢?原因在于抓取的更新。比方说一个月之前你抓取过这些网页,一个月后为了更新进行了重新抓取,那么旧的segment在没有删除之前仍然起作用,这个时候就需要在新旧segment之间进行除重。
    Nutch和Lucene
    Nutch是基于Lucene的。Lucene为Nutch提供了文本索引和搜索的API。
    一个常见的问题是:我应该使用Lucene还是Nutch?
    最简单的回答是:如果你不需要抓取数据的话,应该使用Lucene。
    常见的应用场合是:你有数据源,需要为这些数据提供一个搜索页面。在这种情况下,最好的方式是直接从数据库中取出数据并用Lucene API 建立索引。
    在你没有本地数据源,或者数据源非常分散的情况下,应该使用Nutch。
    在分析了Crawler工作中设计的文件之后,接下来我们研究Crawler的抓取流程以及这些文件在抓取中扮演的角色。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的抓取。
    在Nutch中,Crawler操作的实现是通过一系列子操作的实现来完成的。这些子操作Nutch都提供了子命令行可以单独进行调用。下面就是这些子操作的功能描述以及命令行,命令行在括号中。
    1. 创建一个新的WebDb (admin db -create).
    2. 将抓取起始URLs写入WebDB中 (inject).
    3. 根据WebDB生成fetchlist并写入相应的segment(generate).
    4. 根据fetchlist中的URL抓取网页 (fetch).
    5. 根据抓取网页更新WebDb (updatedb).
    6. 循环进行3-5步直至预先设定的抓取深度。
    7. 根据WebDB得到的网页评分和links更新segments (updatesegs).
    8. 对所抓取的网页进行索引(index).
    9. 在索引中丢弃有重复内容的网页和重复的URLs (dedup).
    10. 将segments中的索引进行合并生成用于检索的最终index(merge).

    展开全文
  • Nutch简介

    2017-05-03 16:45:09
    Nutch是基于Java的开源搜索引擎。 Nutch有如下优点:简单,支持分布式爬虫。 Nutch爬虫的设计着重两个方面: 存储过程 爬虫过程 Nutch存储主要使用数据文件,数据文件有三类: Web database,也叫WebDB,仅在爬虫...
  • 大数据5天实训 命令提示符$表示普通用户,#表示root用户 搭建环境 选择Install 选择Next 选择语言English(English),选择Next 选择键盘U.S.English,选择Next ...选择时区Asia/...
  • Nutch简介(转2)

    2019-05-16 09:29:51
  • Nutch读取网页字段

    千次阅读 2013-12-14 14:10:33
    一、Nutch的一些读取命令 1.查看crawldb数据库 查看url地址总数和它的...查看每个url地址的详细内容,导出数据:bin/nutch readdb url/crawldb/ -dump crawldb(导出的地址) 查看具体的url,以163为例:bin/nu
  • 个人简介/主要荣誉:除了 Lucene,还开发了著名的网络爬虫工具 Nutch,分布式系统基础架构Hadoop,这些大师级作品都是开源的。目前任职 Apache 软件基金会主席。 网络上对 Doug Cutting 的评价:“他开发出卓越超群...
  • 初探网络爬虫Nutch

    2014-04-18 17:08:00
    为什么80%的码农都做不了架构师?>>> ...
  • Nutch抓取数据分析

    2012-03-27 10:30:22
    以为搜索索引可以作为数据挖掘的输入信息,后面才发现错了,由solr/nutch/lucene形成的只是搜索索引,只要由用户提供查询关键字,然后就可以查到该关键字来自哪一篇文档,并不是一篇文档的文字列表信息,而挖掘是...
  • 读取Nutch爬取的网页内容

    千次阅读 2009-05-25 15:53:00
    进入nutch的安装目录,运行命令: bin/nutch readseg -dump db/segments/20090525140014 segdb -nocontent -nofetch -nogenerate -noparse -noparsedata db/segments/20090525140014为一个segments文件夹,segdb为...
  • Nutch抓取数据内容的详解

    千次阅读 2013-04-30 21:19:45
    之前以sina和csdn的blog为seed进行抓取,都出现Stopping at depth=1 - no more URLs to fetch. 所以最终以http://www.tianya.cn/blog/...命令:$ bin/nutch crawl tianya -dir crawl_tianya -depth 3 -topN 10(存放s
  • 上能看到Nutch做的越来越好了,最后更新版本是 v1.9 于 2014年8月16日发布,可见该框架的活跃度和开发受欢迎度还是很大的。 废话不多说,主要特点高扩展性和高伸缩性,主要可以看到,它能和哪些东东一起使用吧。...
  • Nutch

    千次阅读 2010-12-06 22:47:00
    nutch0.8.0开始,Nutch 完全构建 Hadoop 分布式计算平台之上。Hadoop 除了是一个分布式文件系统外,还实现了 Google 的 GFS 和 MapReduce 算法。因此基于 Hadoop 的 Nutch 搜索引擎可以部署由成千上万计算机...
  • nutch

    2019-03-22 02:34:59
    NULL 博文链接:https://hf2623.iteye.com/blog/996298
  • Nutch-2.2.1学习之五Nutch抓取数据在HBase的存储

    万次阅读 热门讨论 2013-12-12 20:26:12
    Nutch-2.2.1爬取的数据可以存储HBase、Accumulo、Cassandra、MySQL、DataFileAvroStore、AvroStor,这是与Nutch-1.x系列很大的区别,提供多样性的同时也增加了一些复杂性,比如使用不同存储时的不同配置,对...
  • Nutch教程中文翻译1(官方教程,中英对照)——Nutch的编译、安装和简单运行
  • 33 value="http://repo1.maven.org/maven2/" 34 override="false"/> 使用本教程之前,需要满足条件: 1)有一台Linux或Linux虚拟机 2)安装JDK(推荐1.7) 3)安装Apache Ant 下载Nutch源码: 推荐使用
  • Apache Nutch

    千次阅读 2014-12-11 10:48:43
    Nutch 当前两个版本 : ...2.1 - 通过gora对存储层进行了扩展,可以选择使用HBase、Accumulo、Cassandra 、MySQL 、DataFileAvroStore、AvroStore任何一种来存储数据,但其中一些并不成熟。 Linu
  • Windows下配置nutch

    千次阅读 热门讨论 2016-11-14 13:50:22
    Windows下配置nutch轻松拥有自己的小引擎(表示弄了一上午了) 因为课程需要所以用到nutch,但是看了网上的攻略都不适用,各种bug,所以自己总结了一下经验 1、Nutch简介(建议看一下NutchNutch 是一个开源...
  • nutch和solr做爬虫

    千次阅读 2016-08-31 11:32:24
    1.1nutch和solr Nutch是一个开源的、Java实现的搜索引擎。它提供了我们运行自己的搜索引擎所需的全部工具。 Solr拥有像 web-services API的独立的企业级搜索服务器。用 XML通过 HTTP向它添加文档(称为做...
  • Nutch2.3的crawl和Nutch命令初探

    千次阅读 2015-03-10 17:26:06
    一,环境信息 硬件:虚拟机 操作系统:Centos 6.4 64位 ...NutchNutch2.3,安装路径:/root/nutch/apache-nutch-2.3 Hbase:Hbase0.94.14,安装路径:/root/hadoop/hbase-0.94.14 Solr:solr-4.
  • 此将nutch1.x的wiki教程此翻译,加深自学印象。事实上wiki文档也不是很规范,上面的遗漏的地方比较多,本文经过实际验证通过,保证能够使用。 另外吐槽一下:wiki上面的1.x的nutch教程错误百出,我曹了。这也叫...
  • Nutch1.2 添加IKAnalyzer中文分词

    千次阅读 2011-06-02 17:24:00
    原版nutch中对中文的处理是按字划分,而不是按词划分,我们可以为其添加一些中文分词插件,例如IKAnalyzer。参看了网上很多教程,最后也没能成功,最后综合了几个教程的内容,最终成功。首先作以下几点说明,以方便...
  • Nutch2.3.1 新闻分类爬虫

    千次阅读 2016-03-23 16:21:06
    分布式环境配置 solr 4.10.3配置 hadoop2.5.2安装部署 Nutch2.3.1 新闻分类 主题爬虫 新闻爬虫
  • 走进 Apache Nutch (v1.14)

    千次阅读 2018-08-16 09:55:34
    Apache Nutch Apache Nutch 起源于 Apache Lucene 项目...出于底层数据存储多样性的设计,目前该项目两个代码分支上持续开发,分别是:  ● Nutch 1.x :成熟的产品级 web 爬虫,这个分支通过精细的优化配制,...

空空如也

1 2 3 4 5 ... 20
收藏数 13,622
精华内容 5,448
关键字:

nutch