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

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 频率法(误伤蜘蛛),大家有没有更好的方法?

11309 次点击
所在节点    程序员
58 条回复
fiht
2017-03-21 16:35:44 +08:00
爬虫反不了的。
我觉得 @jiangzhuo 说得对,爬虫搞到后面就是 AI 的斗争。
现在爬虫界最难搞的算是 Google 的那种点击的验证码和滑动验证码。
以极验为例,就很难搞。后台机器学习出模型,前台的滑动数据给后台验证。验证不过就不让访问( AI 反爬虫)
作为爬虫方要做的就是怎么让机器滑出来的轨迹能被对方接受,也需要用到数据搞机器学习( AI 爬虫)
we3613040
2017-03-21 16:50:01 +08:00
@fiht 极验证也可以破解。我之前公司就用那个 就被破解了
zaishanfeng
2017-03-21 16:53:05 +08:00
没访问 10 个页面弹一个 recaptra
zaishanfeng
2017-03-21 16:56:14 +08:00
分析 nginx 日志 对于 pv 过多的 isp ,属于机房的相似 ip 将其加入黑名单,首次访问即弹 recaptra
Technetiumer
2017-03-21 18:56:07 +08:00
对搜索引擎的 IP 段都显示正常纯文本内容,其他 IP 包括用户用楼上的各种牛逼反爬方式,但是需要收集搜索引擎 IP
cdwyd
2017-03-21 19:10:46 +08:00
@practicer
这么巧,刚好有人让采集这个。前后用了好几个小时才找到了通用的方法。
cdwyd
2017-03-21 19:19:14 +08:00
@jininij
其实,真的是一行一行调试的,我就干过。和你的思路差不多,变量名随机,函数名随机,逻辑结构都是随机的。
kaneg
2017-03-21 19:38:33 +08:00
道高一尺,魔高一丈。除非你一直更新策略,否则没有一劳永逸的对策。最近很火的人工智能自我学习倒是个有可能持续起作用
neurocomputing
2017-03-21 22:42:11 +08:00
这思路并不新 而且也不难实施 但是没有什么实际的用
只要人家想抓 怎么都能抓

内容防盗更多的是需要技术之外的东西
crab
2017-03-21 22:48:02 +08:00
victor
2017-03-21 23:05:48 +08:00
不如每次看你的网站,都要发手机验证码好不好
falcon05
2017-03-21 23:23:40 +08:00
@notgod 很好奇 cdn 这个,具体是怎么做?
mingyun
2017-03-21 23:42:32 +08:00
@dsg001 猫眼这个厉害了
nazhenhuiyi294
2017-03-22 09:03:25 +08:00
@friskfly 请教一下,怎么用浏览器爬的
practicer
2017-03-22 11:42:51 +08:00
@crab 谢谢啊
nthhdy
2017-03-22 11:49:42 +08:00
@practicer
每个标点或者常用字都是一个 span 标签,用她的 class 来表示是逗号还是句号等.
但 class 名称对应哪个汉字,这个每次都在变.
每一楼有一段 javascript,uglify 后的.class 名称到汉字的对应关系,就在这里.执行 js 代码的过程中,js 调用了 DOM 接口,把相应的 css rule 插入到该 class 的节点中(设置了 content 属性),汉字就显示出来了.

根据上面的原理,我们不必管它 js 里面做了什么,只要看懂它最终调了哪个接口(我记得好像是 style node 的 insertRule 函数),用自己的函数将它替换,就能得到 class 到真实汉字的对应关系.
大体的思路就是这样.

比较罗嗦,希望我说明白了 :)
dearmymy
2017-03-22 12:42:43 +08:00
只要针对你的爬虫都没用
pyengwoei
2020-03-10 00:14:45 +08:00
@darluc 有联系方式吗

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

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

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

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

© 2021 V2EX