前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >百度指数之图像数字识别(2)

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

作者头像
企鹅号小编
发布2018-01-12 10:58:46
1.7K1
发布2018-01-12 10:58:46
举报
文章被收录于专栏:编程

作者介绍

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

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

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

使用到的Python第三方包:

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

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

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

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

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

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

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

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

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

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

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

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

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

变成下图

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

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

裁剪

拼接

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

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

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

好了,今天就到这里了,今天是12月31号,2017年的最后一天(对不住大家,小编推送晚了。。。),这篇文章就当做是自己将近半年来学习python的总结吧,还有很多不会的东西,还有很多想学的东西,只希望2018的自己,能够每天进步一点点,望大家共勉!

print (‘2017再见!’)

print (‘2018你好!’)

谨遵原作者的意思,这里就不单独发放源代码了,敬请原谅。

本文来自企鹅号 - 每天进步一点点2015媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - 每天进步一点点2015媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图像识别
腾讯云图像识别基于深度学习等人工智能技术,提供车辆,物体及场景等检测和识别服务, 已上线产品子功能包含车辆识别,商品识别,宠物识别,文件封识别等,更多功能接口敬请期待。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档