突然想到一种简单的反爬虫方法,大家觉得可行性如何? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
alwayshere
V2EX    程序员

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

  •  1
     
  •   alwayshere 2017 年 3 月 21 日 12400 次点击
    这是一个创建于 3301 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    58 条回复    2020-03-10 00:14:45 +08:00
    RE
        1
    RE  
       2017 年 3 月 21 日 via iPhone
    你说的这三点,只要是针对你网站去爬的,不都可以伪造么……
    alwayshere
        2
    alwayshere  
    OP
       2017 年 3 月 21 日
    @RE 同时满足这三点的,估计一大部分都过滤掉了吧
    friskfly
        3
    friskfly  
       2017 年 3 月 21 日 via Android
    现在爬虫图省事直接用真实的浏览器去爬了。还是高级验证码什么的靠谱点。
    jininij
        4
    jininij  
       2017 年 3 月 21 日 via Android   1
    我都是屏蔽所以 analytics js 的。
    alwayshere
        5
    alwayshere  
    OP
       2017 年 3 月 21 日
    @friskfly 我写爬虫很少用浏览器去爬,要不对方一下流量突然暴涨,肯定要追查 ip 的
    notgod
        6
    notgod  
       2017 年 3 月 21 日
    我忘记了域名是什么了
    就是显示很多域名注册商 域名注册量 还有 isp 的 IP isp 的 ip 绑定了多少网站
    使用的 webserver 等等 一个统计网站

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

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

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

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

    我想到的一个办法是字体替换,类似于“ Font Awesome ”,动态生成字体映射文件,人类看到文字是有意义的文字,而程序抓取出来却是“ asdf ”这样无意义的文本。
    clino
        21
    clino  
       2017 年 3 月 21 日
    @tabris17 但是这样对搜索引擎是不是就不友好了?
    tabris17
        22
    tabris17  
       2017 年 3 月 21 日
    @clino 可搜索引擎不就是一种爬虫么
    firefox12
        23
    firefox12  
       2017 年 3 月 21 日 via iPhone
    你用 css 这么复杂,你自己更新就很容易?其次你觉得你的网站有这么值钱的信息让爬虫这么感兴趣?如果真感兴趣,你这个手段也行?
    nthhdy
        24
    nthhdy  
       2017 年 3 月 21 日
    @practicer 这个我也遇到了
    我觉得去掉一些字和标点用处不大吧?
    只是,自然语言处理它的时候,分句分词可能都出问题.
    这个手段直接调最终的 DOM 接口就能把它还原出来.
    clino
        25
    clino  
       2017 年 3 月 21 日
    @tabris17 所以又防爬虫又对搜索引擎友好的就是不可能的
    只有那种数据都不想被搜索到的网站可以用这种方式
    qqpkat2
        26
    qqpkat2  
       2017 年 3 月 21 日
    我有程序可以跟浏览器一样的访问网页,你这策略,跟没有一样
    mudone
        27
    mudone  
       2017 年 3 月 21 日
    用 headless browser 采集 这些方法都不太管用。
    phrack
        28
    phrack  
       2017 年 3 月 21 日 via Android
    攻防就是一个成本与收益的问题。

    这些做法会增加爬虫成本,就看爬你网站的收益够不够覆盖成本了~

    但是你这是一个个人站,原创内容,那肯定内容不多,就得看你这内容是不是真有料了。
    uqf0663
        29
    uqf0663  
       2017 年 3 月 21 日
    那个...你知道 火车头浏览器 吗?
    linescape
        30
    linescape  
       2017 年 3 月 21 日
    其实只要用户能看到的东西,就能采集起来,大不了你做成图片我来 OCR 识别嘛,至于什么封 IP ,验证 cookie 什么的,那就用真实浏览器+代理+脚本咯
    zuotech
        31
    zuotech  
       2017 年 3 月 21 日
    可以的, 把所有内容弄成动态加载...
    dongoo
        32
    dongoo  
       2017 年 3 月 21 日 via Android
    google analytics ,会被 adb 拦截
    alwayshere
        33
    alwayshere  
    OP
       2017 年 3 月 21 日
    @dongoo 额。。。我的广告同样也被拦截了,我凭啥还让这个人访问我的网页??
    byfar
        34
    byfar  
       2017 年 3 月 21 日
    朋友,留下你的原创内容地址 /奸笑
    dsg001
        35
    dsg001  
       2017 年 3 月 21 日
    @tabris17 猫眼的一些数据就是这种显示 https://jizhi.im/blog/post/maoyan-anti-crawler
    byfar
        36
    byfar  
       2017 年 3 月 21 日
    @dsg001 图像识别什么的是很好玩啊,不过我还是觉得用他说的第一种方法比较快
    jiangzhuo
        37
    jiangzhuo  
       2017 年 3 月 21 日
    @gamecreating 但是现在爬虫也用机器学习(主要是内容识别提取方面),将来机器学习人类浏览网站的习惯,模拟人类。最后演变成 AI 大战了。[doge]
    practicer
        38
    practicer  
       2017 年 3 月 21 日
    @nthhdy 请教一下怎么还原?我采集就是用来分词的。谢谢哈。
    JoyNeop
        39
    JoyNeop  
       2017 年 3 月 21 日 via iPhone
    直接去搜索引擎拿快照,手动斜眼
    stormpeach
        40
    stormpeach  
       2017 年 3 月 21 日
    又要支持搜索引擎,又要反爬虫,不是自相矛盾吗
    fiht
        41
    fiht  
       2017 年 3 月 21 日
    爬虫反不了的。
    我觉得 @jiangzhuo 说得对,爬虫搞到后面就是 AI 的斗争。
    现在爬虫界最难搞的算是 Google 的那种点击的验证码和滑动验证码。
    以极验为例,就很难搞。后台机器学习出模型,前台的滑动数据给后台验证。验证不过就不让访问( AI 反爬虫)
    作为爬虫方要做的就是怎么让机器滑出来的轨迹能被对方接受,也需要用到数据搞机器学习( AI 爬虫)
    we3613040
        42
    we3613040  
       2017 年 3 月 21 日
    @fiht 极验证也可以破解。我之前公司就用那个 就被破解了
    zaishanfeng
        43
    zaishanfeng  
       2017 年 3 月 21 日 via Android
    没访问 10 个页面弹一个 recaptra
    zaishanfeng
        44
    zaishanfeng  
       2017 年 3 月 21 日 via Android
    分析 nginx 日志 对于 pv 过多的 isp ,属于机房的相似 ip 将其加入黑名单,首次访问即弹 recaptra
    Technetiumer
        45
    Technetiumer  
       2017 年 3 月 21 日
    对搜索引擎的 IP 段都显示正常纯文本内容,其他 IP 包括用户用楼上的各种牛逼反爬方式,但是需要收集搜索引擎 IP
    cdwyd
        46
    cdwyd  
       2017 年 3 月 21 日 via Android
    @practicer
    这么巧,刚好有人让采集这个。前后用了好几个小时才找到了通用的方法。
    cdwyd
        47
    cdwyd  
       2017 年 3 月 21 日 via Android
    @jininij
    其实,真的是一行一行调试的,我就干过。和你的思路差不多,变量名随机,函数名随机,逻辑结构都是随机的。
    kaneg
        48
    kaneg  
       2017 年 3 月 21 日 via iPhone
    道高一尺,魔高一丈。除非你一直更新策略,否则没有一劳永逸的对策。最近很火的人工智能自我学习倒是个有可能持续起作用
    neurocomputing
        49
    neurocomputing  
       2017 年 3 月 21 日
    这思路并不新 而且也不难实施 但是没有什么实际的用
    只要人家想抓 怎么都能抓

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

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

    比较罗嗦,希望我说明白了 :)
    dearmymy
        57
    dearmymy  
       2017 年 3 月 22 日
    只要针对你的爬虫都没用
    pyengwoei
        58
    pyengwoei  
       2020 年 3 月 10 日
    @darluc 有联系方式吗
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     871 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 22:29 PVG 06:29 LAX 15:29 JFK 18:29
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86