`

nutch累积式抓取

阅读更多
 

最近在网上查了好多关于nutch增量式抓取的脚本,但是我觉得和nutch文档中所定义的增量式抓取有出入。应该算是累积式抓取。

好了,首先说一下 背景 :前一段时间搭建好nutch环境后,接下来的工作就是在怎么样 在服务器上进行累积式抓取,即在本地建立大型的索引数据库(有些问章提到分布式数据库,我不太明白)。那么毫无疑问,肯定是要用到nutch的底层命令, 如:generate fetch updatedb 等。可是,如果要人工来做的话,很费时间也很费事,那么想到的办法就是写 脚本 ,通过脚本来建立、维护、更新数据库。

前提 :要保证有大量的URL数据,可以到DMOZ 获取URL数据包(这个包蛮大的,将近300M content.rdf.u8.gz ),然后使用

bin/nutch org.apache.nutch.tools.DmozParser content.example.txt > dmoz/urls

 Nutch自带的工具专门解析Dmoz包的。

接下来就可以使用Inject 命令,将一批url注射到crawldb 数据库中

bin/nutch inject localweb/crawldb dmoz

脚本部分 :思路-----1.generate

                               2.fetch

                                3.updatedb

                                 4.循环1、2、3 通过depths来控制

                                5.整合segments,并删除老的segment ----mergesegs

                                6.invetlinks----产生linkdb数据

                                7.index--------生成索引(这里需要注意一个问题,下面会说)

                                 8.dedup-------优化索引

                                 9.merge---------看名字是整合索引的意思吧,但目前不太明白

好了脚本的思路就是这样,但要注意第七步

:bin/nutch index <index> <crawldb> <linkdb> <segment>

      这里的index目录在使用该命令前应该是不存在的,那么若果是第二次运行这个脚本,index目录肯定存在,这时候怎么办?我的方法是,使用 mv --verbose localweb/index localweb/indexOLD 这样做,不但把index目录删除了,还做了备份。可是又有问题了,如果这个时候TOMCAT是开启的,那么就不能用了,因为TOMCAT线程在保护 index文件,所以我们可以调用TOMCAT的shutdown命令。等处理完毕后,在调用startup命令。

所需变量及解释 :crawldb_dir 、 segments_dir 、linkdb_dir 、index_dir 、TOMCAT_HOME

         depth-----控制循环次数,threads、topN-----根据url得分,爬行排在前多少位以内的url

        adddays----我目前的理解是:nutch自定义url失效时间为30天,在这里可以自己设置失效时间吧

 

以下是nutch官方给出的脚本

# runbot script to run the Nutch bot for crawling and re-crawling.
# Usage: bin/runbot [safe]
#        If executed in 'safe' mode, it doesn't delete the temporary
#        directories generated during crawl. This might be helpful for
#        analysis and recovery in case a crawl fails.
#
# Author: Susam Pal

depth=2
threads=5
adddays=5
topN=15 #Comment this statement if you don't want to set topN value

# Arguments for rm and mv
RMARGS="-rf"
MVARGS="--verbose"

# Parse arguments
if [ "$1" == "safe" ]
then
  safe=yes
fi

if [ -z "$NUTCH_HOME" ]
then
  NUTCH_HOME=.
  echo runbot: $0 could not find environment variable NUTCH_HOME
  echo runbot: NUTCH_HOME=$NUTCH_HOME has been set by the script 
else
  echo runbot: $0 found environment variable NUTCH_HOME=$NUTCH_HOME 
fi

if [ -z "$CATALINA_HOME" ]
then
  CATALINA_HOME=/opt/apache-tomcat-6.0.10
  echo runbot: $0 could not find environment variable NUTCH_HOME
  echo runbot: CATALINA_HOME=$CATALINA_HOME has been set by the script 
else
  echo runbot: $0 found environment variable CATALINA_HOME=$CATALINA_HOME 
fi

if [ -n "$topN" ]
then
  topN="-topN $topN"
else
  topN=""
fi

steps=8
echo "----- Inject (Step 1 of $steps) -----"
$NUTCH_HOME/bin/nutch inject crawl/crawldb urls

echo "----- Generate, Fetch, Parse, Update (Step 2 of $steps) -----"
for((i=0; i < $depth; i++))
do
  echo "--- Beginning crawl at depth `expr $i + 1` of $depth ---"
  $NUTCH_HOME/bin/nutch generate crawl/crawldb crawl/segments $topN \
      -adddays $adddays
  if [ $? -ne 0 ]
  then
    echo "runbot: Stopping at depth $depth. No more URLs to fetch."
    break
  fi
  segment=`ls -d crawl/segments/* | tail -1`

  $NUTCH_HOME/bin/nutch fetch $segment -threads $threads
  if [ $? -ne 0 ]
  then
    echo "runbot: fetch $segment at depth `expr $i + 1` failed."
    echo "runbot: Deleting segment $segment."
    rm $RMARGS $segment
    continue
  fi

  $NUTCH_HOME/bin/nutch updatedb crawl/crawldb $segment
done

echo "----- Merge Segments (Step 3 of $steps) -----"
$NUTCH_HOME/bin/nutch mergesegs crawl/MERGEDsegments crawl/segments/*
if [ "$safe" != "yes" ]
then
  rm $RMARGS crawl/segments
else
  rm $RMARGS crawl/BACKUPsegments
  mv $MVARGS crawl/segments crawl/BACKUPsegments
fi

mv $MVARGS crawl/MERGEDsegments crawl/segments

echo "----- Invert Links (Step 4 of $steps) -----"
$NUTCH_HOME/bin/nutch invertlinks crawl/linkdb crawl/segments/*

echo "----- Index (Step 5 of $steps) -----"
$NUTCH_HOME/bin/nutch index crawl/NEWindexes crawl/crawldb crawl/linkdb \
    crawl/segments/*

echo "----- Dedup (Step 6 of $steps) -----"
$NUTCH_HOME/bin/nutch dedup crawl/NEWindexes

echo "----- Merge Indexes (Step 7 of $steps) -----"
$NUTCH_HOME/bin/nutch merge crawl/NEWindex crawl/NEWindexes

echo "----- Loading New Index (Step 8 of $steps) -----"
${CATALINA_HOME}/bin/shutdown.sh

if [ "$safe" != "yes" ]
then
  rm $RMARGS crawl/NEWindexes
  rm $RMARGS crawl/index
else
  rm $RMARGS crawl/BACKUPindexes
  rm $RMARGS crawl/BACKUPindex
  mv $MVARGS crawl/NEWindexes crawl/BACKUPindexes
  mv $MVARGS crawl/index crawl/BACKUPindex
fi

mv $MVARGS crawl/NEWindex crawl/index

${CATALINA_HOME}/bin/startup.sh

echo "runbot: FINISHED: Crawl completed!"
echo ""

 
分享到:
评论

相关推荐

    开发基于 Nutch 的集群式搜索引擎

    ### 开发基于Nutch的集群式搜索引擎 #### Nutch背景知识与架构 Nutch是一款开源搜索引擎,使用Java语言编写,并且依赖于Lucene这一高性能全文搜索引擎库。自Nutch 0.8.0版本起,它完全运行在Hadoop平台上,这使...

    nutch

    Nutch 的配置文件(如 `conf/nutch-site.xml`)需要根据实际需求进行调整,比如设置抓取策略、设置抓取间隔、调整抓取范围等。Nutch 还提供了命令行工具,如 `bin/nutch crawl`,用于启动爬虫流程。 **Nutch 入门...

    基于ApacheNutch和Htmlunit的扩展实现AJAX页面爬虫抓取解析插件nutch-htmlunit.zip

    基于Apache Nutch 1.8和Htmlunit组件,实现对于AJAX加载类型页面的完整页面内容抓取解析。 According to the implementation of Apache Nutch 1.8, we can't get dynamic ...

    nutch2.2.1安装步骤.docx

    Apache Nutch 是一个开源的网络爬虫框架,用于抓取互联网上的网页并建立索引,以便进行全文搜索。Nutch 2.2.1 是一个稳定版本,它依赖于其他几个组件来完成其功能,包括 Apache Ant、Apache Tomcat、Java 开发工具包...

    nutch网页爬取总结

    1. **Crawldb**:Crawldb 是 Nutch 存储已抓取 URL 的数据库,记录每个 URL 的状态,如已抓取、待抓取或已忽略。 2. **Linkdb**:Linkdb 存储了 URL 之间的链接关系,有助于确定网页的重要性,并为爬虫提供抓取顺序...

    nutch使用&Nutch;入门教程

    Nutch的工作流程包括多个步骤,如生成段(Segments)、迭代抓取(Fetch)、解析(Parse)、更新链接数据库(Update)、生成新的种子(Generate)、选择待抓取页面(Select)、重定向处理(Fetch)以及索引(Index)...

    Nutch入门教程 高清 带书签

    Nutch是Apache软件基金会开发的一款开源搜索引擎项目,主要用于网络数据抓取和索引。这个“Nutch入门教程 高清 带书签”的资源,很显然是为了帮助初学者快速理解并掌握Nutch的基本操作和核心概念。下面,我们将深入...

    nutch1.2 java project

    Nutch 1.2 是一个开源的网络爬虫项目,基于 Java 编写,用于抓取互联网上的网页并建立索引。这个项目是 Apache Software Foundation 的一部分,它为大规模的数据采集提供了强大的工具。Nutch 1.2 版本相对于早期版本...

    Nutch1.7二次开发培训讲义 之 腾讯微博抓取分析

    ### Nutch 1.7 二次开发培训讲义之腾讯微博抓取分析 #### 一、概述 Nutch 是一个开源的网络爬虫项目,它提供了灵活的数据抓取能力,并支持二次开发定制功能。本篇培训讲义主要针对的是如何使用 Nutch 1.7 版本对...

    搜索引擎nutch配置

    编译完成后,可以运行Nutch的命令行工具,如`bin/nutch inject`来注入种子URL,`bin/nutch fetch`执行抓取,`bin/nutch update`更新已抓取的页面,`bin/nutch generate`生成待抓取的URL列表,以及`bin/nutch crawl`...

    nutch 爬虫数据nutch 爬虫数据nutch 爬虫数据nutch 爬虫数据

    Nutch 的爬虫数据通常包括了它在抓取过程中收集到的网页URL、网页内容、元数据以及爬取日志等信息。 在Nutch的数据流程中,主要涉及以下几个关键步骤: 1. **种子URL生成**:爬虫的起点是种子URL列表,这些URL决定...

    Nutch 1.2源码阅读

    Nutch的工作流程主要包括以下几个阶段:注入(Injector)、生成抓取URL(Generator)、网页抓取(Fetcher)、网页解析(ParseSegment)、数据库更新(CrawlDb)、链接数据库处理(LinkDb)以及索引构建(Indexer)。...

    apache-nutch-2.3

    Apache Nutch 是一个开源的网络爬虫框架,用于抓取互联网上的网页并建立索引,以便于搜索引擎进行高效的检索。Nutch 2.3 版本是该项目的一个稳定版本,包含了丰富的功能和优化,是学习和研究网络爬虫技术的理想选择...

    nutch入门教程

    Crawldb是Nutch用于存储已抓取网页信息的数据库,包括网页的URL、抓取时间、状态码等,是分析抓取效率和效果的重要工具。 **6.2 Linkdb** Linkdb用于存储网页之间的链接关系,是分析网页结构和构建链接图谱的基础...

    Nutch搜索引擎·Nutch浅入分析(第5期)

    但在后续版本中,为了提高效率和功能,Nutch将索引的建立以及搜索交由Solr实现,从而形成了以Nutch为核心抓取和分析网页,以Solr为核心建立索引和提供搜索的分工合作模式。 具体的工作流程可以概括为以下步骤: 1....

Global site tag (gtag.js) - Google Analytics