我的博客用的 Nginx 做服务器,我用 Python 写了个日志过滤器,目的是把所有搜索引擎、网络爬虫等流量过滤掉,只展现普通用户的访问。Nginx 的日志记录主要分为如下几种:
上面这几种可以从 User-Agent 分辨出来。但有些 IP,我在 ipip.net 上查询,发现指向一些机房,并说明是机器人,像这种该怎么过滤出来呢?
大家有什么思路,欢迎分享。
1
jugelizi 2019-04-21 16:39:43 +08:00 2
看有没有 js css 的日志
大部分机器还没必要开浏览器 所以一个 IP 重来不请求 js 文件几乎确认是爬虫 |
2
hakono 2019-04-21 16:47:50 +08:00 2
一个是请求频率,再一个是请求路径是否正常
请求频率这个没啥好说的 路径这个,比如如果一个 ip 按着 /book/1 /book/2 /book/3 这种普通用户不会采用的访问姿势路访问下去,那 100%是爬虫。或者在页面里放入蜜罐地址,爬虫识别的到但用户看不到,有时候写爬虫的可能不在乎这点就掉坑里了 再一个非常有效的方法就是后台偷偷换个新 api,但保留旧 api。 前端使用新 api,而旧 api 因为没有被关闭,爬虫还能正常读取,如果不是直接从页面里提取 api 的爬虫,代码不会立刻更新,那么更新上线后依旧在用旧 api 的 100%是爬虫。 再一个就是上面说的,检测 js css favo.ico 这些文件。没采用 headless 浏览器的爬虫,用这方式检测一抓一个准 |
3
hakono 2019-04-21 16:51:22 +08:00
至于那些采用了 headless 浏览器的爬虫,这就是完全另外的思路了
比如想办法找漏洞,看看能不能检测到浏览器的环境 如果个点比较难,剩下的就是大数据,ai 分析这条路了。看到过几个大公司就有招聘识别用户操作是否合规的 ai 工程师,顺便还能抓外挂 |
4
lasuar 2019-04-21 17:07:26 +08:00
* useragent 是否合法
* 请求频率是否稳定 * 请求路径是否有规律,楼上说的 /book/1,/book/2 这种 * 是否某一段时间有大量 IP 短时高频请求服务器(反常行为) 如果以上都正常,即使是爬虫也不妨碍服务器运行。 |