背景
以前,觉得爬虫是不稳定的,而且不被业界允许的,从来没想过会在实际的项目中使用。现在,由于各种突发情况,必须使用爬虫才能完成相应任务。起初,觉得爬虫不过是爬取网页,解析网页就可以了,比较简单,谁知一路心酸泪。
查阅各种资料,Java相关的爬虫工具也比较多,由于时间关系,只简单看了下面几种,分析如下:
HtmlUnit |
webmagic |
Selenium |
phantomjs |
|
优点 |
Java编写的无界面浏览器,内置Rhinojs浏览器引擎,支持表单填充,点击链接,能够获取动态页面等。 |
webmagic采用完全模块化的设计,支持链接提取、页面下载、内容抽取、持久化,支持多线程抓取,分布式抓取,并支持自动重试、自定义UA/cookie等功能。另外国人编写,文档齐全,支持。 |
Web浏览器测试工具,支持获取动态网页,支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Firefox,Safari,Google Chrome,Opera等,模拟真实用户的操作。可以用来测试项目的兼容性。 |
PhantomJS是一个基于webkit的JavaScript API。支持Dom操作、css选择器、截屏等,无界面的浏览器操作,节省内存,另外支持js脚本,功能强大。 |
缺点 |
对css、js支持不好,最大的缺点,获取动态网页需要指定固定等待时间,类如:Thread.sleep(10000),时间不好把控,性能极差 |
静态HTML获取方便,但动态网页无法获取,需要另外使用工具,类如Selenium浏览器模拟。 |
运行过程中会打开浏览器界面,内存消耗大,与各种浏览器版本强依赖,适用于测试项目兼容性,不适用当前业务。 |
无界面浏览器,无法显示的模拟用户操作 |
由于这次需要爬取的网站,基本上都是采取JS+AJAX获取数据,渲染的动态网页,所以最终选择了 selenium+phantomjs组合进行爬取,因为selenium封装了phantomjs,能够让我们更方便,更好的使用,节约时间和成本。
准备
phantomjs下载:
使用phantomjs则需要下载相应运行器,下载网址:https://phantomjs.org/download.html,大家可以根据自己的系统进行下载,这里我们使用windows版本—phantomjs-2.1.1-windows.zip。大家下载下来解压即可。
Maven依赖如下:
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selen