实现反爬虫

举报
我们都是云专家 发表于 2019/09/06 17:48:17 2019/09/06
【摘要】 反爬虫的过程如上图所示,相当于在服务器和资源之间建立了一道防火墙,在黑名单中的请求将会被当成垃圾丢弃掉。

实现反爬虫

之前的理论和逻辑,在实验中都得到了验证,那么接下来我们就通过黑名单策略将 Python 和 Curl 发起的请求过滤掉,只允许 Firefox 和 Postman 的请求通过,并且对被过滤的请求返回 403 错误提示。

20190906ly00043.PNG

反爬虫的过程如上图所示,相当于在服务器和资源之间建立了一道防火墙,在黑名单中的请求将会被当成垃圾丢弃掉。

配置 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
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。