第一,爬虫能做什么?作用是啥?简单的介绍几种,以便于了解。
1. 搜索引擎---百度、google、垂直领域搜索引擎
2. 推荐引擎---今日头条
3. 机器学习的数据样本
4. 数据分析(如金融数据分析)、舆情分析等
第二,技术选型(为什么要使用scrapy而不是requests+beautifulsoup?)
1. requests和beautifulsoup都是库, scrapy是框架
2. scrapy框架中可以加入requests和beautifulsoup
3. scrapy基于twisted, 性能是最大的优势
4. scrapy方便扩展, 提供了很多内置的功能
5. scrapy内置的css和xpath selector非常方便, beautifulsoup最大的缺点就是慢
第三,网页分类
1. 静态网页
2. 动态网页
3.webservice(restapi)
第四,爬虫的第一步就是网站的结构解析,只有清楚了解了网站的结构才能很好的进行数据的爬取。以伯乐网为例子,分析网站的结构,如下图:
第四,爬虫常使用的算法有哪些?下面使用同一组图来解析对比两钟算法。发现了一篇这个算法分析写的很清晰的一篇文章,有需要大家可以移步到此博客查看!
1.深度优先算法和实现
深度优先输出 A、B、D、E、I、C、F、G、H(递归实现)
算法的伪代码如下:
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.广度优先算法和实现
广度优先输出 A、B、C、D、E、F、G、H、I
算法的伪代码如下:
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-date、content-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函数降低冲突
这块都是给了个大致的思路,里面具体每一点的了解,还请各位仔细查看资料学习!