做了一个多月的JAVA爬虫爬取百度指数的项目,发现出现了很多问题,总结如下:
抓取百度指数的整体思路:
1、首先得模拟登陆百度账号(用selenium+PhantomJS模拟登陆百度,获取cookie)
2、由于有该死的验证码,因此我们要绕过验证码,保存cookie模拟登陆(绕过万恶的验证码)
3、然后模拟登陆以后,程序截取屏幕保存到本地图片。(屏幕截屏)
4、读取本地图片。(读取图片)
5、找到搜索指数所在区域,裁剪图片。(裁剪图片)
6、下面就是进行图像识别,或者说验证码识别了。(去灰度化,二值化,图像识别)
问题一:百度指数具体的数字竟然是图片!!!每一个数字竟然都是一个图片!显然,常规的思路已经无法驾驭百度指数了
解决思路: 采用Python的图像识别包来识别并爬取百度指数
问题二:因为他们的数字用图片显示的。还不是普通的图片,比如,12345,这串数字不是在图片上挨着显示的,而是在一张大背景图上,好多乱码,其中包含这5个数字,用css控制,把这5个数字按照顺序“露”出来。这样,OCR程序也犯难了。
解决思路:根据css的定位,把数字小图切下来,合一起交给ocr。图、css参数等等都能用GooSeeker抓取下来。再开发一个拼装程序就行了。
step1,定位
step2,截图
step3,OCR
思路就是浏览器截图+OCR识别,因为百度指数的数值是采用html格式+加密二进制传输,怎么都是需要OCR的
爬搜索指数,要解决3大技术问题:
1)模拟鼠标在图表上移动,让爬虫抓取悬浮出来的信息,要使用动态爬虫技术。
2)数字是图片格式的,而且不是完整的图片,要拼图。
3)要用ocr把数字识别出来