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

大家都怎么防采集的?哪一种性能最高?

  •  
  •   tianxiacangshen · 2017-05-18 19:49:39 +08:00 · 6018 次点击
    这是一个创建于 2506 天前的主题,其中的信息可能已经有所发展或是发生改变。
    有不少站都有防采集,一般是 IP 和 cookie,还有 session (会员)

    1、从 IP 入手一般限制某个时间段内访问的最多次数,超过则出现验证码,弊端是每次访问都要检测该 ip 的访问次数和执行判断

    2、从 cookie 入手,较为简单,但是显然防守能力很差

    3、从会员入手,页面只有会员才能访问(或者超过多少页面就必须会员才能访问),一个会员一天只能访问多少次,弊端也很明显

    有没有更佳的方法?
    44 条回复    2017-05-22 14:28:27 +08:00
    metowolf
        1
    metowolf  
       2017-05-18 20:47:52 +08:00
    对特征明显的、频度高的请求返回脏数据(删字改字添字)
    dsg001
        2
    dsg001  
       2017-05-18 21:29:38 +08:00
    会员限制,超过阀值则每次访问都需要验证码
    gouchaoer
        3
    gouchaoer  
       2017-05-18 21:32:45 +08:00 via Android   ❤️ 2
    验证码不是一个好的方案,反爬虫最重要的是不能让爬虫知道你已经知道它是爬虫了
    humxman
        4
    humxman  
       2017-05-18 21:39:04 +08:00 via Android   ❤️ 1
    先载入一部分然后监听事件,如果没有动作(滚屏、鼠标动作)的话不请求后续内容。
    karia
        5
    karia  
       2017-05-18 21:42:46 +08:00   ❤️ 10
    刚写完爬虫的我用极其幽怨的眼神看着楼主。
    ivmm
        6
    ivmm  
       2017-05-18 21:44:12 +08:00
    @karia 哈哈哈哈哈哈哈哈,笑出声
    elfsong
        7
    elfsong  
       2017-05-18 22:38:36 +08:00
    讲道理 除了 Plan 3 其他两种代理池都可以搞定
    olOwOlo
        8
    olOwOlo  
       2017-05-18 23:35:37 +08:00
    之前爬过的某站上面三种都有
    反爬虫一般都是独立出来的,类似 fail2ban 这种扫描日志(或者做个流量分析系统_(:з)∠)_?
    个人感觉从会员入手是效果最好的,频率过高直接封号_(:з)∠)_
    不过爬虫是挡不住的,只要是浏览器能访问的爬虫都能想办法获取到,除非像一些网站一样只显示前 X 页的内容
    yidinghe
        9
    yidinghe  
       2017-05-18 23:44:03 +08:00 via Android
    传输内容加密,加密解密的代码混淆,解密出来的文字用 canvas 画出来。
    Reign
        10
    Reign  
       2017-05-19 00:13:59 +08:00 via iPhone
    反爬做的足够好把用户和搜索引擎都干跑了,你能想到的反爬我们这些写爬虫的早就想到了,“弊端是每次访问都要检测该 ip 的访问次数和执行判断”,根本不是这个弊端,你还太年轻
    ioriwong
        11
    ioriwong  
       2017-05-19 00:21:15 +08:00
    我觉得动态加载是个不错的方案,一般爬虫不会模拟鼠标滚轮动作或键盘 Pagedown 动作
    mokeyjay
        12
    mokeyjay  
       2017-05-19 00:29:17 +08:00
    用小说站的反采集方案吧。小说入库时,随机挑选一些字生成图片,将图片链接插入原文,删掉被图片替换的字。显示时用户无感知但爬出来的内容全是乱的
    Akkuman
        13
    Akkuman  
       2017-05-19 00:32:08 +08:00 via Android   ❤️ 1
    直接提供接口😂
    yangqi
        14
    yangqi  
       2017-05-19 00:41:13 +08:00
    要想 100%防是不可能的,只能防止一些比较初级的爬虫。现在的框架都是模拟浏览器访问,基本看不出来是爬虫
    t6attack
        15
    t6attack  
       2017-05-19 00:42:24 +08:00
    自己设计了一套缺德的繁琐的机制。简单的说,判断出采集行为后随机穿插错误数据、重复数据。
    crayygy
        16
    crayygy  
       2017-05-19 01:23:43 +08:00 via iPhone
    display:none
    bjlbeyond
        17
    bjlbeyond  
       2017-05-19 08:02:51 +08:00 via iPhone
    只能说是用一些手段去限制初级爬虫选手
    tinyproxy
        18
    tinyproxy  
       2017-05-19 09:06:25 +08:00 via iPhone
    人家真要爬你,也就看谁更耗不起了。
    dong3580
        19
    dong3580  
       2017-05-19 09:30:20 +08:00
    @yidinghe
    没用,全是 canvas 的话 jquery 直接提出 txt 来得了.
    zpvip
        20
    zpvip  
       2017-05-19 10:04:00 +08:00
    把最常用的几百个汉字每小时生成图片,相同汉字每小时的图片名称不一样,程序内部有对应 hash,图片过一小时就自动删除,PHP 处理这个过程非常快,不到一秒。

    用 dns 检查是否为 Google 和百度爬虫,对爬虫不用图片替换。

    如果高手用 OCR,并且把所有图片都保存下来,也够他忙的,不可能绝对防住,只能恶心他们。
    actto
        21
    actto  
       2017-05-19 10:07:19 +08:00 via Android
    还不如加个 api 接口提供给爬虫们,然后收费,每月 5 元。
    AllenHai
        22
    AllenHai  
       2017-05-19 10:31:14 +08:00
    1:网页中用框架,比如 QQ 空间;
    2:写一套流弊的 JS 加密程序,比如网易云音乐;
    3:每分钟请求超过一个阈值就弹验证码,检测到爬虫后返回 404 或者弹验证码或者给掺假的数据(半真半假那种);
    4:必须用手机号注册账号,检测到异地登录必须输手机验证码,cookies 有效期短一点;
    5:换字体,以前去哪儿用过;
    6:把阿里云的 IP 段禁掉;
    7:自己爬一下网上的免费代理,禁掉 IP ;
    8:提取浏览器特征,来反 webdriver ;
    9:UA 里做一些排查
    silva
        23
    silva  
       2017-05-19 11:12:25 +08:00
    @AllenHai
    你好,问两个问题,换字体来防御爬虫是个什么原理?
    UA 是什么?
    ty89
        24
    ty89  
       2017-05-19 11:18:30 +08:00
    @AllenHai
    qq 空间的例子就算了,我刚爬完一批文章
    lepture
        25
    lepture  
       2017-05-19 11:40:13 +08:00 via iPhone
    @silva 改字体对应关系,字符是 A 显示为 B。
    AllenHai
        26
    AllenHai  
       2017-05-19 11:42:47 +08:00
    @silva UA 是指 user-agent,你去看下 requests,scrapy 的请求头,封它就对了;
    字体那个就像凯撒密码那样,把字体里数字换一下,通常数字顺序是 0~9,而自定义的字体里做个转换,比如 0 和 5 对应,1 和 9 对应。这个是挺有意思,但是也容易破解
    Reign
        27
    Reign  
       2017-05-19 11:47:34 +08:00
    @ioriwong 我写爬虫最喜欢你这种动态加载的方式了,一个 ajax 返回数据,连 HTML 解析都省去了
    sampeng
        28
    sampeng  
       2017-05-19 11:47:36 +08:00
    特别反感爬虫,特别反感反爬虫

    这是一个矛盾的话题,做内容的,自然要去爬数据。如果有公开的接口信息,没人愿意去爬数据。可现实是没有。
    如果豆瓣,时光网有非常好的 api 直接提供,我相信没人愿意花费大量的时间精力去爬数据。
    这是国内环境造成的,看看国外的,基本有权威的影音数据库,直接公开查询接口。

    有些公共信息真的非常反感反爬虫机制,比如影音类的。。新闻类的。做个自定义 rss 都麻烦。。如果有收费的 api。我会直接购买。当然这是个遥不可及的想法。。。因为没有网站希望用户压根不上自己的平台。。国内现在大部分做内容的还是靠广告收费。任重而道远啊。。。。
    coolcoffee
        29
    coolcoffee  
       2017-05-19 11:51:05 +08:00
    看来为了爬虫为了防止垃圾数据产生,还要对爬取的数据进行更换 IP 以及其它特征进行二次校验。
    chairuosen
        30
    chairuosen  
       2017-05-19 13:43:09 +08:00
    css:before 随机替换文章中的字
    tianxiacangshen
        31
    tianxiacangshen  
    OP
       2017-05-19 14:14:26 +08:00
    @Reign 那还有啥更大的弊端?我以为只是占资源
    tianxiacangshen
        32
    tianxiacangshen  
    OP
       2017-05-19 14:18:12 +08:00
    @mokeyjay 这个很好,抓到的内容不完整了,但是如果写个软件模拟浏览器将网页保存为图片的功能,将该网页保存为图片,然后将图片转换成 word..........
    annielong
        33
    annielong  
       2017-05-19 14:23:17 +08:00
    @mokeyjay 这个已经有破解了,直接建立图片库,采集后自动换成文字,记得无错小说网就是这样防采集的
    wildcat007
        34
    wildcat007  
       2017-05-19 14:41:34 +08:00
    上次在 V 站看到有个 网站 文字是一部分放到 div 里面,一部分放到 css 里面···看的我头都大了··
    phrack
        35
    phrack  
       2017-05-19 15:07:27 +08:00 via Android
    提个稍微偏题的

    要注意逻辑越多,代码就会越多,漏洞可能也越多
    jccg90
        36
    jccg90  
       2017-05-19 16:16:18 +08:00
    反爬虫、用户体验、SEO 这几个要综合考虑吧。。。光考虑反爬虫了,用户体验和 SEO 都搞得一塌糊涂了,没有意义啊。。。
    sunsulei
        37
    sunsulei  
       2017-05-19 16:40:40 +08:00
    相爱相杀一百年...你们是没有未来的,放弃吧.
    vus520
        38
    vus520  
       2017-05-19 16:49:27 +08:00
    一句话,用户能看见的,都能采,叼不叼
    tianxiacangshen
        39
    tianxiacangshen  
    OP
       2017-05-19 17:50:34 +08:00
    @phrack 支持你,我看有些人就顾着玩弄技术了,应该各方面均衡,用户体验、网站安全、网站性能等
    wizardforcel
        40
    wizardforcel  
       2017-05-19 18:21:38 +08:00 via Android
    不算绩效就不防
    8355
        41
    8355  
       2017-05-20 23:02:44 +08:00
    其实我觉得爬虫只要对你的服务器的正常浏览没有大的影响就用太过于关注它。除非它让你浏览猛增 你用你提的第一点限制一下就可以了。
    akira
        42
    akira  
       2017-05-21 20:55:26 +08:00
    限制 ip 频次就足够了。 主要是防止有些低级爬虫爬的太凶,影响到正常用户使用。

    至于说完全不允许采集,这个基本上是不可能的了,别想了。
    silva
        43
    silva  
       2017-05-22 13:39:20 +08:00
    @lepture
    @AllenHai
    谢谢,明白了
    kcer
        44
    kcer  
       2017-05-22 14:28:27 +08:00
    @karia 哈哈哈哈哈
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5367 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 08:37 · PVG 16:37 · LAX 01:37 · JFK 04:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.