标点符(钱魏 Way)

怎样抓取关键词查询量:百度指数的分析

获取百度指数中每个关键词的查询量,可能是很多做SEO或PPC的朋友们一直想做的事,但是百度指数并不是那么容易的被抓取,主要是他的查询并不是走的一般的HTTP协议,而是AMF协议,导致给数据抓取造成了一些麻烦。下面就一起来分析到底百度是如何进行查询数据的。

百度指数的趋势分析Flash(http://index.baidu.com/fla/TrendAnalyser.swf)采用了一种股市(stock)类的Flash报表作为原型,并在其基础上结合了自身的特色进行重新开发。

百度指数Flash的完整运行流程如下:

  1. 页面加载Flash。
  2. Flash解析HTML中设定的flashvars参数,设定通信网关(http://index.baidu.com/gateway.php,返回数据的url地址)、显示数据时间段,生成图片的网页地址以及调用数据的key(没有注册key将不能获得数据)。
  3. Flash根据参数向服务器(http://index.baidu.com/gateway.php)以POST方式发送请求,参数进行了加密处理。
  4. Gateway返回加密过的数据。
  5. Flash对数据解密,并进过内部运算后显示。
  6. 捕捉用户拖拽类型动作,重复3~5。
  7. 若用户鼠标悬停在某时间点上,则以GET方式(JSONP调用)。
  8. 返回的数据触发页面js脚本(不是直接给flash)的newsReturnCallback函数,参数为返回的json类型数据。数据经过处理后生成新的json数据,再通过js传递给Flash。
  9. Flash解析传入的json数据,显示冒泡窗口,将url地址和标题数据显示出来。
  10. 捕捉用户鼠标悬停类型动作,重复7~9。

百度指数的查询请求参数:

如上图所示,百度指数是AMF协议进行通讯。

  • [0] 为要查询的关键词
  • [1] 是地区ID,用来限定查询的城市的
  • [2] 未知
  • [3] 参数3是时间,通过网页源文件里的eval(DEC())
  • [4] 5位随机数+md5(参数3+utf8(关键字)+ZZg<XWe7SZcBJ^aH)+5位随机数)

参数4的算法来自于网络,可能不准确,具体可以查看附件中的Flash源代码。大家可以自己分析,分析出来后记得把结果告诉我~

百度指数的查询返回数据:

  • userIndexes为每天的查询量
  • mediaIndexes为媒体关注度

相关资料:

码字很辛苦,转载请注明来自标点符《怎样抓取关键词查询量:百度指数的分析》

评论

  1. www.canphp.com #1

    [4] 5位随机数+md5(参数3+utf8(关键字)+ZZg<Xwe7SZcBJ^aH)+5位随机数)
    这里有点小问题,ZZg<Xwe7SZcBJ^aH的w是大写的,ZZg<XWe7SZcBJ^aH

    回复
    2011-07-26
  2. feitie7 #2

    前后的五位随机数是任意的吗?可以随便写?

    回复
    2011-08-5
  3. amfphp #3

    求 PHP 如何使用 amfphp 向http://index.baidu.com/gateway.php 发送数据。

    回复
    2011-08-17
    • 标点符

      原理都写在那里,自己写一个就可以了~

      回复
      2011-08-20
  4. 小鱼老了 #4

    我想请问一下,您这里用的是什么工具,直接就得到了userIndexes和mediaIndexes值呢,抱歉,我对于网络编程不太了解,但是最近想做一个文章和百度搜索的用户关注度有关,谢谢

    回复
    2011-08-17
    • ringgiver

      请问你得到用户关注度和媒体关注度的值了吗?怎么得到的呢?

      回复
      2012-05-23
      • 标点符

        指数上有表明用户关注度和媒体关注度
        用户关注度主要为用户搜索量
        媒体关注度蛀牙为新增索引量

        回复
        2012-05-27
  5. 小鱼老了 #5

    看到您介绍Charles软件的文章了,谢谢

    回复
    2011-08-17
  6. sun #6

    用的是什么工具呢,感觉比httpwatch强

    回复
    2011-08-19
    • 标点符

      可以使用Charles进行监测,

      回复
      2011-08-20
      • federe

        我最近也需要获取百度指数flash里的数字,能否回个邮件彼此联系一下。

        回复
        2012-06-17
  7. ringgiver #7

    我对网络编程不太懂,请问我用charles能看到百度指数编译后的值。怎么能得到你最后一个图MediaIndexs或者UserIndexs的数值呢。。。?十分的感谢。。。麻烦您告诉下我

    回复
    2012-05-23
    • 标点符

      百度目前算法改了,目前获得有些难度,可以考虑使用OCR获取。

      回复
      2012-05-27
  8. csuhp #8

    你好,请问参数3时间是怎么通过eval(DEC(“p1″,”p2”))获取的? 两个参数都是随机的。

    第四个参数;5位随机数+md5(参数3+utf8(关键字)+ZZg<XWe7SZcBJ^aH)+5位随机数)

    似乎不正确了,好像去掉了前后5个随机数。

    回复
    2012-06-2
    • 标点符

      百度指数现在已经改掉了,此方法已经无效

      回复
      2012-06-13
  9. csuhp #9

    目前困扰我的是第三个和第四个参数, 希望楼主指点迷津啊.

    回复
    2012-06-2
  10. xdd #10

    怎样获得falsh中的指数呢,求个方法,实在不怎么懂得。

    回复
    2012-07-2