V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
nikoo
V2EX  ›  问与答

如何隐藏页面的文字来避免爬虫?

  •  1
     
  •   nikoo · 2017-01-21 08:00:28 +08:00 · 4564 次点击
    这是一个创建于 2841 天前的主题,其中的信息可能已经有所发展或是发生改变。
    原创文学网站,同行基本是把文章转换为图片后显示,但这样的问题是转换时消耗服务器资源与样式调整比较麻烦,但好处是不仅可以防止爬虫同时还可以防止用户直接复制文章。

    如果在不考虑用户直接复制文章,仅做到加密 /隐藏文字来防止页面源码爬虫的话,有什么实现方法呢?

    我知道理论与技术上这不可能做到完全避免内容被针对性的复制与爬取,但只要做到能杜绝大部分的通用爬虫与没有 Javascript 引擎的爬虫就可以了。

    希望看到各位的奇技淫巧与思维的火花。
    26 条回复    2017-01-21 19:55:12 +08:00
    ericls
        1
    ericls  
       2017-01-21 08:01:34 +08:00 via iPhone   ❤️ 1
    用错综复杂的 table 文字的顺序和 html 里面的顺序不一样
    nikoo
        2
    nikoo  
    OP
       2017-01-21 08:03:03 +08:00
    @ericls 谢谢,什么叫“错综复杂的 table 文字的顺序”?是纯 HTML 吗?如何实现?
    imn1
        3
    imn1  
       2017-01-21 08:15:19 +08:00
    其实就一个理念,让人阅读容易,让机器阅读困难(或者经过机器后,让其他人阅读困难)
    例如,全部标点换成图片
    uucloud
        4
    uucloud  
       2017-01-21 08:22:16 +08:00
    每天随机改变一下 dom 结构和文字标签的属性名
    sheldor
        5
    sheldor  
       2017-01-21 08:35:23 +08:00 via iPhone
    因为还要防止被人随意复制,所以个人认为无解
    livelazily
        6
    livelazily  
       2017-01-21 08:35:48 +08:00
    @nikoo 每一行的文字都放到一个空白的不带额外属性的的 div 里,每行文字都是乱序, 加载完成后用 js 调整为正确的顺序
    des
        7
    des  
       2017-01-21 08:40:06 +08:00 via Android
    自定义字体,隔一段时间去换。
    多种方式换着来。

    总感觉会有人来打我😂
    kchum
        8
    kchum  
       2017-01-21 08:43:03 +08:00 via iPad
    还可以截图 OCR 啊,防不胜防
    xuan880
        9
    xuan880  
       2017-01-21 08:45:11 +08:00 via Android
    现在盗版都是自动抓取,自动 OCR ,只要作品阅读量大就无解,除非是那种没人去的小站,盗版都没人盗。
    nailuoGG
        10
    nailuoGG  
       2017-01-21 08:47:52 +08:00
    爬网站时碰到以下这些情况会比较想吐槽:

    - 关键元素没有 class 、 id
    - 有位置随机的空 div
    - 全部 table 或全部用 div
    nailuoGG
        11
    nailuoGG  
       2017-01-21 08:51:22 +08:00
    记得有个方法是:网站载入前通过 js 进行运算,用算出来的 key 来获取正文。

    主要思路是提高爬取成本,但是这个方法对有大量数据的站更有效。
    yidinghe
        12
    yidinghe  
       2017-01-21 09:04:12 +08:00 via Android   ❤️ 1
    用 canvas 写文字
    Yourshell
        13
    Yourshell  
       2017-01-21 09:05:14 +08:00 via Android
    让新手来写页面
    gouchaoer
        14
    gouchaoer  
       2017-01-21 09:16:04 +08:00 via Android   ❤️ 4
    作为全职爬虫工程师,我表示上面的都不靠谱。。。。

    第一,转化成图片是个很不错的方法, cpu 不是问题,你把图片缓存起来就 ok 了。。然而对 seo 和移动端不那么友好。。。。至于爬虫要 ocr ,这个也要付出相应的成本


    第二,根据账户行为控制,如果注册用手机注册,那么封了一个爬虫账号后就等于封了一个手机,爬的成本立刻上升。然后由于市场上有几 kw 个黑市手机号,能搞到这些手机号注册的业余爬虫码农做不到。那么基于行为怎么搞呢?很简单,一个用户的翻页速度和跨作品阅读都是很好的特征,写一些代码就能判断出爬虫,封的时候要慢慢封,不要让人猜出你封的策略。。。。


    当然了,我个人倾向第二个方案。。。。你如果想要 seo 的话,可以每段做成一个 html ,路径用 hash ,让人猜不出路径规则无法遍历,这样搜索引擎又能索引,又能放爬虫。
    scnace
        15
    scnace  
       2017-01-21 09:16:08 +08:00 via Android
    放个 pdf 预览框不是稳得 1B !
    gouchaoer
        16
    gouchaoer  
       2017-01-21 09:29:24 +08:00 via Android
    防那种业余的爬虫很简单,你页面动态生成的话。。。制作一些 html 模板,翻页啊文章正文的元素的 id 之类的经常变,但是由于你前端 js 已经和模板耦合很厉害了,如果 js 是由后端生成的可以这么做。。。这样可以防一些傻瓜爬虫
    loading
        17
    loading  
       2017-01-21 09:41:56 +08:00 via Android   ❤️ 1
    用 js 过去编码过的数据,解密后用 canvs 显示
    SpringHack
        18
    SpringHack  
       2017-01-21 10:07:02 +08:00 via Android
    dom 结构和文字结构是反的
    Suclogger
        19
    Suclogger  
       2017-01-21 10:25:55 +08:00
    @gouchaoer 一名业余爬虫码农表示很容易找到一堆接收验证码的网站,还提供各种易用的 api ,费用约¥0.1 元一条
    Aspx
        20
    Aspx  
       2017-01-21 10:32:09 +08:00
    现在 OCR 识别挺成熟了,转成图片这招意义也不大了。只能说现行法律的犯罪成本不高啊
    bxb100
        21
    bxb100  
       2017-01-21 12:06:06 +08:00 via Android
    那你 seo 不得炸
    b821025551b
        22
    b821025551b  
       2017-01-21 12:28:54 +08:00
    正常文章里随机几个字加一次 span , span 之间加干扰 span 文字,加上隐藏属性的类;两种 span 的 class 随机换, js 加载不同的 css 。这样可以不影响用户浏览器正常的观看,但是爬虫会多很多干扰文字导致无法阅读。
    gamexg
        23
    gamexg  
       2017-01-21 13:00:33 +08:00
    我见过最疯狂的是自定义字体,比如“啊”字字体显示为“吧”。
    你拷贝出来的全部牛头不对马尾。

    疯狂些可以动态生成字体,经常变换。
    fffflyfish
        24
    fffflyfish  
       2017-01-21 17:16:42 +08:00
    参考百度文库的做法,直接转换成不可复制的 flash
    elviscai
        25
    elviscai  
       2017-01-21 18:25:01 +08:00
    fantasts
        26
    fantasts  
       2017-01-21 19:55:12 +08:00 via Android
    百度知道使用的办法是替换一些文字为图片,起点使用 js 输出文字。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   997 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 20:27 · PVG 04:27 · LAX 13:27 · JFK 16:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.