完全做到反爬虫肯定是个伪命题,反爬虫只能最大限度地去遏制,而不是杀绝,这几天一直在构思怎样将我辛辛苦苦的原创内容加以保护别被爬了,但杀爬虫杀得太猛把可爱的搜索引擎蜘蛛们也赶尽杀绝了,所以想了一种简单的方法:
上面这个 ban 了不是指给他抛出一个 400 错误,而是逐渐延迟加载时间,让采集者不能发现, php: sleep($i),$i 表示请求次数
大家觉得是否可行,或者我在这抛砖引玉一下,除了通常的蜜罐法(烂大街了,我采集网站都是先看对方 robots.txt 有没有蜜罐),或者限制 ip 频率法(误伤蜘蛛),大家有没有更好的方法?
1
RE 2017-03-21 09:02:42 +08:00 via iPhone
你说的这三点,只要是针对你网站去爬的,不都可以伪造么……
|
2
alwayshere OP @RE 同时满足这三点的,估计一大部分都过滤掉了吧
|
3
friskfly 2017-03-21 09:05:39 +08:00 via Android
现在爬虫图省事直接用真实的浏览器去爬了。还是高级验证码什么的靠谱点。
|
4
jininij 2017-03-21 09:06:47 +08:00 via Android 1
我都是屏蔽所以 analytics js 的。
|
5
alwayshere OP @friskfly 我写爬虫很少用浏览器去爬,要不对方一下流量突然暴涨,肯定要追查 ip 的
|
6
notgod 2017-03-21 09:07:40 +08:00
我忘记了域名是什么了
就是显示很多域名注册商 域名注册量 还有 isp 的 IP isp 的 ip 绑定了多少网站 使用的 webserver 等等 一个统计网站 最早的时候 我是拿来抓淘宝新绑定的网店域名 二级域名 然后干些不可描述的事 后来抓不到 那边加了个 Cookies 有效期验证 这个我尝试 N 多方法 爬不到数据 无论如何 都爬不到 但是人工访问没问题 好像的算法是这个逻辑 A 访问页面 生成一个 cookies 这个信息是加密的 包括有效期 A 在访问其他页面 解密 验证 cookies 算有效时 有效放行 无效 显示 spam 验证 |
7
alwayshere OP @notgod 搜索引擎支持 cookie 么?不会吧可爱的小蜘蛛也给误杀了?
|
8
nicevar 2017-03-21 09:11:33 +08:00 via iPhone
只要你的网站能正常访问,就没法屏蔽爬虫,这个事情好无聊
|
9
notgod 2017-03-21 09:12:07 +08:00 2
@alwayshere 封 IP 什么的都是浮云,
我也遇到封 IP 但是使用变态方式解决了 直接拿 AKAMAI 的 CDN 去绑源站 , 然后利用 AKAMAI 的 N 多 IP 轮番上阵 左一遍又一遍的把别人网站轮的不要不要的....... |
10
notgod 2017-03-21 09:13:29 +08:00
@alwayshere 新一代的爬虫都支持 cookie , 而且可以解析 js 内容了 差不多和人访问的区别不大
不要认为还是以前 爬网页 只是提取文本和图片内容 |
11
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 |
12
darluc 2017-03-21 09:22:15 +08:00
说一下,以前公司遇到爬虫都是吐脏数据的
|
13
alwayshere OP @darluc 这个有点贱,不怕对方报复么
|
14
alwayshere OP @practicer 这个。。。蜘蛛没法识别了吧,全是 css 显示文本。。。
|
15
kindjeff 2017-03-21 09:26:51 +08:00 via iPhone
百度知道在你大量访问的时候,返回的是字的图片,就是几个字中间出现一个图片的字,用户看起来没有区别,爬虫就爬不到所有的字。
|
16
gamecreating 2017-03-21 09:27:59 +08:00
你还是研究下机器学习...能自住修改反爬规则
|
17
jininij 2017-03-21 09:28:15 +08:00 via Android
我是每个 session 都随机新建一个密码。然后在输出页面里用这个密码对称加密。在页面 head 里放一个外部 js ,在这个 js 是用 php 生成的,将替换的字替解密换回去。因为 head 里的 js 会阻塞显示,所以用户根本看不出文字错误。但查看源码是一堆乱码。
为了防止复制,这些解密后的字符是通过 canvas 绘制到页面中的。再加点与用户对应的水印最好。 有本事就去逐行调试 js 。 |
18
RE 2017-03-21 09:35:02 +08:00 via iPhone 2
@alwayshere 你想多了,要满足这三点太简单了, V2 的 API 调用限制了每 IP 每小时 120 次,照样都把三十万帖爬下来了,关键就看要不要爬而已
|
19
xuan_lengyue 2017-03-21 09:36:06 +08:00
发现爬虫直接返回假数据怎么破。
|
20
tabris17 2017-03-21 09:48:21 +08:00
太简单了,根本防不住。
要防爬虫,最彻底的就是让程序抓取到内容也无法解读,而人类却能一眼看懂。 我想到的一个办法是字体替换,类似于“ Font Awesome ”,动态生成字体映射文件,人类看到文字是有意义的文字,而程序抓取出来却是“ asdf ”这样无意义的文本。 |
23
firefox12 2017-03-21 09:54:06 +08:00 via iPhone
你用 css 这么复杂,你自己更新就很容易?其次你觉得你的网站有这么值钱的信息让爬虫这么感兴趣?如果真感兴趣,你这个手段也行?
|
24
nthhdy 2017-03-21 09:58:38 +08:00
|
26
qqpkat2 2017-03-21 10:01:22 +08:00
我有程序可以跟浏览器一样的访问网页,你这策略,跟没有一样
|
27
mudone 2017-03-21 10:02:37 +08:00
用 headless browser 采集 这些方法都不太管用。
|
28
phrack 2017-03-21 10:37:03 +08:00 via Android
攻防就是一个成本与收益的问题。
这些做法会增加爬虫成本,就看爬你网站的收益够不够覆盖成本了~ 但是你这是一个个人站,原创内容,那肯定内容不多,就得看你这内容是不是真有料了。 |
29
uqf0663 2017-03-21 11:03:29 +08:00
那个...你知道 火车头浏览器 吗?
|
30
linescape 2017-03-21 11:13:48 +08:00
其实只要用户能看到的东西,就能采集起来,大不了你做成图片我来 OCR 识别嘛,至于什么封 IP ,验证 cookie 什么的,那就用真实浏览器+代理+脚本咯
|
31
zuotech 2017-03-21 11:36:04 +08:00
可以的, 把所有内容弄成动态加载...
|
32
dongoo 2017-03-21 12:02:10 +08:00 via Android
google analytics ,会被 adb 拦截
|
33
alwayshere OP @dongoo 额。。。我的广告同样也被拦截了,我凭啥还让这个人访问我的网页??
|
34
byfar 2017-03-21 12:46:56 +08:00
朋友,留下你的原创内容地址 /奸笑
|
35
dsg001 2017-03-21 12:48:07 +08:00
@tabris17 猫眼的一些数据就是这种显示 https://jizhi.im/blog/post/maoyan-anti-crawler
|
37
jiangzhuo 2017-03-21 13:13:01 +08:00
@gamecreating 但是现在爬虫也用机器学习(主要是内容识别提取方面),将来机器学习人类浏览网站的习惯,模拟人类。最后演变成 AI 大战了。[doge]
|
39
JoyNeop 2017-03-21 13:47:51 +08:00 via iPhone
直接去搜索引擎拿快照,手动斜眼
|
40
stormpeach 2017-03-21 15:43:08 +08:00
又要支持搜索引擎,又要反爬虫,不是自相矛盾吗
|
41
fiht 2017-03-21 16:35:44 +08:00
爬虫反不了的。
我觉得 @jiangzhuo 说得对,爬虫搞到后面就是 AI 的斗争。 现在爬虫界最难搞的算是 Google 的那种点击的验证码和滑动验证码。 以极验为例,就很难搞。后台机器学习出模型,前台的滑动数据给后台验证。验证不过就不让访问( AI 反爬虫) 作为爬虫方要做的就是怎么让机器滑出来的轨迹能被对方接受,也需要用到数据搞机器学习( AI 爬虫) |
43
zaishanfeng 2017-03-21 16:53:05 +08:00 via Android
没访问 10 个页面弹一个 recaptra
|
44
zaishanfeng 2017-03-21 16:56:14 +08:00 via Android
分析 nginx 日志 对于 pv 过多的 isp ,属于机房的相似 ip 将其加入黑名单,首次访问即弹 recaptra
|
45
Technetiumer 2017-03-21 18:56:07 +08:00
对搜索引擎的 IP 段都显示正常纯文本内容,其他 IP 包括用户用楼上的各种牛逼反爬方式,但是需要收集搜索引擎 IP
|
47
cdwyd 2017-03-21 19:19:14 +08:00 via Android
@jininij
其实,真的是一行一行调试的,我就干过。和你的思路差不多,变量名随机,函数名随机,逻辑结构都是随机的。 |
48
kaneg 2017-03-21 19:38:33 +08:00 via iPhone
道高一尺,魔高一丈。除非你一直更新策略,否则没有一劳永逸的对策。最近很火的人工智能自我学习倒是个有可能持续起作用
|
49
neurocomputing 2017-03-21 22:42:11 +08:00
这思路并不新 而且也不难实施 但是没有什么实际的用
只要人家想抓 怎么都能抓 内容防盗更多的是需要技术之外的东西 |
50
crab 2017-03-21 22:48:02 +08:00
|
51
victor 2017-03-21 23:05:48 +08:00
不如每次看你的网站,都要发手机验证码好不好
|
54
nazhenhuiyi294 2017-03-22 09:03:25 +08:00
@friskfly 请教一下,怎么用浏览器爬的
|
56
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 到真实汉字的对应关系. 大体的思路就是这样. 比较罗嗦,希望我说明白了 :) |
57
dearmymy 2017-03-22 12:42:43 +08:00
只要针对你的爬虫都没用
|