第二章 python分布式爬虫打造搜索引擎环境搭建 第一节爬虫基础知识介绍

第一,爬虫能做什么?作用是啥?简单的介绍几种,以便于了解。

1. 搜索引擎---百度、google、垂直领域搜索引擎

2. 推荐引擎---今日头条

3. 机器学习的数据样本

4. 数据分析(如金融数据分析)、舆情分析等

第二,技术选型(为什么要使用scrapy而不是requests+beautifulsoup?

1. requestsbeautifulsoup都是库, scrapy是框架

2. scrapy框架中可以加入requestsbeautifulsoup

3. scrapy基于twisted, 性能是最大的优势

4. scrapy方便扩展, 提供了很多内置的功能

5. scrapy内置的cssxpath selector非常方便, beautifulsoup最大的缺点就是慢

第三,网页分类

1. 静态网页

2. 动态网页

3.webservice(restapi)

第四,爬虫的第一步就是网站的结构解析,只有清楚了解了网站的结构才能很好的进行数据的爬取。以伯乐网为例子,分析网站的结构,如下图:

第四,爬虫常使用的算法有哪些?下面使用同一组图来解析对比两钟算法。发现了一篇这个算法分析写的很清晰的一篇文章,有需要大家可以移步到此博客查看

1.深度优先算法和实现

   深度优先输出 ABDEICFGH(递归实现)

  算法的伪代码如下:

def  depth_ tree(tree node) :
     if  tree_ node  is  not None :
          print (tree_ node._ data)
          if  tree_ node._ left  is not None :
              return depth_ tree(tree_ node._ left)
          if  tree_ node._ right  is  not None :
              return depth_ tree(tree_ node._ right )

2.广度优先算法和实现

 广度优先输出 ABCDEFGHI

  算法的伪代码如下:

def level_ queue(root) :
      "利用队列实现树的广度有先遍历"
    if root is None:
       return
    my_ _queue = [ ]node = root
    my_ queue . append(node)
    While my_ _queue:
        node = my_ .queue .pop(O)
        print (node.elem)
        if node.lchild is not None:
            my_ queue . append(node . lchild)
        if  node. rchild is not None :
            my_ queue . append (node. rchild)

第五,数据爬取策略

1. url拼接分析(适用于所有数据的列表页和搜索关键词的获取)

2. 通用爬虫(广度优先和深度优先实现)

第六,爬虫更新策略

1. 根据网站权重分配爬虫资源

2. 根据last-modify-datecontent-length字段判断

3. 对网站内容做一个指纹

第七,爬虫去重策略

1. 将访问过的url保存到数据库中

2. 将访问过的url保存到set中,只需要o(1)的代价就可以查询url(100000000*2byte*50个字符/1024/1024/1024 = 9G)

3. url经过md5等方法哈希后保存到set

4.用bitmap方法, 将访问过的url通过hash函数映射到某一位

5. bloomfilter方法对bitmap进行改进, 多重hash函数降低冲突

这块都是给了个大致的思路,里面具体每一点的了解,还请各位仔细查看资料学习!

猜你喜欢

转载自blog.csdn.net/u014135369/article/details/84250329