关于百度指数的抓取

百度指数是一个很好的风向标. 他反应了一段时间内,人们对某个关键词的关注程度. 长假前如果某景区的百度指数突然暴增,那么很有可能会有大量的人流涌向那个景区. 同样的,如果某支股票的关注度突然上升,也会在百度指数上很直接的反映出来. 因此如果百度指数作为参考,对很多工作都有指导性的意义.

但是百度指数并没有公开的API可以获取.就算是利用程序抓取也异常困难,因为百度似乎在有意的增加百度指数的抓取难度. 返回的数据进行了加密,并且数据并不直接出现在页面上.javascript把加密的数据直接变成了页面上看到的图形.

但是这个数据的确很有诱惑力.那就想办法…

在网上看到的可行的方法是利用图像识别技术来恢复百度指数的数据,而不是直接去解密数据.因为数据解密的过程没那么容易.

我试了试利用识别技术来恢复百度指数的方法. 抓出来的数据和原始数据比起来.误差在可以接受的范围内. 每个关键字的查询时间在3s左右. 以下是一个实例.

以手机这个关键字30天指数为例,以下index列是今天早上抓到的数据,右边的realVal列是通过人工读图选取得到的数据

date index realVal
2015-11-07 67700 67735
2015-11-08 66000 65929
2015-11-09 58900 58789
2015-11-10 65000 65133
2015-11-11 73500 73719
2015-11-12 59100 58913
2015-11-13 58800 58761
2015-11-14 62400 62376
2015-11-15 61600 61560
2015-11-16 57000 56885
2015-11-17 57000 56959
2015-11-18 55900 55873
2015-11-19 55700 55581
2015-11-20 57100 57177
2015-11-21 63200 63288
2015-11-22 63100 63032
2015-11-23 56300 56132
2015-11-24 57400 57295
2015-11-25 55700 55650
2015-11-26 54400 54372
2015-11-27 56700 56694
2015-11-28 60700 60621
2015-11-29 59500 59317
2015-11-30 57200 56997
2015-12-01 62600 62689
2015-12-02 58600 58542
2015-12-03 58800 58717
2015-12-04 63500 63710
2015-12-05 72400 72579
2015-12-06 72100 72062
把这两个数据画出来,对比一下,其中黑色的是抓取的数据,红色的线是人工读取的准确数据

百度指数百度指数

从上面的图可以看出,抓去的数据和真实的数据相差甚微. 具体相差多少呢.我们利用(realVal – index) / realVal来计算下误差到底有多大:

> aa
         date index realVal diff       percent
1  2015-11-07 67700   67735   35  0.0005167196
2  2015-11-08 66000   65929  -71 -0.0010769161
3  2015-11-09 58900   58789 -111 -0.0018881083
4  2015-11-10 65000   65133  133  0.0020419756
5  2015-11-11 73500   73719  219  0.0029707402
6  2015-11-12 59100   58913 -187 -0.0031741721
7  2015-11-13 58800   58761  -39 -0.0006637055
8  2015-11-14 62400   62376  -24 -0.0003847634
9  2015-11-15 61600   61560  -40 -0.0006497726
10 2015-11-16 57000   56885 -115 -0.0020216226
11 2015-11-17 57000   56959  -41 -0.0007198160
12 2015-11-18 55900   55873  -27 -0.0004832388
13 2015-11-19 55700   55581 -119 -0.0021410194
14 2015-11-20 57100   57177   77  0.0013466953
15 2015-11-21 63200   63288   88  0.0013904690
16 2015-11-22 63100   63032  -68 -0.0010788171
17 2015-11-23 56300   56132 -168 -0.0029929452
18 2015-11-24 57400   57295 -105 -0.0018326206
19 2015-11-25 55700   55650  -50 -0.0008984726
20 2015-11-26 54400   54372  -28 -0.0005149709
21 2015-11-27 56700   56694   -6 -0.0001058313
22 2015-11-28 60700   60621  -79 -0.0013031788
23 2015-11-29 59500   59317 -183 -0.0030851189
24 2015-11-30 57200   56997 -203 -0.0035615910
25 2015-12-01 62600   62689   89  0.0014197068
26 2015-12-02 58600   58542  -58 -0.0009907417
27 2015-12-03 58800   58717  -83 -0.0014135600
28 2015-12-04 63500   63710  210  0.0032961858
29 2015-12-05 72400   72579  179  0.0024662781
30 2015-12-06 72100   72062  -38 -0.0005273237
> basicStats(aa$percent)
            X..aa.percent
nobs            30.000000
NAs              0.000000
Minimum         -0.003562
Maximum          0.003296
1. Quartile     -0.001728
3. Quartile      0.000361
Mean            -0.000535
Median          -0.000692
Sum             -0.016060
SE Mean          0.000329
LCL Mean        -0.001209
UCL Mean         0.000138
Variance         0.000003
Stdev            0.001804
Skewness         0.425231
Kurtosis        -0.592827

有上统计知, 最大的误差为0.35% , 平均误差为0.05% . 标准差为0.18% . 这个数据看起来足够好了.



本文地址: http://www.bagualu.net/wordpress/archives/5031 转载请注明




“关于百度指数的抓取”的12个回复

      1. 抓取指数的图片 那是一整张图吗? 我看了 百度指数的曲线点击上去后 通过ajax 下载下来的 就是一个加密文字后的图片 是这个吗 能不能给个联系方式 加我QQ可以吗 ?

    1. 我已经初步实现了一个抓取百度指数的工具,目前只针对抓取百度指数整体趋势数据。我可以帮你抓取,可以联系我419151330

    1. 我已经初步实现了一个抓取百度指数的工具,目前只针对抓取百度指数整体趋势数据。我可以帮你抓取,可以联系我419151330

    1. 有很多人问到了这个问题,抓取过程基本上就是利用slimerjs等工具抓取指数的图片,然后利用ocr识别图片上的坐标。因此而得到图片上每个像素点高度代表的数值。然后通过曲线抽取或者说识别,得到曲线的高度。从而得到数值。

发表评论

电子邮件地址不会被公开。 必填项已用*标注