zoukankan      html  css  js  c++  java
  • Python 开发轻量级爬虫04

    Python 开发轻量级爬虫

    (imooc总结04--url管理器)

    介绍抓取URL管理器
        url管理器用来管理待抓取url集合和已抓取url集合。
    这里有一个问题,遇到一个url,我们就抓取它的内容,为什么还要对url进行管理呢? 是为了防止重复抓取、防止循环抓取。
    
    我们都知道,每一个网页都有很多指向其它网页的url,其它网页的url也会指向本网页。这样不同url之间就存在一种循环指向的问题。
    如果不对这些url进行管理,那么我们的爬虫就在循环不断抓取这两个url,形成一个死循环。重复抓取、循环抓取是我们要避免的情况。
    
    所以我们使用url管理器对它们进行统一的管理。
    

    url管理器需要支持这些功能:

        首先需要支持 将一个新url添加到待爬取集合中,在添加的同时,需要判断待添加url是不是在容器中已经存在。如果是的话,就不能添加,以防止重复抓取。
    同时,我们需要支持,可以从容器中获取一个待爬取url,获取的时候就要判断容器中还有没有待爬取的url。
        最后,如果url被爬取之后,我们需要将这个url从爬取的集合移动到已爬取的集合。
    
    url管理器有哪几种实现方式?
    

    目前有三种实现方式,
    1.我们可以直接将待爬取的url集合和已爬取的url集合存储在内存中。
    比如:如果用python语言的话,可以将两个集合存储在两个set()数据结构中。为什么选用set?是因为python set可以直接去除集合中重复的元素。
    
    2.我们可以将url存储在关系数据库中。
    比如:MySQL数据库 我们可以建立一个表urls,它有两个字段url、is_crawled 。
        is_crawled这个字段用来表示这个url是待爬取还是已爬取,也就是用一个表来存储了待爬取和已爬取两个数据集合。
    
    3.我们可以将一个url存储到一个缓存数据库中。
    比如说:redis redis本身就支持set这种数据结构,我们就可以将待爬取url集合和已爬取url集合存储到两个set中。
    
    目前,大型互联网公司,由于缓存数据库的高性能,所以都将url存储到缓存数据库。
    对于个人,选用内存作为存储,如果内存不够用或者想要永久存储,我们可以选用关系型数据库。
    
    这三个就是url管理器的实现方式,在本实例中,我们会选用python set来实现一个小型的url管理器。
  • 相关阅读:
    23.java方法的深入
    MapReduce:详解Shuffle过程
    Hadoop1.x与Hadoop2的区别
    进程控制的一些api
    程序的静态链接,动态链接和装载
    用户级线程和内核级线程的区别
    从Hadoop框架与MapReduce模式中谈海量数据处理(含淘宝技术架构) (转)
    海量处理面试题
    面试中的二叉树题目
    linux 进程间消息队列通讯
  • 原文地址:https://www.cnblogs.com/billyzh/p/5841001.html
Copyright © 2011-2022 走看看