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

百度蜘蛛抓取耗费了大量的 Google Maps API 使用量

  •  
  •   Tonni · 2018-05-24 11:57:25 +08:00 · 4120 次点击
    这是一个创建于 2402 天前的主题,其中的信息可能已经有所发展或是发生改变。

    去年我们公司的手机站使用了 Angular 做的 SPA,SEO 说不行,搜索引擎不爬 JS 的,这样做百度🕷️抓不到数据,今年我们重写了老的 SPA 手机站,改为了 PHP 输出 HTML 来渲染页面,前几天上线后发现我们每天的 25k Google Maps 使用量会在大约两个小时的时间内消耗殆尽,但是从 GA 那里拿到的数据上看我们的 PV 是没有这么高的。

    几番查证发现是百度🕷️在抓取我们的 Google Maps API,我们的 Google Maps API 是直接写在 HTML 的底部的:

    <script src="http://maps.google.cn/maps/api/js?v=3.32&region=cn&language=zh-CN&key=KEY" type="text/javascript"></script>
    

    和 SEO 讨论后把 HTML 的 script 转移到了 JS 里面,按照之前百度🕷️不执行 JS 的认知觉得这样就可以解决这个问题了:

    const key = 'KEY';
    const googleMaps = `http://maps.google.cn/maps/api/js?v=3.32&region=cn&language=zh-CN&key=${key}`;
    
    $.getScript(googleMaps).done(() => {
    	//...
    });
    

    部署到线上后发现 Google Maps API 的使用量还是居高不下,难道百度🕷️已经开始执行 JS 了吗?我在 Google Developer Console 里面看不到 API 请求细节,只好在 JS 下面又加了一段代码:

    $.getScript('/will_baidu_spider_crawl_me');
    

    部署到线上后在 access.log 里面发现了大量百度🕷️发起的 /will_baidu_spider_crawl_me 的请求

    ```10.1.21.42 - - [24/May/2018:11:55:12 +0800] "GET /will_baidu_spider_crawl_me?_=1527134112074 HTTP/1.0" 404 21 "http://m.juwai.com/property/36375240" "Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1 (compatible; Baiduspider-render/2.0; +http://www.baidu.com/search/spider.html)" "111.206.198.36, 223.202.197.10"```
    

    百度果然已经开始执行 JS 了 🤯。

    17 条回复    2018-05-25 22:15:47 +08:00
    input2output
        1
    input2output  
       2018-05-24 12:10:34 +08:00
    Google 似乎也会执行, 我博客上的邮箱地址要用 JS 解密, 但是 Google 呈现出明文了
    congeec
        2
    congeec  
       2018-05-24 12:12:21 +08:00 via iPhone
    key 实在要放前端也要混淆拼接一下嘛

    PHP 白写了....
    morethansean
        3
    morethansean  
       2018-05-24 12:16:54 +08:00   ❤️ 1
    既然如此前端渲染的 SPA 他为什么不能抓取……
    chinvo
        4
    chinvo  
       2018-05-24 12:18:09 +08:00
    Baiduspider-render/2.0

    看来是更新了,大概是用了无头浏览器
    oszlso
        5
    oszlso  
       2018-05-24 12:19:16 +08:00 via Android
    把这个 js 放到单独的目录 再在 robots 里面限制一下目录 不知道这样还会不会抓取(我没实验过)
    just1
        6
    just1  
       2018-05-24 12:19:24 +08:00 via Android
    so 为什么不判断 ua
    kookpua
        7
    kookpua  
       2018-05-24 12:20:28 +08:00 via iPhone
    只引用 js 也计算数量?
    Tonni
        8
    Tonni  
    OP
       2018-05-24 13:05:45 +08:00
    @oszlso
    @just1

    根据 UA 屏蔽效果并不好:

    1. 对搜索引擎输出不用的内容对 SEO 来说是一件有风险的事。
    1. 不想维护一个 UA 列表,今天是百度,可能明天就是 Google 或者其它的了,到时候又要更新这个列表。

    现在的解决方案是在后端新建了一个 endpoint:`/google-maps-api`,这个 endpoint 只返回一个 301 重定向,重定向至真正的 Google Maps API 地址,然后在 robot.txt 里面把这个 endpoint 禁用掉,这是最方便的解决方案。
    Tonni
        9
    Tonni  
    OP
       2018-05-24 13:07:55 +08:00
    @congeec 不用担心,Developer Console 里面设置了认证的,这样使用并没有什么不妥。


    @morethansean SEO 同事告诉我百度只是能抓取了,但是效果还不是很好。
    Tonni
        10
    Tonni  
    OP
       2018-05-24 13:08:28 +08:00
    @kookpua 是的,百度请求了 Google Maps API 而且还执行了 JS。
    m939594960
        11
    m939594960  
       2018-05-24 13:10:22 +08:00
    https://ziyuan.baidu.com/wiki/990 好像确实渲染 js 了
    UnPace
        12
    UnPace  
       2018-05-24 16:25:06 +08:00
    robots 禁止抓取可以解决吧
    Tonni
        13
    Tonni  
    OP
       2018-05-24 18:00:53 +08:00
    @UnPace 暂时没有,robots.txt 已更新,百度还在疯狂请求 `/google-maps-api`,地图请求又被耗尽了,明天观察变化。
    sobigfish
        14
    sobigfish  
       2018-05-24 18:26:01 +08:00
    @UnPace #12 说的好像百毒的会尊重 robots.txt 一样😂
    Tonni
        15
    Tonni  
    OP
       2018-05-25 15:12:03 +08:00
    百度没有遵守 robots.txt 协议,早上依然在疯狂的爬我们的 API,已经用 UA 判断来屏蔽了。
    DT27
        16
    DT27  
       2018-05-25 16:32:08 +08:00
    百度就算抓也不应该这么短时间上前次的疯狂抓啊。。。
    会不会是谁特意伪造 ua 来攻击?
    Tonni
        17
    Tonni  
    OP
       2018-05-25 22:15:47 +08:00
    @DT27 不是,我们站点有几百万的房源,之前是 SPA 的页面,不好抓取,现在刚上线了使用传统的 HTML 重写了一遍,搜索引擎抓取更容易了,而且是个很大的变化,所以刚上线后百度会疯狂爬一段时间。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2726 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 11:58 · PVG 19:58 · LAX 03:58 · JFK 06:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.