一、为什么要反爬虫
- 第一,网络爬虫浪费网站的流量,也就是浪费钱。爬虫对于一个网站来说并不算是真正用户的流量,而且往往能够不知疲倦地爬取网站。更有甚者,使用分布式的多台机器爬虫,造成网站浏览量增高,浪费网站流量。
- 第二,数据是每家公司非常宝贵的资源。在大数据时代,数据的价值越来越突出,很多公司都把它作为自己的战略资源。由于数据都是公开在互联网上的,如果竞争对手能够轻易获取数据,并使用这些数据采取针对性的策略,长此以往,就会导致公司竞争力的下降。
那么什么又是反爬虫呢?
反爬虫是指使用任何技术手段阻止别人批量获取自己网站信息的一种方式。
二、反爬虫的方式有哪些
- 不返回网页,如不返回内容和延迟网页返回时间。
- 返回数据非目标网页,如返回错误页、返回空白页和爬取多页时均返回同一页。
- 增加获取数据的难度,如登录才可查看和登录时设置验证码。
1.不返回网页
不返回网页是比较传统的反爬虫手段,也就是在爬虫发送请求给相应网站地址后,网站返回404页面,表示服务器无法正常提供信息或服务器无法回应;网站也可能长时间不返回数据,这代表对爬虫已经进行了封杀。
- 首先,网站会通过IP访问量反爬虫。因为正常人使用浏览器访问网站的速度是很慢的,不太可能一分钟访问100个网页,所以通常网站会对访问进行统计,如果单个IP的访问量超过了某个阈值,就会进行封杀或要求输入验证码
- 其次,网站会通过session访问量反爬虫。session的意思“会话控制”, session对象存储特定用户会话所需的属性和配置信息。这样,当用户在应用程序的Web页之间跳转时,存储在session对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。如果一个session的访问量过大,就会进行封杀或要求输入验证码。
- 网站也会通过User-Agent反爬虫。User-Agent表示浏览器在发送请求时,附带当前浏览器和当前系统环境的参数给服务器,我们可以在Chrome浏览器的审查元素中找到。
2.返回非目标网页
例如去哪儿网的价格
大众点评的评论数等等
3.获取数据变难
- 登录才可以查看数据,而且会设置验证码
你有张良计,我有过梁梯,那么如何反反爬虫呢?
三、如何“反反爬虫”
1.修改请求头
修改请求头中User-Agent
这个在之前的文章中已经有示例,可以翻阅之前的文章查看。
2.修改爬虫的间隔时间
使用time模块的sleep()函数来控制查询的间隔。
3.使用代理
代理(Proxy)是一种特殊的网络服务,允许一个网络终端(一般为客户端)通过这个服务与另一个网络终端(一般为服务器)进行非直接的连接。形象地说,代理就是网络信息的中转站。代理服务器就像一个大的缓冲区,这样能够显著提高浏览速度和效率。
import requests
link = 'http://www.baidu.com'
proxies = {'http':'http://xxx:xxxx'}
response = requests.get(link,proxies=proxies)
4.更换IP地址
- 一种是通过动态IP拨号服务器更换IP,
- 另一种是通过Tor代理服务器的方法。
5.登录获取数据
此部分将在后续文章中介绍