V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
alwayshere
V2EX  ›  程序员

到目前为止,到底有没有一种防爬虫但是不会误伤谷歌爬虫的完美方法?

  •  
  •   alwayshere · 2017-01-18 11:28:05 +08:00 · 7564 次点击
    这是一个创建于 2869 天前的主题,其中的信息可能已经有所发展或是发生改变。

    自己一个网站,都是自己辛辛苦苦用键盘敲出来的数据,纯原创站,自己很用心在做这个网站,但是说实话,一个新手都可以用火车头不费吹灰之力把我的网站数据全爬过去,其实如果不是谷歌的话,我想了很多种防爬虫的手段,比如:

    1. js 生成数据,抓取 phantomjs 之类的 headless 浏览器的特征码, ban 掉它
    2. 同一个 ip 短时间内抓取数据太多, ban 掉它
    3. 没有 header 之类的访问, ban 掉它
    4. 检测客户端访问抓取 css 文件没有,没有的话就 ban 掉它
    5. 客户端 js 加密一个 token ,和服务器端公用一个 key 来解密,每次提交都要验证这个 token
    6. 学习Flickr一样,任何搜索结果只显示4000个结果,避免一次性清仓大处理被爬虫抓完了,后台把sitemap所有数据提交给谷歌,但是貌似这样会不会伤及SEO,毕竟内链之间就断开了

    感觉这些合在一起基本可以过滤大部分新手了,但是,这些很有可能把可爱的谷歌爬虫给误伤了,现在服务器端验证 header 为 Googlebot 貌似也不起任何作用,都可以伪造,大家有哪些防爬虫但是不会误伤谷歌爬虫的完美方法?讨论一下,谢谢

    46 条回复    2018-08-09 07:57:38 +08:00
    just4test
        1
    just4test  
       2017-01-18 11:29:42 +08:00   ❤️ 1
    不是可以通过 IP 验证吗
    alwayshere
        2
    alwayshere  
    OP
       2017-01-18 11:33:43 +08:00
    @just4test 谷歌有哪些 ip ?
    vbs
        3
    vbs  
       2017-01-18 11:36:06 +08:00
    搜索关键字:
    google crawler 验证
    alwayshere
        4
    alwayshere  
    OP
       2017-01-18 11:39:23 +08:00
    @vbs 谢谢,世界上搜索引擎还有很多, bing yandex 百度 搜狗之类的 感觉验证完好渺茫
    rocksolid
        5
    rocksolid  
       2017-01-18 12:40:19 +08:00
    如果不嫌麻烦能不能先放部分数据,部分垃圾数据,等过个一两天再把真实数据更新上去
    gouchaoer
        6
    gouchaoer  
       2017-01-18 12:42:12 +08:00 via Android
    天真
    binux
        7
    binux  
       2017-01-18 12:44:08 +08:00
    没有。即使假设有,再不济,我去抓 google 不就好了。
    danmary61
        8
    danmary61  
       2017-01-18 12:45:30 +08:00
    这个真没有
    KeepPro
        9
    KeepPro  
       2017-01-18 12:45:55 +08:00 via Android
    把所有的数据展示都放到 canvas 里面显示,或者生成图片。
    annielong
        10
    annielong  
       2017-01-18 12:48:40 +08:00
    折中方案就是显示一半,剩下的加个强验证,通过后显示,
    sobigfish
        11
    sobigfish  
       2017-01-18 12:49:56 +08:00
    不用每次访问都验证 IP 啊,首次见的(疑似) bot 验证,过了的 IP 就加入到你特定的白名单里
    Zzzzzzzzz
        12
    Zzzzzzzzz  
       2017-01-18 12:50:41 +08:00
    没有, 而且各引擎为了评估网站是否针对它们吐数据作弊, 都会有其他非公开的 UA 和 IP 段的爬虫做检验, 你这样反而适得其反
    mnhkahn
        13
    mnhkahn  
       2017-01-18 12:51:52 +08:00
    useragent 可以判断
    golmic
        14
    golmic  
       2017-01-18 12:54:41 +08:00 via Android   ❤️ 2
    楼主能不能告诉我地址我想练练我的爬虫技能...
    doubleflower
        15
    doubleflower  
       2017-01-18 13:26:16 +08:00
    内容里面随机插网站名字 /网址,别人相当于给你免费宣传了
    smallaccount
        16
    smallaccount  
       2017-01-18 13:28:35 +08:00
    搜索引擎原创识别才是最根本的吧
    另外就是版权的法律保护,国外如果 copy 的话貌似可以直接主机商关站的
    clino
        17
    clino  
       2017-01-18 14:21:12 +08:00
    TaMud
        18
    TaMud  
       2017-01-18 14:34:57 +08:00
    你都把衣服脱光了给人家看了
    你说你要怎么样保护密秘??

    你可以把整个网页变成一张图片

    你也可以把整个网站做成一个 flash
    usernametoolong
        19
    usernametoolong  
       2017-01-18 15:35:06 +08:00
    你不放网址我们怎么帮你提高一下?(捂脸
    ningcool
        20
    ningcool  
       2017-01-18 15:58:36 +08:00
    纯原创的话,一天你写不了几篇文章。所以,哪怕你技术上屏蔽了别人,你无法阻挡别人去复制啊!
    ihuzhou
        21
    ihuzhou  
       2017-01-18 16:02:07 +08:00
    @golmic 兄台爬过网易云的吗,我被里面的加密难住了
    grayon
        22
    grayon  
       2017-01-18 16:57:53 +08:00
    您使用的 IP 访问网站过于频繁,为了您的正常访问,请先输入验证码
    hyuwang
        23
    hyuwang  
       2017-01-18 17:07:14 +08:00
    可以数据不要放全
    让浏览引擎索引到关键字和标题就行了

    用户浏览的时候多点一下才能拿到全部的 content
    感觉现在挺多国外网站这么干
    TaMud
        24
    TaMud  
       2017-01-18 17:50:09 +08:00
    难道 你们不知道 有 selenium 这东西???
    rockivy
        25
    rockivy  
       2017-01-18 18:05:08 +08:00
    插个题外话,以前还真的爬过 canvas 画的数据。比如下面这个 URL 里面:

    http://v.qq.com/datacenter/0dfpyvfa7tp0ewe.html

    一些具体的数字就是用 canvas 画出来的。

    办法就是先截图,然后调用 OCR 识别图片上面的数字。
    当时用的 tesseract ,对数字的识别准确率还蛮高的(当然对图片有些简单的放大和二值化处理之后,准确率才上来的)。

    不过,上面这个腾讯的视频指数页面,有些别的反爬处理,很难搞,最终还是放弃了。
    shiny
        26
    shiny  
       2017-01-18 18:08:17 +08:00
    不知道有没有人可以通过法律角度讲讲可以怎么做。
    lan894734188
        27
    lan894734188  
       2017-01-18 18:09:22 +08:00 via Android   ❤️ 1
    把 Google 的 as 添加到白名单
    lgpqdwjh
        28
    lgpqdwjh  
       2017-01-18 18:24:07 +08:00
    我们是实现一个 漏桶 来处理这样的事情的, 针对流量分析一下 ip 均匀请求量 自动调整漏桶大小, 如果爬的比较猛就直接 ban 掉 ip , 值得一提的是 这样的方法防不住有心的爬虫, 总的来讲我们是想挡住恶意的高频请求用户

    至于完全的防爬, 我觉得是不可能懂, 人家真想要你的数据, 办法多的是。。
    techmoe
        29
    techmoe  
       2017-01-18 18:28:13 +08:00 via Android
    那估计就只能靠 ip 识别了
    yxzblue
        30
    yxzblue  
       2017-01-18 19:04:14 +08:00
    楼主是产品?
    golmic
        31
    golmic  
       2017-01-18 19:09:23 +08:00 via Android
    @ihuzhou 我去试试看,能详细点告诉我爬哪些项目吗?
    dsg001
        32
    dsg001  
       2017-01-18 19:26:58 +08:00
    只担心 googlebot ,不担心真实用户吗,在乎 seo 就别在乎爬虫,只要爬虫直接去爬 google 缓存,再强的反爬虫策略也没用
    ioioioioioioi
        33
    ioioioioioioi  
       2017-01-18 19:30:29 +08:00 via iPhone
    谷歌蜘蛛可以判断 ip 的 hostname
    professorz
        34
    professorz  
       2017-01-18 20:07:38 +08:00
    客户端生成 cookie 二次请求才呈现数据 很多航司网站是这样做的 你可以找一下相应的工具
    misaka20038numbe
        35
    misaka20038numbe  
       2017-01-19 00:04:00 +08:00
    没有,再厉害你能把用户的屏幕给关了吗?所以你可以换一种方式,比如让文章个性化,让别人一看就知道是你.
    WildCat
        36
    WildCat  
       2017-01-19 00:17:28 +08:00   ❤️ 2
    不可能,我可以模拟得你监测不出来。
    Keywords:
    - nightmare
    - phantom
    - selenium
    samuel
        37
    samuel  
       2017-01-19 00:32:25 +08:00 via iPhone
    并没有,只要正常的用户能看到,爬虫就能爬到,只能尽量在不损害正常用户的体验情况下,提高爬虫获取数据的成本
    llhh
        38
    llhh  
       2017-01-19 09:46:47 +08:00
    没有。
    ihuzhou
        39
    ihuzhou  
       2017-01-19 10:12:14 +08:00
    @golmic 就是歌手最热歌曲的页面,想获得 songId
    libook
        40
    libook  
       2017-01-19 10:24:42 +08:00
    前端分两套,正常业务页面和 SEO 页面,把能暴露出去的且希望搜索引擎爬到的防盗 SEO 页面里,正常页面做好防爬措施,使用流量技术+搜索引擎配置的方式引导搜索引擎去爬 SEO 页面。
    breeswish
        41
    breeswish  
       2017-01-19 10:33:29 +08:00
    只要网站还允许普通人访问就阻止不了(定向开发的)爬虫,只能提高门槛。

    模拟浏览器行为绕过客户端验证:楼上 WildCat 说了
    模拟网络绕过 IP 验证:代理池

    另外也可以直接爬谷歌 :)
    lisir
        42
    lisir  
       2017-01-19 17:08:15 +08:00
    咋不放出网站
    param
        43
    param  
       2017-01-19 18:58:42 +08:00 via Android
    Google 访问的时候自带了 user agent ,写明是 Google bot ,但是,如果爬虫知道你的规则并且伪装 Google bot 的话。。。。
    param
        44
    param  
       2017-01-19 18:59:34 +08:00 via Android
    Google 没有一种机制可以验证 Google bot 的身份吗?不如说自带给 token ,需要验证这个 token 才知道它是不是 bot
    wjm2038
        45
    wjm2038  
       2017-01-20 02:16:55 +08:00 via Android
    @param 反查 ip ,谷歌官方做法
    zyjhkd
        46
    zyjhkd  
       2018-08-09 07:57:38 +08:00
    你好,这样的程序 好做吗?留个联系方式哈,打包出售吗?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3910 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 10:21 · PVG 18:21 · LAX 02:21 · JFK 05:21
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.