突然想到一种简单的反爬虫方法,大家觉得可行性如何?

2017-03-21 08:59:53 +08:00
 alwayshere

完全做到反爬虫肯定是个伪命题,反爬虫只能最大限度地去遏制,而不是杀绝,这几天一直在构思怎样将我辛辛苦苦的原创内容加以保护别被爬了,但杀爬虫杀得太猛把可爱的搜索引擎蜘蛛们也赶尽杀绝了,所以想了一种简单的方法:

  1. 把 header 包含有 bot 和 spider 的 ip 后台暂时放行,加入队列,后台 daemon 进程逐一验证其 host 地址是否为搜索引擎
  2. 验证客户端的 cookie ,我使用的是 Google analytics ,没有诸如“_ga ”或者“_gat ”之类的 cookie 把它 ban 了
  3. 在页面角落处插入一个隐形的动态图片: src="checkScraper.php" width="0" height="0",没加载这个图片的 ip 也给 ban 了

上面这个 ban 了不是指给他抛出一个 400 错误,而是逐渐延迟加载时间,让采集者不能发现, php: sleep($i),$i 表示请求次数

大家觉得是否可行,或者我在这抛砖引玉一下,除了通常的蜜罐法(烂大街了,我采集网站都是先看对方 robots.txt 有没有蜜罐),或者限制 ip 频率法(误伤蜘蛛),大家有没有更好的方法?

11554 次点击
所在节点    程序员
58 条回复
RE
2017-03-21 09:02:42 +08:00
你说的这三点,只要是针对你网站去爬的,不都可以伪造么……
alwayshere
2017-03-21 09:05:15 +08:00
@RE 同时满足这三点的,估计一大部分都过滤掉了吧
friskfly
2017-03-21 09:05:39 +08:00
现在爬虫图省事直接用真实的浏览器去爬了。还是高级验证码什么的靠谱点。
jininij
2017-03-21 09:06:47 +08:00
我都是屏蔽所以 analytics js 的。
alwayshere
2017-03-21 09:07:20 +08:00
@friskfly 我写爬虫很少用浏览器去爬,要不对方一下流量突然暴涨,肯定要追查 ip 的
notgod
2017-03-21 09:07:40 +08:00
我忘记了域名是什么了
就是显示很多域名注册商 域名注册量 还有 isp 的 IP isp 的 ip 绑定了多少网站
使用的 webserver 等等 一个统计网站

最早的时候 我是拿来抓淘宝新绑定的网店域名 二级域名 然后干些不可描述的事

后来抓不到
那边加了个 Cookies 有效期验证 这个我尝试 N 多方法 爬不到数据
无论如何 都爬不到 但是人工访问没问题

好像的算法是这个逻辑
A 访问页面 生成一个 cookies 这个信息是加密的 包括有效期
A 在访问其他页面 解密 验证 cookies 算有效时 有效放行 无效 显示 spam 验证
alwayshere
2017-03-21 09:09:44 +08:00
@notgod 搜索引擎支持 cookie 么?不会吧可爱的小蜘蛛也给误杀了?
nicevar
2017-03-21 09:11:33 +08:00
只要你的网站能正常访问,就没法屏蔽爬虫,这个事情好无聊
notgod
2017-03-21 09:12:07 +08:00
@alwayshere 封 IP 什么的都是浮云,
我也遇到封 IP 但是使用变态方式解决了
直接拿 AKAMAI 的 CDN 去绑源站 , 然后利用 AKAMAI 的 N 多 IP 轮番上阵
左一遍又一遍的把别人网站轮的不要不要的.......
notgod
2017-03-21 09:13:29 +08:00
@alwayshere 新一代的爬虫都支持 cookie , 而且可以解析 js 内容了 差不多和人访问的区别不大
不要认为还是以前 爬网页 只是提取文本和图片内容
practicer
2017-03-21 09:18:51 +08:00
这两天发现一个没碰到过的防爬例子,
用 css display: inline-block;width: auto 穿插着自动显示文本,蜘蛛和爬虫互不影响
网址: http://club.autohome.com.cn/bbs/thread-c-3170-60727592-1.html
darluc
2017-03-21 09:22:15 +08:00
说一下,以前公司遇到爬虫都是吐脏数据的
alwayshere
2017-03-21 09:22:52 +08:00
@darluc 这个有点贱,不怕对方报复么
alwayshere
2017-03-21 09:24:49 +08:00
@practicer 这个。。。蜘蛛没法识别了吧,全是 css 显示文本。。。
kindjeff
2017-03-21 09:26:51 +08:00
百度知道在你大量访问的时候,返回的是字的图片,就是几个字中间出现一个图片的字,用户看起来没有区别,爬虫就爬不到所有的字。
gamecreating
2017-03-21 09:27:59 +08:00
你还是研究下机器学习...能自住修改反爬规则
jininij
2017-03-21 09:28:15 +08:00
我是每个 session 都随机新建一个密码。然后在输出页面里用这个密码对称加密。在页面 head 里放一个外部 js ,在这个 js 是用 php 生成的,将替换的字替解密换回去。因为 head 里的 js 会阻塞显示,所以用户根本看不出文字错误。但查看源码是一堆乱码。
为了防止复制,这些解密后的字符是通过 canvas 绘制到页面中的。再加点与用户对应的水印最好。
有本事就去逐行调试 js 。
RE
2017-03-21 09:35:02 +08:00
@alwayshere 你想多了,要满足这三点太简单了, V2 的 API 调用限制了每 IP 每小时 120 次,照样都把三十万帖爬下来了,关键就看要不要爬而已
xuan_lengyue
2017-03-21 09:36:06 +08:00
发现爬虫直接返回假数据怎么破。
tabris17
2017-03-21 09:48:21 +08:00
太简单了,根本防不住。

要防爬虫,最彻底的就是让程序抓取到内容也无法解读,而人类却能一眼看懂。

我想到的一个办法是字体替换,类似于“ Font Awesome ”,动态生成字体映射文件,人类看到文字是有意义的文字,而程序抓取出来却是“ asdf ”这样无意义的文本。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/349009

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX