网上也有很多的分布式爬虫框架的解决方案,下面我就以自己工作的经验进行一些总结:
一,爬虫的技术要点
要向批量抓取某一个大站,你需要自己搭建一套爬虫框架。要考虑封IP问题,考虑图片验证码识别问题,考虑数据处理问题等。
封IP--常见的解决方案基本上就是告诉你抓免费代理,或者购买代理,我这里想到的是如果你有条件有多个路由器,完全可以自己实现一套定时拨号程序来防止IP被封。定时拨号的话也无非就是利用爬虫技术在网页上登录极路由或者其他路由器的管理后台进行自动登录然后重启路由器就解决了。这种方式的好处是比较稳定,比用烂了的免费代理要好。当然前提是你有多的上网账号和路由器。
图片验证码--比较简单的图片验证码可以自己通过pytesseract库编写识别程序,这个只能识别简单的拍照类图片数据。
遇到更加复杂的比如滑动鼠标,滑块,动态图片验证码只能考虑购买打码平台进行识别。
数据处理--当你成功绕开封IP和图片验证码的时候你拿到的数据发现经过扰乱了,内心慌得一笔。没办法只有识别出它的扰乱规律或者通过源js代码进行获取通过python的execjs库或者其他执行js的库实现数据提取。
二,分布式爬虫解决方案
要想实现批量抓取某个大站的数据比较好的方式是通过维护4个队列。具体如下:
1,url任务队列--里面存放的是待抓取的url数据。
2,原始url队列--存放的是抓取的网页中提取出来但是还未经过处理的,处理主要是检查是否需要抓取,是否重复抓取等。
3,原始数据队列--存放的是爬取的数据未经过任何处理。
4,二手数据队列--存放的是进过数据处理进程的待存储的数据。
以上的队列分别有4种进程进行监听执行任务。分别是:
1,爬虫抓取进程--监听url任务队列,抓取网页数据并将抓到的原始数据丢到原始数据队列。
2,url处理进程:监听原始url队列,过滤掉非正常的url和重复抓取的url。
3,数据提取进程:监听原始数据队列,将原始数据队列进行关键数据的提取其中包括新的url和目标数据。
4,数据存储进程:将二手数据整理过后存放到mongodb里面。
三,流程图
![](https://i-blog.csdnimg.cn/blog_migrate/a25385cd6c7590faac9a3fa6358ef678.png)