抓取百度指数的分析
获取百度指数中每个关键词的查询量,可能是很多做SEO或PPC的朋友们一直想做的事,但是百度指数并不是那么容易的被抓取,主要是他的查询并不是走的一般的HTTP协议,而是AMF协议,导致给数据抓取造成了一些麻烦。下面就一起来分析到底百度是如何进行查询数据的。
百度指数的趋势分析Flash(http://index.baidu.com/fla/TrendAnalyser.swf)采用了一种股市(stock)类的Flash报表作为原型,并在其基础上结合了自身的特色进行重新开发。
百度指数Flash的完整运行流程如下:
- 页面加载Flash。
- Flash解析HTML中设定的flashvars参数,设定通信网关(http://index.baidu.com/gateway.php,返回数据的url地址)、显示数据时间段,生成图片的网页地址以及调用数据的key(没有注册key将不能获得数据)。
- Flash根据参数向服务器(http://index.baidu.com/gateway.php)以POST方式发送请求,参数进行了加密处理。
- Gateway返回加密过的数据。
- Flash对数据解密,并进过内部运算后显示。
- 捕捉用户拖拽类型动作,重复3~5。
- 若用户鼠标悬停在某时间点上,则以GET方式(JSONP调用)。
- 返回的数据触发页面js脚本(不是直接给flash)的newsReturnCallback函数,参数为返回的json类型数据。数据经过处理后生成新的json数据,再通过js传递给Flash。
- Flash解析传入的json数据,显示冒泡窗口,将url地址和标题数据显示出来。
- 捕捉用户鼠标悬停类型动作,重复7~9。
百度指数的查询请求参数:
如上图所示,百度指数是AMF协议进行通讯。
- [0] 为要查询的关键词
- [1] 是地区ID,用来限定查询的城市的
- [2] 未知
- [3] 参数3是时间,通过网页源文件里的eval(DEC())
- [4] 5位随机数+md5(参数3+utf8(关键字)+ZZg<XWe7SZcBJ^aH)+5位随机数)
参数4的算法来自于网络,可能不准确,具体可以查看附件中的Flash源代码。大家可以自己分析,分析出来后记得把结果告诉我~
百度指数的查询返回数据:
- userIndexes为每天的查询量
- mediaIndexes为媒体关注度
相关资料:
- AMF简介:http://en.wikipedia.org/wiki/Action_Message_Format
- 开源PHP AMF 程序:http://sourceforge.net/projects/amfphp/
- 百度指数flash程序代码:http://t.cn/hDN9UV
python,go,redis,mongodb,.net,C#,F#,服务器架构
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 【.NET】调用本地 Deepseek 模型