zoukankan      html  css  js  c++  java
  • 2 宽度优先爬虫和带偏好的爬虫(4)

      5 Java带偏好的爬虫示例

      在上一节中,我们已经指出,可以使用优先级队列(PriorityQueue)来实现这个带偏好的爬虫。在深入讲解之前,我们首先介绍优先级队列。

      优先级队列是一种特殊的队列,普通队列中的元素是先进先出的,而优先级队列则是根据进入队列中的元素的优先级进行出队列操作。例如操作系统的一些优先级进程管理等,都可以使用优先级队列。优先级队列也有最小优先级队列和最大优先级队列两种。
      理论上,优先级队列可以是任何一种数据结构,线性的和非线性的,也可以是有序的或无序的。针对有序的优先级队列而言,获取最小或最大的值是非常容易的,但是插入却非常困难;而对于无序的有衔接队列而言,插入是很容易的,但是获取最大和最小值是很麻烦的。根据以上的分析,可以使用“堆”这种折中的数据结构来实现优先级队列。
      从JDK1.5开始,Java提供了内置的支持优先级队列的数据结构——java.util.PriorityQueue。
    我们在上边的代码中,只要稍微修改一下,就可以支持从URL队列中选择优先级高的URL。

    LinkQueue类:

     1 public class LinkQueue{
     2 //已访问的URL集合
     3 private static Set visitedUrl=new HashSet();
     4 //待访问的URL集合
     5 private static Queueun VisitedUrl=new  PriorityQueue();
     6 //获得URL队列
     7 public static Queue getUnVisitedUrl(){
     8 return unVisitedUrl;
     9 }
    10 //添加到访问过的URL队列中
    11 public static void addVisitedUrl(String url){
    12  visitedUrl.add(url);
    13 }
    14 //移除访问过的URL
    15 public static void removeVisitedUrl(String url){
    16  visitedUrl.remove(url);
    17 }
    18 //未访问的URL出队列
    19 public static Object unVisitedUrlDeQueue(){
    20 return unVisitedUrl.poll();
    21 }
    22 //保证每个URL只被访问一次
    23 public static void addUnvisitedUrl(String url){
    24  if(url!=null && !url.trim().equals("")
    25   &&!visitedUrl.contains(url)
    26   &&!unVisitedUrl.contains(url))
    27   unVisitedUrl.add(url);
    28 }
    29 //获得已经访问的URL数目
    30 public static int getVisitedUrlNum(){
    31  return visitedUrl.size();
    32 }
    33 //判断未访问的URL队列中是否为空
    34 public static boolean unVisitedUrlsEmpty(){
    35  return unVisitedUrl.isEmpty();
    36 }
    37 }

      在带偏好的爬虫里,队列元素的优先级是由URL的优先级确定的。关于如何确定URL的优先级,有一些专用的链接分析的方法,比如Google的PageRank和HITS算法。

  • 相关阅读:
    POJ 2593&&2479:Max Sequence
    POJ 2115:C Looooops
    杭电2187--悼念512汶川大地震遇难同胞——老人是真饿了
    南阳448--寻找最大数
    杭电2544--最短路(Floyd)邻接表使用方法模板
    杭电2141--Can you find it?
    杭电1242--Rescue(BFS+优先队列)
    杭电1241--Oil Deposits(Dfs)
    南阳42--一笔画问题
    杭电1950--Bridging signals (二分法→ →LIS)
  • 原文地址:https://www.cnblogs.com/94julia/p/2989713.html
Copyright © 2011-2022 走看看