很长一段时间,由于工作需要,常常需要在几百台VPS上面部署爬虫程序,也是时候对这些用到的技术做一些总结和分享,考虑到敏感性,不会涉及代码
爬虫端
过时的PhantomJS
翻看以前使用的老爬虫程序,会看到很多和PhantomJS相关的代码,为什么PhantomJS会较广泛的应用于爬虫,以及为什么现如今已经过时了呢?
PhantomJS作为比较富盛名的WebKit API,具体说明和文档可以参考PhantomJS
简单来说,按照官网的说法,PhantomJS是一个无界面的,可脚本编程的WebKit浏览器引擎。它原生支持多种web 标准:DOM 操作,CSS选择器,JSON,Canvas 以及SVG。
所以如果我们并非简单爬取html,而是需要获取JS渲染的页面,亦或是需要进行一些登录操作,是可以采用PhantomJS,同时也很好支持自动化测试。
为什么说它已经过时了呢,因为PhantomJS目前最新版本是2.1.1,发布时间是2016年3月份(#-.-),所以新版的浏览器不是很兼容PhantomJS,开发者在使用中可能会遇到很多问题,而且Selenium也不再支持PhantomJS。
经常需要自动化测试或者使用爬虫的小伙伴应该知道Selenium,需要模拟用户操作浏览器或者针对一些反爬厉害的网站时,通常都是使用Selenium,原理大致就是每一条Selenium脚本,都会创建一个HTTP请求,发送给浏览器驱动,驱动中的HTTP Server接受到请求之后,操控对应浏览器执行脚本步骤,浏览器会将执行结果返回给HTTP Server,HTTP Server再返回给Selenium脚本
新生代主流Puppeteer
我想很多人应该在Puppeteer发布的时候,就成了它的忠实用户
Puppeteer是Google Chrome 团队官方的无界面Headless Chrome工具,下载地址Puppeteer
Puppeteer是基于node开发,所以需要搭配Node运行环境,至少是v6.4.0以上,并且安装时会下载最新版本的 Chromium,根据官方的描述,Puppeteer可以做到以下功能:
- 生成页面的截图和PDF
- 抓取SPA(通过多方渲染生成最终页面的单页应用)
- 从网站抓取你需要的内容。
- 自动表单提交,UI测试,键盘输入等
- 创建一个最新的自动化测试环境。使用最新的JavaScript和浏览器功能,直接在最新版本的Chrome中运行测试。
- 捕获您的网站的时间线跟踪,以帮助诊断性能问题。
是不是连Selenium都不用了,手动操作浏览器的大部分操作都可以使用Puppeteer来完成,为了更好的支持Puppeteer,所以爬虫端一般也都是使用node.js来开发),结合我自己的使用和开发来看,node的项目有几个点值得说一下:
- JavaScript的编程语言,门槛较低,前端人员也能进行后台开发,是的,前后端语言互通
- 具有非阻塞的io模式,处理高并发场景性能更高,并且在机器性能较低的情况下也能拥有高性能和出色的负载
- 非常便利的异步驱动
- 广受诟病的单进程,单线程已经在高版本(V8和以上)的node中得到解决
- 同时也由于Js的灵活性(大量函数式编程、匿名函数),所以不容易看懂别人写的代码,造成后期维护上的不便利
有关爬虫端的东西就暂时写到这,后续我会补充其他部分,爬虫的任务分发、html解析都值得记录。