版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_40643642/article/details/89886197
慕课网《聚焦Python分布式爬虫必学框架Scrapy 打造搜索引擎》 学习笔记
学习流程:
- 环境配置和基础知识铺垫
- 爬取真实数据
- scrapy突破反爬虫技术
- scrapy进阶
- scrapy redis分布式爬虫
- elasticsearch django实现搜索引擎
scrapy vs requests + beautifulsoup
- requests和beautifulsoup都是库,scrapy是框架。
- scrapy框架中可以加入requests和beautisoup。
- scrapy基于twisted,性能是最大优势。
- scrapy方便扩展,提供了很多内置的功能。
- scrapy内置的css和xpath selector非常方便,beautifulsoup(纯python写的框架)最大的缺点就是慢。
网页分类
- 静态网页 (在服务器端生成好的页面,页面内容不变)
- 动态网页 (根据传递数据不同,通过服务器从数据库取出数据)
- webservice(restapi)
爬虫能做什么
- 搜索引擎--百度、google、垂直领域搜索引擎(例如只用来搜索汽车相关的信息)
- 推荐引擎--今日头条
- 机器学习的数据样本
- 数据分析(如金融数据分析、舆情分析等)
爬虫去重策略
- 将访问过的url保存到数据库中(最简单,但效率低)
- 将访问过的url保存到set中,只需要o(1)的代价就可以查询url(占用内存大 100000000*2byte*50字符/1024/1024/1024=9G))
- url经过md5等方法哈希后保存到set(比上一个方法进行几倍的压缩,将任意长度的url压缩成同样长度的md5字符串,而且不重复。scrapy采用类似md5的方式)
- 用bitmap方法,将访问过的url通过hash函数映射到某一位(缺点:冲突高)
- bloomfilter方法对bitmap进行改进,多重hash函数降低冲突
字符串编码
- 计算机只能处理数字,文本转换为数字才能处理。计算机中8个bit作为一个字节,所以一个字节能表示最大的数字就是255。
- 计算机是美国人发明的,所以一个字节可以表示所有字符,所以ASCII(一个字节)编码就成为美国人的标准编码。
- 但是ASCII处理中文明显不够的,中文不止255个汉字,所以中国制定了GB2312编码,用两个字节表示一个汉字。GB2312还把ASCII包含进去了。同理,日文,韩文等等上百个国家为了解决这个问题就都发展了一套字节的编码,标准越来越多,如果出现多语言混合显示就一定会出现乱码。
- unicode将所有语言统一到一套编码里。
- ASCII和unicode编码:1)字母A用ASCII编码十进制是65,二进制是0100 0001 2)汉字“中”已经超出了ASCII编码的范围,用unicode编码是20013,二进制是01001110 00101101 3)A用unicode编码只需要前面补0二进制是00000000 0100 0001
- 但是如果内容全是英文,unicode编码比ASCII需要多一倍的存储空间,同时多一倍的传输。
- 所以出现了可变长的编码“utf-8”,把英文变长一个字节,汉字3个字节。特别生僻的变成4-6字节,如果传输大量的英文,utf-8作用就很明显了。