Nutch的URL选择策略 OPIC IN NUTCH

news/2024/7/10 20:24:59 标签: url, 网络爬虫, 算法, google, 数据库, 互联网

        突 然发现这句话对于网络爬虫也是很有启发意义的,对于浩瀚无边的互联网而言,网络爬虫涉及到页面确实只是冰山一角。因此,如何确定一个页面的重要性,从而在 抓取过程中进行合理的调度,以最小的代价(硬件、带宽)获取到最大的利益(数量最多的重要的网页)是设计网络爬虫过程中的一个核心问题。
        一个页面是否重要本来是一个比较主观的问题,见仁见智。但是如果大部分人都认为一个页面是重要的,那么我们大都会相信众人的判断,认为这个页面的确“重 要”的——这就是Google的PageRank算法的核心思想。不过在具体PageRank中,这个判断的过程是采用网页间的超链接来实现的。 PageRank成就了Google的辉煌,自然有它的过人之处,不过PageRank计算对象是所有“已经抓取下来”的网页,该算法通过这些网页的相互 连接关系以迭代的方式计算出各个网页的重要性——页面的PageRank。也就是说,我们在计算PageRank的过程中,是不会有新的页面加入的,我们 将这种计算方式称为“离线”(off-line)的计算方式。PageRank能够很好地反应出已有页面间的相对重要性,因此十分适合于查询结果的排序。 但是,PageRank是一种离线的计算方式,在一次计算过程中不能加入新的页面,而且计算过程是一个迭代过程,需要较长的计算时间,因此并不适合于网络 爬虫的URL调度,动态决定URL的抓取顺序。
        针对这个问题,大家提出了很多解决方案[1]。其中,Abiteboul (Abiteboul et al., 2003)[2] 提出了一种基于OPIC (On-line Page Importance Computation)算法的抓取策略.在OPIC中,每一个页面都有一个初始的"cash” 。在抓取的过程中,这些"cash"将会平均地分配给该页面指向的页面,这个分配过程是一次完成的。基于OPIC的网络爬虫在抓取过程中将以待抓取页面累 积的"cash"的多少为依据,优先抓取"cash"数量最多的页面。OPIC算法如下所示,其中C表示页面i当前的Cash,H表示在计算 过程中页面i累计收到的cash的总数。

       OPIC代码:

      

  1. OPIC:  
  2. On-line Page Importance Computation  
  3.   
  4. for each let C := 1/n  
  5. for each let H :=  
  6. let G:=0  
  7. do forever  
  8. begin  
  9.  choose some node  
  10.  %% each node is selected  
  11.  %% infinitely often  
  12.   
  13.  H += C 
  14.  %% single disk access per page  
  15.   
  16.  for each child of i,  
  17.  do C[j] += C/out 
  18.  %% Distribution of cash  
  19.  %% depends on  
  20.   
  21.  += C 
  22.  C :=  
  23. end  

 
宋体">  Nutch使用了OPIC作为默认的URL调度策略,但是当前版本(0.9)的OPIC实现与Abiteboul在论文提出的OPIC并不完全相同,具体表现为:
宋体">  1. Nutch中并没有区分C和H,使用score一个变量记录页面累积的分数,在分配过程中也是将这个累积的分数全部平均分配给子页面,分配完毕后分数也并不清零。
宋体">  2. Nutch中并没有virtual root page,也就是说叶子页面(即没有outlink的页面)的分数将会丢失。  
 
宋体">  Nutch分数计算功能是通过插件的形式提供的,用户可以通过新增插件的方式改变Nutch积分方式。Nutch提供了一个计算分数的接口 ScoringFilter,完成计算分数功能的类通过实现该接口以影响Nutch分数的计算方式,其默认的OPIC分数计算方法由类 OPICScoringFilter 提供。此外,参与计算分数的类还有 ScoringFilters,ParseOutputFormat。其中 ScoringFilters 负责将各个计分插件加载到系统中,并实现链式计分的过程;而ParseOutputFormat 在解析结果输出之前,将页面的分数分配到该页面的各个子页面中,使得Nutch的更新模块可以使用这些数据更新CrawlDB数据库


http://www.niftyadmin.cn/n/1760313.html

相关文章

高并发秒杀业务 DAO层

为什么要学习秒杀 秒杀的业务场景具有典型的事务特性 秒杀/红包类需求越来越常见 面试常问问题 相关技术介绍 Mysql (①表设计 ②SQL技巧 ③事务和行级锁)MyBatis(①DAO层的设计开发 ②MyBatis合理使用 ③Mybatis和Spring整合)Spring(①…

Nutch使用方法简介

目前Nutch采用Sehll的启动方式,如果您使用的是Windows系统,那么首先需要安装Cygwin。本文就以在Windows中为例,介绍Nutch的安装和使用方法。 (1)准备需要的软件列表 Cygwin (下载地址:http://www.cygwin.com/setup.exe) Jdk(1.4.2以上…

进程 第二天 (fork函数子进程与父进程守护进程)

详细标注:进程 第二天 (fork函数&子进程与父进程&守护进程) 一、fork()函数 在Linux系统内,创建子进程的方法是使用系统调用fork()函数。fork()函数是Linux系统内一个非常重要的函数,它与我们之前学过的函数有一个显著的区别&#xf…

Nutch常用命令详解

Nutch采用了一种命令的方式进行工作,其命令可以是对局域网方式的单一命令也可以是对整个Web进行爬取的分步命令。主要的命令如下:1. CrawlCrawl是“org.apache.nutch.crawl.Crawl”的别称,它是一个完整的爬取和索引过程命令。使用方法&#…

题解 CF939B 【Hamster Farm】

题目分析 实质上就是求余数,找到n mod a[i] 的最小值,然后把 i 与 n/a[i] 输出。就是一道纯粹的模拟题,不过因为翻译,要注意隐隐约约有10e18的数据范围,一定要小心,用long long才行(一开始吓得我…

JVM/ JRE/ JDK

JVM Java虚拟机,是安装在系统里面的可以让windows等识别的软件,用来读取java文件,JVM不跨平台 目的是使用相同的字节码,实现一次编译,随处执行 JRE Java Runtime Environment:Java的运行环境&#xff0…

进程通信:管道(pipe)和socketpair区别

管道pipe是半双工的,pipe两次才能实现全双工,使得代码复杂。socketpair直接就可以实现全双工 socketpair对两个文件描述符中的任何一个都可读和可写,而pipe是一个读,一个写 详间代码: 一:pipe实现父子进程…

Nutch主流程代码阅读笔记整理

Nutch 的Crawler和Searcher两部分被尽是分开,其主要目的是为了使两个部分可以布地配置在硬件平台上,例如Crawler和Searcher分别被放置在两个主机上,这样可以极大的提高灵活性和性能。 一、总体流程介绍 Nutch 的Crawler和Searcher两部分被尽…