美文网首页
爬虫——百度指数

爬虫——百度指数

作者: 辰辰沉沉沉 | 来源:发表于2017-07-26 22:15 被阅读0次

    蛮早之前公司有个产品问我能不能爬百度指数,我随便瞄了眼,直接回了可以,然后...光速打脸...今儿个有空,研究研究这玩意儿。嫌长的可以直接拉到最后看后记。

    目标

    先明确下要做什么,目标不是要写出一个可用的完整的爬虫,只是要个思路。

    image.png

    我们的目标仅仅只是爬取这边的数字,162和125,还有后边的比例。

    分析

    先说点题外话,业界对数字的加密真是做的丧心病狂,返回假数据然后js重新计算修改都是简单的了,复杂的还有某移动端网页返回数字234,然而因为使用了特殊的字体显示123的,这边还有个更恶心的迷之加密。
    开始分析,首先,展示出来的样子,不像是数字,像是分辨率不高的几张图片,让我们看看渲染完的html长啥样的。

    image.png

    确实很迷,显示出来好好的类似图片的数字,html里边(而且是渲染完的html)只有几个div和span,class里边倒有几个val,txt,重点怀疑下,要看看哪里用到。而且看上去分辨率很低的图片也还没有出现,而根据我有限的知识,html里边显示出来的图片除了img标签,也就css里的background。很明显,我们在右边找到了背景图,果然,看来问题马上就要解决了,下载下来看看。

    image.png

    ???这是什么鬼???等等,621215,仅有的几个数字似乎有点熟悉,没错,就是上边那几个指数,看来我们已经找到了,感觉就是span里边的style控制显示的背景(还有这种操作??)。

    先让我们验证下上面的猜测,方法很简单,换个关键词,找到那个关键词对应的背景图,拿过来替换到该关键词中,看看数字会不会变。

    image.png

    果然,数字变了,变成了几个不知道是什么的东西。应该是有什么地方可以控制显示背景图的第某个位置之类的方法。

    继续瞎改html


    image.png

    如图,我把imgval 和imgtxt 的style进行了修改,原先的162变成了112,显然,是根据这个来控制显示的值的。这边有两个值,一个是imgval的width,另一个是imgtxt的margin-left。

    继续找,这两个值是哪里来的呢?直觉告诉我是js算出来的,一定是某个js 根据一个key,再怎么加密解密(前端就喜欢搞这一套 = = )得到的,一定是。然鹅,当我打开network,竟然发现了这个

    image.png

    ....... 直接去获取的啊....
    其实到了这,我已经能抓取了。我们公司是有爬虫渲染的模块的,但是秉承着负责的态度,继续往下看,那这个url是谁发出的呢?

    先放一个url
    https://index.baidu.com/Interface/IndexShow/show/?res=XzQxJzIIAyRuCxU5CXgybx5THHx9LRE%2FJSZtHnteBHsBBBw%2BflgJJRokN25aQDZKd34gajodKkEWJFxQfDsWBB0WJzF8MnMtFAR%2BExY3VjkNYxooZBt0NEw6Lh5TVkZEAFwSCVEGCTA%2BOFRVJUUFSFgqRm0lYXYTfCJGVVFkOyZ2fzBVMgJnAW5FIhJTMQBAfSB%2BLm0xIAJFWyZILQQGPl8mE0MEIwc8YEtYHmMUOBYaHAQcb3wgXDd%2FVCEqLn0kNzVwDgNzH1krBBwiGioDAAofGwkvDRE%3D&res2=37ST6.341397.033YAYNLDflArlUE8fO8qIhKkWJnVeMVF4jxf0pBWJlMogXpnn7RTSXE37&classType=2&res3[]=z0&res3[]=Ee&className=profWagv

    分析下长得很像的几个发出的url,很容易可以发现大部分字段都是一样的,估计是把keyword再和什么东西加密得到的,然后后边都是明文,所以我们只需要找到res和res2生成的方法就可以了。

    过去了两个小时...

    没想到啊,竟然卡在这了。
    直接给结论吧...res和res2都在直接返回的html里边。
    res是直接给的,直接搜PPval.ppt后面一长串就是了。

    res.png

    res2找了我好久,结果也是这里面。。
    找到类似这样的东西

    res2.png

    图中的VWO就是了,需要自己写下这个js模拟算下,要注意的是,这几个字母是会变得!!每次都不一样!!

    后记

    行了,就这样了,比想象的麻烦多了,但回过头来看其实很简单。

    • 获取页面 类似这样https://index.baidu.com/?tpl=trend&type=0&area=0&time=13&word=%C3%C3%D7%D3%B0%C9 ,这边可能需要登录,我没做
    • 提取PPval.ppt记做res 用正则在上面获取到的html中抽出来就好了
    • 获取res2 res2需要跑一下这个html里边有个script,具体找的方式看上一段
    • 拼接 "https://index.baidu.com/Interface/IndexShow/show/?res={res}&res2={res2}&classType=2&res3[]=z0&res3[]=Ee&className=profWagv".format(res=res,res2=res2)
    • 获取数字 上面url返回的有两样东西,一个style,确定数字位置,一个是background。两者就能得到以图片显示的数字了,然后ocr识别一下分分钟就搞定了(说的简单)

    相关文章

      网友评论

          本文标题:爬虫——百度指数

          本文链接:https://www.haomeiwen.com/subject/vcgokxtx.html