前言
在参与一个项目的时候,得到了这样一个需求,需要我用爬虫爬取某个关键词的百度指数,而当我打开网址后http://index.baidu.com/,简单登陆输入关键词后,发现事情并不那么简单。
表面上看,这里只需要模拟鼠标操作,然后读取弹出的每一个ViewBox的数据便大功告成了。但百度不会让你那么简单获取数据。
通过这张图我们很开心地发现,百度指数具体的数字竟然是图片!!!每一个数字竟然都是一个图片!!!!显然,常规的思路已经无法驾驭百度指数了,在经过综合考虑过后,我决定采用Python的图像识别包来识别并爬取百度指数。
主要技术介绍
Selenium
Selenium是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中,就像真正的用户在操作一样。它可以最大限度地模拟浏览器操作,每运行一个Selenium程序就会打开一个浏览器。
在本次数据采集工作中我们最为核心的是采用了ActionChains这个类,实现了模拟鼠标的移动。每次移动的距离就是从一天到下一天的距离。
ActionChains(browser).move_to_element_with_offset(xoyelement, x_0, y_0).perform()
Pytesseract
而在获取到图像数据后,我们使用Python一个常用的图像识别包完成了图像数据向数字数据的转换。
image = Image.open(path + "/zoom/" + printString)
code = pytesseract.image_to_string