zoukankan      html  css  js  c++  java
  • 爬虫基本结构

    爬虫程序的工作是从一个种子链接的集合开始。把种子URL集合作为参数传递给网络爬
    虫。爬虫先把这些初始的URL放入URL工作队列(Todo队列,又叫作Frontier),然后遍历
    所有工作队列中的URL,下载网页并把其中新发现的URL再次放入工作队列。为了判断一个
    URL是否已经遍历过,把所有遍历过的URL放入历史表。

    while (todo.size () > 0) { //如果 Todo队列不是空的
      //从Todo队列里面提取URL
      String strUrl = todo.iterator().next();
      //下载URL对应的网页内容
      String content = downloadPageContent(strUrl);
      //把网页内容存储到本地
      //提取网页内容中新发现的URL链接
      HashSet<String> newLinks = retrieveLinks(content, new URL(strUrl));
      //把新发现的链接加入Todo队列
      todo.addAll(newLinks);
      //从Todo队列里删除已经爬过的URL
      todo.remove(strUrl);
      //把从Todo队列里删除的URL添加到Visited集合中
      visited.add(strUrl);
    }
     

    整个互联网是一个大的有向有环图,其中的每个URL相当于图的一个节点,因此,网页遍
    历就可以釆用图遍历的算法进行。通常,网络爬虫的遍历策略有三种,广度优先遍历、深度优先
    遍历和最佳优先遍历。其中,深度优先遍历由于极有可能使爬虫陷入黑洞,因此,广度优先遍历
    和最佳优先遍历就成为了常用的爬虫策略。垂直搜索往往采用定制的遍历方法抓取特定的网站。

    一般的爬虫软件,通常都包含以下几个模块。
    (1) 保存种子URL和待抓取的URL的数据结构,把网页中发现的新链接放入Frontier中。
    (2) 保存已经抓取的URL的数据结构,防止重复抓取。需要快速知道一个URL是否已经
    抓取过。

    (3) 页面获取模块。
    (4) 对已经获取的页面内容的各个部分进行抽取的模块。例如抽取HTML、JavaScript等。
    其他可选的模块包括下面5个。
    (1) 负责连接前处理模块。
    (2) 负责连接后处理模块。
    (3) 过滤器模块。HTML中并没有描述链接资源的类型。如果要访问某些类型的资源,往
    往通过后缀判断资源的类型。例如,htm往往代表静态网页类型,img往往代表图片。
    (4) 负责多线程的模块。多线程同时下载网页。
    (5)负责分布式的模块。

     

    1.保存种子和爬取出来的URL的数据结构

    2.保存已经抓取过的URL的数据结构

    己经抓取过的URL的规模和待抓取的URL的规模是一个相当的量级。正如我们前面介绍
    的TODO表和Visited表。它们唯一的不同是,Visited表会经常被查询,以便确定发现的URL
    是否已经处理过。因此,如果Visited表数据结构是一个内存数据结构,可以釆用HashCHashMap
    或者HashSet)来存储,如果保存在数据库中,可以对URL列建立索引。

  • 相关阅读:
    使用Myeclipse + SVN + TaoCode 免费实现项目版本控制的详细教程
    国内的代码托管服务
    国内可用的SVN和Git代码托管网站汇总
    需求调研与分析流程
    如何做好新项目的需求调研?(一)
    如何进行有效的需求调研
    weblogic和tomcat
    同步变量也是变量
    并发编程的三个管理
    机器学习
  • 原文地址:https://www.cnblogs.com/Michael2397/p/7824948.html
Copyright © 2011-2022 走看看