百度指数之图像数字识别(2)

浏览: 1442

作者介绍

叶成,数据分析师,就职于易居中国,热爱数据分析和挖掘工作,擅长使用Python倒腾数据。

在开始本位之前,这里先感谢一下本人公司的伟哥和孟哥(虽然孟哥也没帮上啥忙,但是以后有的是机会,哈哈)。


上次发了篇运用selenium自动截取百度指数并识别的文章点这里抓取百度指数引发的图像数字识别》,其实感觉也是有些投机取巧的意思在里面,而且正如大家所知,用selenium比较吃内存,而且因为要渲染网页,爬去效率也比较低。所以这次我们直接请求图片,通过抠图、拼接、再识别的方式来完成这个百度指数爬虫项目。

使用到的Python第三方包:

image.png

百度指数如下图所示,需要登录!

image.png

和之前一样,爬取百度指数,第一个要面对的问题便是登陆问题,随手百度了一下,关于百度登陆的文章还是不少的,不过说句实话,小编太菜,弄个fiddler抓包,chrome浏览器总是报错,折腾了半天,对于那个rsa加密什么的也是一头雾水,算了,与其复制黏贴,不如以后咱再话时间慢慢弄个明白,这次我们还是用selenium登陆获取cookie

image.png

成功登陆并获取cookie后,我们来分析下需要请求的图片

image.png

每次移动都会加载出这些文件,我们选一个看看:

image.png

我们格式化一下这个json文件,可以看出他是一串css样式,图片url也在里面:

image.png

我们把url拿出来,下载图片看看,(这是我随便找的一条,不是的上面链接

image.png

没错!你没看错!我们请求的图片就是长这样,怎么还原成前端渲染后的图片,咱们稍后讲,先看看怎么获取图片。

image.png

我们看到这里有6个参数,其中classType、className都是不变的,其他4个参数都是变化的,先看最下面这个参数,是一个时间戳,这个好办。剩下res、res2、res3,我寻寻觅觅找到了res3,它藏在这个文件中:

image.png


这个userIndexes_enc便是我们请求页面中所有图片的res3参数,所以我们请求图片前要先获取这个文件中的res3,那么我们看下这个文件:

image.png

这里同样需要res、res2,头疼!!!各位观众老爷,我对不住你们,我翻看了网页上很多js脚本,没能破解出这个res、res2,这里先当我欠你们的,以后一定还,好不好。既然不能还原它们的生成方式,也不能阻止我的前进,那我们就先拿现成的好了,于是乎我:

image.png

还是通过selenium执行js脚本后,拿到res、res2,这两个日期参数就不用多说了,好了请求图片网址的所有参数我们都拿到了,直接开始构建请求吧!

image.png

我们先拿到json文件后我们取出了其中需要的res3参数放进列表,接下来我们需要拿着res3再去请求图片网址:

image.png

取出网址还不行,我们还要把原图还原成前端渲染后的样子:即从下图

image.png

变成下图

image.png

所以我们将css样式中的width 和margin_left全部都拿下来,方便等会裁剪拼接图片

image.png

咱们这里模拟他的渲染方式来裁剪图片,然后再将裁剪的图片拼接起来。这里随便找张图片看看:

裁剪

image.png

最后一部分就是图像识别了,和之前一样,我们还是使用pytesseract识别。

image.png

我们先把图像放大2倍,再识别,并对识别结果容易发生错误的部分进行了修正,一起来看看最后的结果图吧。

image.png

Ps:文明爬虫(为了不给网站服务器造成太大压力,大家请求时请放点慢速度)

image.png

这篇文章就当做是自己将近半年来学习python的总结吧,还有很多不会的东西,还有很多想学的东西,只希望2018的自己,能够每天进步一点点,望大家共勉!

推荐 0
本文由 每天进步一点点2015 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册