抓取百度指数引发的图像数字识别

作者介绍

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

前言

学习爬虫也有段时间了,闲着无趣,想找点项目练练手,于是乎通过顺祥老师介绍,接到了一个关于百度指数的爬虫需求。(百度指数可以反映一个词在一段时间内的搜索热度,不知道百度指数的同学们可以自行百度)。好的,话不多说,开始我们的项目。

百度指数页面

输入查询的关键字

嗯?跳转到了登陆界面!(赶紧拿出小本本记下,这里需要登陆)。

登陆后的展现

心中窃喜,脑子里满是抓包分析,模拟请求,获取指数,gameover!!!然而事实并没那么简单,根据爬虫的套路,需要查看属性(在上图中右键检查,找到文件):

正常来说这里的json文件中应该就有我们需要的文本内容,然而打开后发现它是一张图片,而且还是一张拼图,如下图所示:

并且这个图片链接包含了三个参数,如下图所示(黄色标出):

看得脑壳都大了,先不说怎么分析加密参数,就算是破解了拿到图片链接,也无法直接取出需要的数字,因为还需要进行图像识别…沉思中…没办法,打算曲线救国,我们直接模拟鼠标移动,然后截取悬浮的黑框图片,再进行图像识别,得到百度指数。新的思路就是这样,开搞。具体步骤如下:

模拟登陆

我们使用selenium驱动谷歌浏览器,定位到输入框,清空并输入关键词,跳转登陆页面后在登陆百度指数。

构建截图区域

这当中的核心是ActionChains(browser).move_to_element_with_offset(xoyelement, x_0, 0).perform()。这个是用来确定鼠标的悬浮位置,我们先是通过css定位到xoyelement,然后通过offset(xoyelement, x_0, 0),确定偏移的位置,我们这里使x_0初始值为1,是因为发现为0时数值不出现。

下图中显示的是viewbox, 为了防止鼠标移动时没有viewbox的情况,我们通过判断样式是否为隐藏来确定viewbox是否出现。

要确保viewbox出现后才能进行屏幕截图。

Rangle的构建

我们想要的是这个图片中的数字,并不是整个屏幕的截图,所以需要我们构建rangle,把真正的数值从屏幕截图中抠出来:

先定位到viewbox位置,然后我们构建了一个关键字长度的公式,以及rangle的范围的公式,这当中绝大部分参考百度,感谢百度!通过上面的布置,可以把百度指数的图片给下载下来,接下来的工作就是从这些图片中进行数字的识别。

图片数字识别

这里的主要思想是先将图片放大一倍从而提高识别率,然后用pytesseract这个模块进行识别,因为我们截取的数字在图片中十分‘干净’,无需做什么处理,很开心,只需对识别结果中的 ’,’ 或者是 ’.’ 去除即可。

结语

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏腾讯NEXT学位

Mobx 核心概念简单入门:以股票为例

37550
来自专栏ThoughtWorks

TW洞见 | 可视化你的足迹

今日洞见 文章作者来自ThoughtWorks:邱俊涛。 本文所有内容,包括文字、图片和音视频资料,版权均属ThoughtWorks公司所有,任何媒体、网站或个...

397120
来自专栏阿凯的Excel

复合饼图绘制(Excel绘制图表系列课程)

分享Excel的图表已经第三周了,曾经说给我好处的人,到现在还没有兑现。 嗯,我怎么会是这么庸俗的人,嗯嗯!!! 今天和大家分享一个相对于前两期都比较容易绘...

42450
来自专栏企鹅号快讯

使用 Python+Selenium制作Flash游戏辅助

知道 Selenium 用来测试或爬取动态内容,还真没想过用来做游戏外挂 作者:sincerefly 来源:https://blog.yasking.org/a...

1.1K70
来自专栏ThoughtWorks

React全家桶与前端单元测试艺术|洞见

TL;DR——什么是好的单元测试? 其实我是个标题党,单元测试根本没有“艺术”可言。 好的单元测试来自于好的代码,如果说有艺术,那也是代码的艺术。 注:以下“...

37460
来自专栏钱塘大数据

【干货】让你用Excel做出强大漂亮的数据地图

看了大部分关于如何用excel做数据地图的回答,感觉最费劲的地方都在地图素材上,有用多边形描出来的(有点儿累),有推荐excel插件的(不喜欢依赖插件或软件包)...

23530
来自专栏Pytorch实践

游戏推动微信小程序生态,跳一跳小游戏开发

37270
来自专栏腾讯移动品质中心TMQ的专栏

当我们讨论流畅度的时候,我们究竟在说什么?

前言:那些年我们用过的显示性能指标 相对其他 Android 性能指标(如内存、CPU、功耗等)而言,显示性能(包括但不仅限于我们常说的“流畅度”)的概念本来...

716100
来自专栏JackieZheng

自己动手写可视化软件(代码已开源)

  一年多前,那时候我还在实习,正好上一个项目接近的尾声,紧随而来的就是一个大数据一体化的项目,包括了数据的采集、处理、计算、整合以及数据展示等。   而可视化...

26090
来自专栏菩提树下的杨过

Flash/Flex学习笔记(12):FMS 3.5之如何做视频实时直播

硬件条件:一个摄像头 + 一台FMS服务器即可 原理:摄像头实时采集视频源,然后推送到FMS服务器,其它客户从FMS上获取视频流。 需要做二个fla,一个用于向...

19680

扫码关注云+社区

领取腾讯云代金券