http://blog.csdn.net/lianqiang198505/archive/2006/10/17/1338155.aspx
在nutch的爬虫运行过程中有这样的一个调用(在CrawlTool中):
// update segments from db
UpdateSegmentsFromDb updater =
new UpdateSegmentsFromDb(nfs, db, segments, dir);
updater.run();
正如注释所说,这段代码的作用就是从webdb中的当前信息来对segments文件夹下的网页得分和anchor信息进行更新;之所以进行这个步骤是因为,在运行了上面代码的以上其他抓取步骤后,在segments文件夹的子文件夹中的fecher文件夹下存放的关于网页的得分和anchor信息不是最新的(这个是因为,爬虫运行完抓取后,每一个segments文件夹下的子文件夹是一层抓取产生的结果,然后我们利用上一层的抓取结果去更新webdb,然后再由webdb产生fetchlist,然后我们再由fetchlist中的内容去进行抓取,我们应该注意的一点是在每一次更新webdb时候,webdb中存放的网页的得分和指向该网页的连接信息可能会改变的,比如新爬回的网页有指向以前网页的连接时得分信息就会改变,但是在我们抓取时候每一次抓取的信息是分层的,存在segemnts文件夹下不同的子文件夹中,在各个不同层之间的由连接产生的最新得分信息只有且只有在webdb中才有体现,所以为了保证segment文件夹中的得分信息的最新,我们应该有这个步骤),我们就利用上面的代码来保证segments中信息的最新.
在UpdateSegmentsFromDb类中有三个内部类,分别是:
1. SegmentPage,它是用来存放关于url和segments文件夹下子文件的名称信息;
2. ByUrlComparator和BySegmentComparator,这两个类的作用是对存放好的以SegmentPage实例为key的文件进行排序;
3. Update,它用来存放的是新的网页得分和anchors信息;
这几个类的具体详细作用和代码中的部分细节剖析如下:
1. SegmentPage就是用来存放webdb中所有的url信息和url对应的segments文件夹下子文件夹的名称,它可以被按照ByUrlComparator和BySegmentComparator两个类中的排序方法分别按照url和segments文件夹下子文件夹的名称进行排序,以被以后更新信息时候用;
2. ByUrlComparator和BySegmentComparator都是用来进行排序,其中前者主要的目的是为了适应在webdb中存储的内容是有按照url排序的,这样就可以按照顺序有序的从webdb中取得相应的网页信息;而后者的主要目的是为了保证更新的文件夹按照一定的顺序,即更新完一个文件夹后更新另一个;
3. 我们可以发现,在这个代码中最重要的函数是类的成员方法close(),在这个里面包含了全部核心的处理部分
相关资源:nutch爬虫+java+eclipse