用图像识别做爬虫
最近闲来无事为了提高自己,到查试图抓取一些企业信息,可是发现在抓取其企业列表页时,看到的企业名称和实际抓到的不一样,网站对其进行了加密(今天又正常了),同样例如猫眼电影的电影票房信息也进行了加密处理。结合之前处理验证码的经验我在想能不能利用图像识别的方法抓取这些内容,因为一般网页上的内容都很规整,据我目前的测试Tesseract对规整数字的识别率已经达到95%以上,走通这个流程后不但可以实现对简单验证码的自动识别,而且爬取不同的网站不用去分析其加密函数了岂不快哉!本次分享是我的初步尝试,目前用的工具为:Python+Selenium+chrome+PIL+Tesseract-OCR**。
image
01 THE THINKING 思路介绍
这里采用了selenium驱动浏览器的方法进行数据采集,因为需要把对应标签保存为图片进行识别,所以只能采用模拟登陆的办法。这里用chrome浏览器后面会介绍为什么不采用phantomJS,PIL是用来进行图片预处理的,一般首相会进行二值化处理,进而进行锐化处理增强其对比度,这样对于字体颜色不深的图像识别可以提高其识别精度。这里的图像识别采用的是Tesseract-OCR这个软件,Tesseract的OCR引擎最先由HP实验室于1985年开始研发,至1995年时已经成为OCR业内最准确的三款识别引擎之一。然而,HP不久便决定放弃OCR业务,Tesseract也从此尘封。数年以后,HP意识到,与其将Tesseract束之高阁,不如贡献给开源软件业,让其重焕新生–2005年,Tesseract由美国内华达州信息技术研究所获得,并求诸于Google对 Tesseract进行改进、消除Bug、优化工作。
Tesseract目前已作为开源项目发布在Google Project,其项目主页在这里(https://code.google.com/p/tesseract-ocr/)查看。
02 THE INSTALL AND CONFIGURATION【
Tesseract安装配置
以下是Windows环境下的安装配置过程:
第一步:下载安装包
根据https://github.com/tesseract-ocr/tesseract/wiki,找到64位的非官方安装包http://digi.bib.uni-mannheim.de/tesseract/tesseract-ocr-setup-4.00.00dev.exe,下载后直接安装即可,但是要记得你的安装目录,我们等会配置环境变量要用。
如果不是做英文的图文识别,还需要下载其他语言的识别包https://github.com/tesseract-ocr/tesseract/wiki/Data-Files。
简体字识别包:https://raw.githubusercontent.com/tesseract-ocr/tessdata/4.00/chi_sim.traineddata
繁体字识别包:https://github.com/tesseract-ocr/tessdata/raw/4.0/chi_tra.traineddata
数字识别包:https://raw.githubusercontent.com/tesseract-ocr/tessdata/4.00/num.traineddata。
下好的识别包需要放到安装目录Tesseract-OCR下的tessdata文件夹下,如下图所示:
第二步:安装
直接执行下载好的tesseract-ocr-setup-4.00.00dev.exe,下一步、下一步安装。
第三步:配置环境变量
注意:我的系统是win8.1,其他系统应该差不多,跟配置java变量一样
复制你的安装地址,我的是安装在E:\Program Files (x86)\Tesseract-OCR,界面如下:
复制安装路径“E:\Program Files (x86)\Tesseract-OCR”,进入“控制面板\系统和安全\系统”,点击“高级系统设置”进入系统属性,点击“环境变量”,然后新建两个环境变量,分别命名为:Tesseract-OCR和TESSDATA_PREFIX,值分别是:E:\Program Files (x86)\Tesseract-OCR ,E:\Program Files (x86)\Tesseract-OCR\tessdata;配置好了点击保存。新添加环境变量一般需要重启电脑后才能生效。
打开命令终端,输入:tesseract -v,可以看到版本信息,如下图:
如果报错可能是配置问题,请仔细检查,如不能解决请留言。安装配置完成可以在命令行中测试tesseract是否能识别成功,具体流程如下:
先将需要识别的图片保存到一个文件夹中,例如网页上的内容可以通过截图将需要分别的内容保存为图片;
可在命令行窗口中打开存储图片的文件夹;
在命令行中输入:
tesseract <图片名称如:1.png> <保存文件名称如:1(此时识别出的内容会保存在1.txt文件内)> -l <识别包名称如:num/eng/chi_sim,若干识别的内容中存在数字和英文可以用:num+eng,其他情况与此相似>,举例如下:
解析的图片与识别结果如下图所示:
&
通过这个案例我们发现我们能准确识别其内容!!
来源:哈希大数据
- 点赞
- 收藏
- 关注作者
评论(0)