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算法。

  • 相关阅读:
    centos7.6 使用yum安装mysql5.7
    解决hadoop本地库问题
    docker-compose 启动警告
    docker 安装zabbix5.0 界面乱码问题解决
    docker 部署zabbix问题
    zookeeper 超时问题
    hbase regionserver异常宕机
    (转载)hadoop 滚动升级
    hadoop Requested data length 86483783 is longer than maximum configured RPC length
    zkfc 异常退出问题,报错Received stat error from Zookeeper. code:CONNECTIONLOSS
  • 原文地址:https://www.cnblogs.com/94julia/p/2989713.html
Copyright © 2011-2022 走看看