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

如何控制多 IP 低频率的采集

  •  
  •   tianxiacangshen · 2017-07-17 18:55:26 +08:00 · 3500 次点击
    这是一个创建于 2690 天前的主题,其中的信息可能已经有所发展或是发生改变。
    查看了一下对方的方式:

    几百个 ip,ip 之间基本上很少有三段相同(难以实施屏蔽 IP 和 IP 段);

    一个 IP 一小时访问 15 次左右,躲过验证码,并且和正常用户没差别;

    几百个 ip 一小时也就采集 5000-6000 次,目前不影响网站速度等性能;

    但是,尼玛,看对方模拟发送的 url 配置的参数,总量在一百万以上,这就必须得管管了,不然流量费也要耗掉不少,目前分析对方是模拟 curl 模拟 post 提交的,各项参数齐全,我设置的检测$_SERVER['HTTP_REFERER']已经被他绕过。

    还有啥办法?
    26 条回复    2017-10-02 21:35:38 +08:00
    ho121
        1
    ho121  
       2017-07-17 19:04:59 +08:00 via Android
    用机器学习的方式判断爬虫 (逃
    est
        2
    est  
       2017-07-17 19:07:25 +08:00
    > 但是,尼玛,看对方模拟发送的 url 配置的参数,总量在一百万以上

    特征都有了还找不到办法管么。。
    tianxiacangshen
        3
    tianxiacangshen  
    OP
       2017-07-17 19:15:23 +08:00
    @est 是知道,对方是一直变换某一个参数以获取不同的内容,但是这里又不能改掉,毕竟也有真实用户访问
    sunwei0325
        4
    sunwei0325  
       2017-07-17 19:16:02 +08:00
    差不多就行了, 不可能把所有爬虫都干掉的, 误杀用户就不太好了
    tianxiacangshen
        5
    tianxiacangshen  
    OP
       2017-07-17 19:42:31 +08:00
    @sunwei0325 是啊 ,真心一个真实用户都舍不得放弃
    lzhr
        6
    lzhr  
       2017-07-17 19:52:10 +08:00
    内容页面登陆可见?
    bravecarrot
        7
    bravecarrot  
       2017-07-17 19:58:04 +08:00 via iPhone
    @lzhr 那也没啥用吧,带个 cookie 完事儿了..
    bravecarrot
        8
    bravecarrot  
       2017-07-17 20:03:10 +08:00 via iPhone
    参数顺序
    每次登陆加一个和时间戳相关的 hash
    或者在编码问题上搞事情
    tianxiacangshen
        9
    tianxiacangshen  
    OP
       2017-07-17 20:25:24 +08:00
    @lzhr 是,再严格的话就是会员才能浏览了
    gidot
        10
    gidot  
       2017-07-17 20:28:14 +08:00
    如果是 nginx,加这个到配置里:
    #禁止 Scrapy 等工具的抓取
    if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) {
    return 403;
    }
    whatsmyip
        11
    whatsmyip  
       2017-07-17 20:57:09 +08:00
    @gidot 感觉这个反爬措施应该是最弱的吧,再入门的爬虫课程都会提到要改 UA。。。

    而且,就这一条,感知后分分钟就能破了。
    chengxiao
        12
    chengxiao  
       2017-07-17 21:10:14 +08:00
    我很好奇楼主真么侦察到对方的??
    whatsmyip
        13
    whatsmyip  
       2017-07-17 21:20:07 +08:00
    有人愿意找这么多代理爬,看来不是小站而且数据应该还比较有价值?

    先说结论吧,爬虫、反爬虫、反反爬虫。。。。。就是一个生生不息的过程,__具体能进行到哪一步就看双方能力和性价比了__(恩,还有最重要的代理数目,不过这是终极对决了)。要是公开数据,而且对方的爬虫行为没有影响系统运行的话,还是睁一只眼、避一只眼吧。。。

    不过,攻防的过程确实是挺有意思的,能学到不少知识^_^

    目前来看,比较容易上的一个措施就是在 js/css/img 文件上动手脚,找一个站点一定会加载的 js 文件。该 IP 请求 js 资源时做个标记,如果超过两次访问没有带标记则封杀。可能会有误伤

    再进一步的话,可以是频率限制,周期长一点,具体的限制根据网站用户来决定,这样对方再多的 IP 也会被限制在一定的范围内。不过这样会消耗一定的资源,看具体日 IP 了,用 redis。

    补一句,免费的代理数量是有上限的,而且可用性非常差,要是对方为了爬你的数据买了什么高大上的收费服务的话,不如沟通下,把数据打包卖给他**


    之前写爬虫的时候总结的
    [http://blog.newnius.com/stream-spider-several-strategies.html#反反爬虫]( http://blog.newnius.com/stream-spider-several-strategies.html#反反爬虫)
    tianxiacangshen
        14
    tianxiacangshen  
    OP
       2017-07-17 21:21:13 +08:00
    @chengxiao 我将每个访客的 ip 地址都临时加入一个表了,包括访问时间,来源页面和要访问的页面,一看就知道什么目的了
    whatsmyip
        15
    whatsmyip  
       2017-07-17 21:21:39 +08:00
    哦,对了。

    googlebot 也是爬虫,不要误伤。
    zycode277
        16
    zycode277  
       2017-07-17 21:21:51 +08:00 via iPhone
    做状态管理吧,爬虫基本都是线性访问, 用户都是峰访问的。
    aqqwiyth
        17
    aqqwiyth  
       2017-07-17 22:14:44 +08:00
    如果需要登录的话,写入一个 cookie,対这个 cookie 做频率判断,统计每日 TOP,封号 多弄几次他就对你没兴趣了
    没有 cookie 的直接返回假数据 >逃
    duan602728596
        18
    duan602728596  
       2017-07-17 23:05:56 +08:00 via iPhone
    233333333,哪个网站
    sunwei0325
        19
    sunwei0325  
       2017-07-17 23:34:46 +08:00
    @aqqwiyth 真实用户也有浏览器禁用 cookie 的
    johnnie502
        20
    johnnie502  
       2017-07-18 01:34:33 +08:00   ❤️ 1
    其实最有效的反爬虫策略不是见一个封一个,而是识别以后喂假数据,在对方未察觉的情况下污染对方的结果集,等发觉以后也晚了,早晚就会放弃。
    johnnie502
        21
    johnnie502  
       2017-07-18 01:37:57 +08:00   ❤️ 1
    补充一下,假数据也不能 100%喂,这样也容易被对方识别出来,半真半假就行了。
    15015613
        22
    15015613  
       2017-07-18 07:59:37 +08:00
    @sunwei0325 @aqqwiyth
    NoScript、Cookie Monster、RequestPolicy Continued 的走起。
    gam2046
        23
    gam2046  
       2017-07-18 08:48:46 +08:00
    尝试在页面中加入一个随机的长宽为 0 的 image,如果服务端发现客户端没有请求这个钓鱼 image,就基本可以断定对方没有使用浏览器访问,那么除了爬虫 应该也只有 Google Spider 了
    cyrh
        24
    cyrh  
       2017-07-18 11:49:45 +08:00
    好拼啊,几百个 ip 每小时爬取 5000 数据,这个频率都被楼主发现了
    glogger
        25
    glogger  
       2017-07-18 18:27:29 +08:00
    并且和正常用户没差别;
    就凭这一条,根本不用管。。
    ericgui
        26
    ericgui  
       2017-10-02 21:35:38 +08:00
    你开放 API,收费。
    说真的,对大家都合适。他也省劲,你也赚点钱。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5614 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 03:41 · PVG 11:41 · LAX 19:41 · JFK 22:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.