分享

关于nutch scheduler问题,定时调度

nutch是如何进行定时调度的,需要用cron么,有没有相关的调度脚本,求解决方案,谢谢

已有(4)人评论

跳转到指定楼层
xuanxufeng 发表于 2015-9-8 16:03:39

下面几种楼主参考:
1.shell

crontab -e  
*/10 * * * * . /etc/profile;/bin/sh /home/*/*.sh  

. /etc/profile;/bin/sh 用来声明环境变量。


详细参考
nutch1.4:爬虫定时抓取设置
####################################
下面:用python写了个定时爬取的任务

[mw_shl_code=python,true]## startTime=3
import os import time while 1: now=time.time()
if time.localtime(now).tm_hour==startTime: os.system("rm -rf crawled")
   command="bash bin/nutch crawl urls.txt -dir crawled -depth 2"
   os.system(command)
else:
   time.sleep(30*60)[/mw_shl_code]
回复

使用道具 举报

arsenduan 发表于 2015-9-8 17:35:51
适用于 nutch 1.7 版。 建立于  linux环境下。
爬新闻,需要注意的是,

     1、一定要更新入口 url 列表     2、爬取过的新闻不需要再爬取      3、如何控制nutch对爬取过的url进行检查

修改nutch-site.xml 添加如下配置
[mw_shl_code=bash,true]<!-- 多长时间再抓取抓取之前抓过的页面,单位秒。默认30天 -->
<property>
        <name>db.fetch.interval.default</name>
        <value>420480000</value>
        <description>The default number of seconds between re-fetches of a page (30 days).
        </description>
</property>
<!-- 多少时间后强制更新整个CrawlDB库 -->
<property>
        <name>db.fetch.interval.max</name>
        <value>630720000</value>
        <description>The maximum number of seconds between re-fetches of a page
        (90 days). After this period every page in the db will be re-tried, no
        matter what is its status.
        </description>
</property>[/mw_shl_code]


往crontab 定时计划里添加定时执行如下脚本。
如下shell脚本,是控制的关键
[mw_shl_code=bash,true]#!/bin/sh

export JAVA_HOME=/usr/java/jdk1.6.0_45
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/jre/lib/dt.jar:$JAVA_HOME/jre/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin

#Set Workspace

nutch_work=/home/nutch/SearchEngine/nutch-Test
tmp_dir=$nutch_work/out_tmp
save_dir=$nutch_work/out
solrurl=http://192.168.123.205:8080/solr-4.6.1/core-nutch

# Set Parameter
depth=2
threads=200

#-------Start--------
$nutch_work/bin/nutch inject $tmp_dir/crawldb $nutch_work/urls

#-----循环此操作,次数有深度决定-----
for((i=0;i<$depth;i++))
do
        #-----step 1-----
        if ((i==0))
        then
                $nutch_work/bin/nutch generate $tmp_dir/crawldb $tmp_dir/segments
                segment=`ls -d  $tmp_dir/segments/* | tail -1`
        else
                $nutch_work/bin/nutch generate $save_dir/crawldb $save_dir/segments
                segment=`ls -d  $save_dir/segments/* | tail -1`
        fi
        #-----step 2-----
        $nutch_work/bin/nutch fetch $segment -threads $threads
        #-----step 3-----
        $nutch_work/bin/nutch parse $segment
        #-----step 4-----
        if ((i==0))
        then
                $nutch_work/bin/nutch updatedb $save_dir/crawldb $segment
        else
                $nutch_work/bin/nutch updatedb $save_dir/crawldb $segment -noAdditions
        fi
        #-----step 5-----
        $nutch_work/bin/nutch invertlinks $save_dir/linkdb $segment
done

#-----step 6-----
$nutch_work/bin/nutch solrindex $solrurl $save_dir/crawldb -linkdb $save_dir/linkdb $segment

#-----step 7-----
$nutch_work/bin/nutch solrdedup $solrurl

#-----step 8-----
rm -rf $tmp_dir/*

#-----Finished-----
[/mw_shl_code]

回复

使用道具 举报

ximenchuixuesun 发表于 2015-9-9 17:59:10
arsenduan 发表于 2015-9-8 17:35
适用于 nutch 1.7 版。 建立于  linux环境下。
爬新闻,需要注意的是,

有个问题就是,nutch在第一次抓取的时候比如说设置的抓取深度是2,假设第一层抓取更新完的时候url有10个,其中1个状态是已抓取,另外9个状态是未抓取,第二层抓取完更新了之后url有30个,其中10个状态是已抓取,20个状态是未抓取,那么如果调度一天抓取一次的话,并且抓取深度设置为2,那么下次抓取的时候是不是会将首次抓取完的30个url作为初始的url抓取列表进行抓取,抓取完之后有50个url,30个显示已抓取,20个显示未抓取,然后进行第二层抓取,抓取完之后是80个url,50个显示已抓取,30个显示未抓取,如果一直是这样的话,那会不会就说明每次调度之后url的抓取深度就加深两层,直到最底层没有输出url为止呢?谢谢帮忙解惑一下。
回复

使用道具 举报

arsenduan 发表于 2015-9-11 14:00:11
ximenchuixuesun 发表于 2015-9-9 17:59
有个问题就是,nutch在第一次抓取的时候比如说设置的抓取深度是2,假设第一层抓取更新完的时候url有10个 ...

要抓就抓完吧,要么你把自己抓取的内容记录下来。下次接着抓
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条