Scrapy学习——深度优先和广度优先

爬取的过程

爬取网站前首先要对其网站的url结构进行分析,遇到已经爬取过的网址会将其加入已经爬取的列表中,避免重复爬取。
Scrapy是基于第归算法实现的深度优先算法爬取数据

eg

def level_queue(root):
         if root is None:
              return
         my_queue.append(node)
         while my_queue:
               node = my_queue.pop(0)
               print (node.elem)
               if node.lchild is not None:
                    my_queue.append(node.lchild)
               if node.rchlid is not None:
                    my_queue.append(node.rchild)    

爬虫去重策略

  • 将访问url保存到数据库中——每次遍历浪费时间
  • 将访问的url保存到内存set中——需要牺牲大量的内容

如果网页的url有个,每个大约50个字符的话大概占用1000000002btye50/1024/1024 = 9g内存

  • 通过md5的哈希算法,压缩url的字符数,降低内存占用(scrapy采用的类似这种的方式)
  • 采用bitmap方法,通过将url通过hash函数影射到某一位——会有可能发生冲突,一个连接映射为同一个位
  • 使用bloomfiter方法对bitmap进行改进,多重hash函数降低冲突

如果采取bitmap的方法,1亿的url也就大约12mb的内存占用

    原文作者:旅行路上的吕行
    原文地址: https://www.jianshu.com/p/6c1a966da96f
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞