Python 绕过反爬虫
在 Requests 库中,允许用户自定义请求头信息,所以我们可以在请求头信息中将 User-Agent 的值改为浏览器的请求头标识,这样就能够欺骗 Nginx 服务器,达到绕过反爬虫的目的。将之前的 Python 代码改为:
import requests # 伪造请求头信息 欺骗服务器 headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:9527.0) Gecko/20100101 Firefox/9527.0"} resp = requests.get("http://127.0.0.1", headers=headers) print(resp.status_code) 复制代码
代码中我们用到的是 Firefox 浏览器的请求头信息,而且为了更好的观察效果,我们可以更改浏览器的版本号(改成9527)以区分真实浏览器(这不会影响请求结果)。运行这个文件,看看得到的返回结果:
200 复制代码
不是 403 了,说明已经绕过了这种类型的反爬虫(你看,这就是网上那些文章所写的,需要修改请求头信息才能绕过反爬虫,现在你明白是怎么回事了吧)。
练习:使用 Postman 再测试一下
一个测试也许不准确,你还可以通过 Postman 再来测试一下,还记得怎么做吗?
将需要过滤的标识(Postman)添加到 Nginx 的配置文件中
重载配置文件,使其生效
通过 Postman 发起请求看看是否会被过滤
再次使用 Postman 工具,并且携带上浏览器的标识再发起请求,看看是否会被过滤
小提示:这个练习如果你自己来做的话,会更容易理解其中的原理,并且可以加深你的映像。
总结
回顾一下,整篇文章的过程:
我们从遇到的反爬虫现象开始入手,接着学习了 User-Agent 这种反爬虫策略的原理,并且通过 Nginx 实现了反爬虫,最后通过 Python 代码示例和 Postman 示例来验证我们的想法,最终清清楚楚、明明白白的了解到其中的缘由,待目标改变了它的策略时,我们也可以清楚的知道可以使用哪些方法来绕过。
思考:示例中,我仅仅是使用 Python 编写爬虫来演示,那么 Java 写的爬虫呢?PHP 编写的爬虫呢?安卓端发起的请求呢?
作者:云享专家韦世东
链接:https://juejin.im/post/5bdeb32d51882516fa635ace
来源:掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
- 点赞
- 收藏
- 关注作者
评论(0)