百度蜘蛛抓取耗费了大量的 Google Maps API 使用量 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Tonni

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

  •  
  •   Tonni 2018 年 5 月 24 日 4548 次点击
    这是一个创建于 2893 天前的主题,其中的信息可能已经有所发展或是发生改变。

    去年我们公司的手机站使用了 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.1"``` 

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

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

    PHP 白写了....
    morethansean
        3
    morethansean  
       2018 年 5 月 24 日   1
    既然如此前端渲染的 SPA 他为什么不能抓取……
    chinvo
        4
    chinvo  
       2018 年 5 月 24 日
    Baiduspider-render/2.0

    看来是更新了,大概是用了无头浏览器
    oszlso
        5
    oszlso  
       2018 年 5 月 24 日 via Android
    把这个 js 放到单独的目录 再在 robots 里面限制一下目录 不知道这样还会不会抓取(我没实验过)
    just1
        6
    just1  
       2018 年 5 月 24 日 via Android
    so 为什么不判断 ua
    kookpua
        7
    kookpua  
       2018 年 5 月 24 日 via iPhone
    只引用 js 也计算数量?
    Tonni
        8
    Tonni  
    OP
       2018 年 5 月 24 日
    @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 年 5 月 24 日
    @congeec 不用担心,Developer Console 里面设置了认证的,这样使用并没有什么不妥。


    @morethansean SEO 同事告诉我百度只是能抓取了,但是效果还不是很好。
    Tonni
        10
    Tonni  
    OP
       2018 年 5 月 24 日
    @kookpua 是的,百度请求了 Google Maps API 而且还执行了 JS。
    m939594960
        11
    m939594960  
       2018 年 5 月 24 日
    https://ziyuan.baidu.com/wiki/990 好像确实渲染 js 了
    UnPace
        12
    UnPace  
       2018 年 5 月 24 日
    robots 禁止抓取可以解决吧
    Tonni
        13
    Tonni  
    OP
       2018 年 5 月 24 日
    @UnPace 暂时没有,robots.txt 已更新,百度还在疯狂请求 `/google-maps-api`,地图请求又被耗尽了,明天观察变化。
    run2
        14
    run2  
       2018 年 5 月 24 日
    @UnPace #12 说的好像百毒的会尊重 robots.txt 一样
    Tonni
        15
    Tonni  
    OP
       2018 年 5 月 25 日
    百度没有遵守 robots.txt 协议,早上依然在疯狂的爬我们的 API,已经用 UA 判断来屏蔽了。
    naver1
        16
    naver1  
       2018 年 5 月 25 日
    百度就算抓也不应该这么短时间上前次的疯狂抓啊。。。
    会不会是谁特意伪造 ua 来攻击?
    Tonni
        17
    Tonni  
    OP
       2018 年 5 月 25 日
    @DT27 不是,我们站点有几百万的房源,之前是 SPA 的页面,不好抓取,现在刚上线了使用传统的 HTML 重写了一遍,搜索引擎抓取更容易了,而且是个很大的变化,所以刚上线后百度会疯狂爬一段时间。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2206 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 55ms UTC 00:32 PVG 08:32 LAX 17:32 JFK 20:32
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86