实现反爬虫
实现反爬虫
之前的理论和逻辑,在实验中都得到了验证,那么接下来我们就通过黑名单策略将 Python 和 Curl 发起的请求过滤掉,只允许 Firefox 和 Postman 的请求通过,并且对被过滤的请求返回 403 错误提示。
反爬虫的过程如上图所示,相当于在服务器和资源之间建立了一道防火墙,在黑名单中的请求将会被当成垃圾丢弃掉。
配置 Nginx 规则
Nginx 提供了配置文件以及对应的规则,允许我们过滤掉不允许通过的请求,本次反爬虫我们使用的就是它。Nginx 的配置文件通常放在/etc/nginx/
目录下,名为nginx.conf
,我们通过查看配置文件来看一看,站点的配置文件在什么地方。再通过系统自带的编辑器(笔者所用系统自带 Nano,其他系统可能自带 Vim)来编辑配置文件。在配置文件中找到站点配置文件地址(笔者所用电脑存放路径为/etc/nginx/sites-enable
),再到站点配置文件中找到local
级别的配置,并在其中加上一下内容:
if ($http_user_agent ~* (Python|Curl)) { return 403; } 复制代码
这段配置的释义是判断请求中请求头字符串中是否包含有 Python或者 Curl,如果包含则直接返回 403 错误,否则返回正常的资源。完成配置后保存,再通过命令:
sudo nginx -s reload 复制代码
整个操作过程如上图所示,让 Nginx 服务器重新载入配置文件,使得刚才的配置生效。
反爬虫效果测试
重复上面访问的步骤,通过浏览器、Python 代码、Postman 工具和 Curl发起请求。从返回的结果就可以看到,与刚才是有所区别的。
浏览器返回的是正常的页面,说明没有收到影响;
Python 代码的状态码变成了 403,而不是之前的 200
Postman 跟之前一样,返回了正确的内容;
Curl 跟 Python 一样,无法正确的访问资源,因为它们发起的请求都被过滤掉了。
提示:你可以继续修改 Nginx 的配置来进行测试,最终会发现结果会跟现在的一样:只要在黑名单中,请求就会被过滤掉并且返回 403 错误。
提示:这就是你平时编写爬虫代码时,需要在请求头中伪造浏览器的原因。
绕过 User-Agent 方式的反爬虫
通过上面的学习,我们知道了 User-Agent 反爬虫这种手段的原理,并且通过 Nginx 来实现了反爬虫,接下来我们一起学习如何绕过这种反爬虫措施。
作者:云享专家韦世东
链接:https://juejin.im/post/5bdeb32d51882516fa635ace
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
- 点赞
- 收藏
- 关注作者
评论(0)