版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xmt1139057136/article/details/93148495
昨天的那篇文章中,我看到不少人在留言。其中有不少好问题,比如:爬虫不遵守 Robots.txt 规范怎么办?怎么知道网站中有爬虫再抓取网页呢?nginx,apache 的日志怎么分析呢?今天,希望通过我的这篇文章能够让大家学习到如何分析爬虫的蛛丝马迹!
确实,有很多爬虫是不遵守 Robots.txt 规范的。但是你也不要怕,因为服务器中通常对每一个请求都记录的有日志信息。我们可以通过分析日志信息来看看到底哪些是恶意的爬取我的网页。比如,nginx 的日志信息,通常如下所示:
需要注意的是,你的 Nginx 的日志可能和我的不一样。具体日志中可以写入哪些信息,这个是可以配置的,这里我就不在扩展了!
上面日志的大致内容从左到右记录的是,ip 信息,时间,请求方法,请求资源,http 版本,响应状态码,字节长度,user-agent 这些信息。
可以看到,这很明显就是一个爬虫。BLEXBot 这个爬虫其实,啥用都没有。所以,我们可以通过 Robots.txt 把它禁掉。
但是,了解 HTTP 协议的网友都知道,user-agent 并不是可靠的,如果 user-agent 进行了伪造,该怎么办呢?
你虽然伪造了 user-agent,但你的 ip 可能是没有变的。恶意爬虫肯定会频繁的爬你的网页,它的 ip 可能就会频繁的出现在日志中。所以,我们可以通过下面的命令来统计哪些 ip 出现的次数最高。
执行这个命令之后,会把排行榜前 10 的 ip 统计出来。
针对上面命令中的参数,我解释一下!
当然,如果你嫌这个命令太复杂,可以使用 goaccess -f access.log 来实现。关于 goaccess 我前面讲过的,这里不展开。
有时候,我们查看整天的 ip 次数,也看不出来有什么异常。所以,我们还可以分时段来统计。
查看 2019 某一时间段的IP访问量(4-5点)。
查看访问最频繁的前 100 个 IP。
上面这些命令,如果你记不住,也没关系,建议收藏起来。以后遇到的时候,拿出来方便使用!
当找出异常 ip 之后,下一步,我们就可以通过防火墙把这些 ip 给封了。当然可能会存在误判,或者是封住了正常用户的 ip,所以,我们可以通过 user-agent、IP,浏览器执行环境,网页埋点,token,404 次数等各种有用信息找出爬出的指纹,给它封掉。
或者是给爬虫返回错误的,假的信息,误导它们。比如,通过我们前面的 OpenResty 就可以实现,对爬虫进行误导!
目前,国内反爬虫做的最好的当数淘宝了。如果你们像学爬虫,那天能爬下来一些淘宝的数据,你就登峰造极了!