前几章我们讲了通过爬虫来获取有效数据,那么相对应的就有反爬虫来控制拒绝爬虫的访问。
这一章我们就了解一下这两个方式。
爬虫的分类:
爬虫按大类大概分为三类:
- 全网爬虫
- 站内爬虫
- 定向爬虫
我们来举例了解这三类:
1、全网爬虫像搜索引擎,我们在百度上搜索一个问题时,会出现对应的回答内容,这就是全网爬虫,对所有收录的网站进行爬虫,获取关键词在对应的词库,这样用户搜索的时候就会返回相应的结果了。(在SEO优化的时候有很大帮助,比如我们新建了一个网站,想让用户在搜索关键词时自己的网站靠前,就可以建立对应的文件、词条,提高自己的曝光率)
2、站内爬虫:类似于第一类,区别在于是特点的站点,更多用于企业类
3、定向爬虫:用于从某些网站爬取特定的数据,比如说,我们想了解天气的信息,就从天气网来爬取,目的性很强
常用技术:
1. cookie 和 session
模拟用户登录状态,请求完整信息
2. 网络库 (urllib、urllib3、requests等)
链接网络,请求网络信息
3. 分析库 (lxml、Beautiful Soup、pyquery等)
对获取到的文本进行数据分析,过滤获得所需数据
4. 爬虫框架 (如Scrapy、Selenium、Appium等)
提供了强大的爬虫功能方法。
比如我们可以将一些常见爬虫功能的实现代码写好,然后留下一些接口,在做不同的爬虫项目时,我们只需要根据实际情况,手写少量需要变动的代码部分,并按照需要调用这些接口,即可以实现一个爬虫项目
5. 数据存储 (文件、SQLite、MySql、MongoDB等)
用于存储获得的数据
6. 缓存 (Redis等)
有时候我们会频繁的调用页面请求,这个时候可能数据来源识别我们的频繁访问,限制我们的ip请求,这个时候我们就可以把请求到的数据写入我们的缓存,一段时间刷新一次;
或者在网络很慢的情况下,对我们获得数据的速度也有提升
作用:
我们了解了这么多关于爬虫的方法,那么,爬虫有什么用处呢?
1、数据分析
当我们需要对某一现象或者是某一个市场进行分析时,会需要大量的数据,本身我们有没有这些数据,这个时候可以从各大网站上爬取我们需要的数据来进行分析
2、作为API的数据源
这个就像是我们拿别人的数据,来做我们的数据库,
3、作为人工智能的数据源
人工智能的机器学习是需要培养的,比如说我们训练AI识别狗狗,就需要各种狗狗的图片,种类,那么从网站爬取狗狗图片是必不可少的
反爬虫
当我们是索取者时,需要的是爬虫技术,那么当我们换成给予者,就需要反爬虫技术了。
反爬虫简单来说就是通过爬虫的特征去识别爬虫,并且拒绝爬虫的访问。
为什么需要反爬虫呢?
可以从两方面来解释:
首先,我们有一些敏感数据,并不希望被别人拿去使用,
其次,爬虫会对服务器造成一定的压力,拿搜索来举例子,用户搜索“足球”,一般来说用户不会一直往下看,所以服务器会把前10页的搜索信息缓存下来,下次再搜索的时候在缓存里去取,这样就减轻服务器压力;但是爬虫会一直往下请求,不但但10页,会一直请求到获取不到更新的数据,一个两个还行,如果同时10w个请求,服务器会崩的
防御方式
那么有什么方法来反爬虫呢?
按方式分类分为两种:
1、主动防御
通过技术手段, 识别正常程序和爬虫,并限制爬虫对网站的访问行为,如:验证请求头信息,限制访问频率,使用验证码(如12306)等通过技术手段区分正
2、被动防御
通过技术手段,提高爬虫抓取数据的难度, 例如:数据分段加载(一段文本分几段进行加载,数据加密),鼠标悬停预览数据,文本混淆等
反爬虫的方法有以下几种:
1、User-Agent 反爬虫 使服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。 2、cookie反爬虫 识别有cookie的才可以请求数据 3、签名验证反爬虫 上面讲的分段等 4、动态渲染数据 不直接返回数据,通过ajax或者其它方式,直接爬取只能爬取到空数据 5、文本混淆 按一定的规律对数据进行混淆处理,在展示出来 6、特征识别 验证码、语音识别等
下一章自动化测试