什么是splash
Splash是一个Javascript渲染服务。它是一个实现了HTTP API的轻量级浏览器,Splash是用Python实现的,同时使用Twisted和QT。Twisted(QT)用来让服务具有异步处理能力,以发挥webkit的并发能力。
为什么有splash
为了更加有效的制作网页爬虫,由于目前很多的网页通过javascript模式进行交互,简单的爬取网页模式无法胜任javascript页面的生成和ajax网页的爬取,同时通过分析连接请求的方式来落实局部连接数据请求,相对比较复杂,尤其是对带有特定时间戳算法的页面,分析难度较大,效率不高。而通过调用浏览器模拟页面动作模式,需要使用浏览器,无法实现异步和大规模爬取需求。鉴于上述理由Splash也就有了用武之地。一个页面渲染服务器,返回渲染后的页面,便于爬取,便于规模应用。
Splash的安装
从splash网站上看,splash是容器安装的,而容器安装仅介绍了在linux和 mac os上的容器安装,所以首先要在windows下安装容器
docker在windows下的安装
-
首先点击下面链接,从docker官网上下载windows下的docker进行安装,不过请注意系统要求是**windows1064位 pro及以上版本或者教育版 **,本文使用为非windows10 pro版本的docker toolbox
win10 版本docker工具箱下载
如果不是请点击windwos docker工具箱下载
-
安装docker到机器
注意在运行时如果是win7以上版本请使用管理员身份运行
然后按安装提示安装就好。安装完成后在桌面上有4个图标具体如下
-
用管理员身份运行docker quickstart terminal,可能会出现报找不到bash.exe错误,这个是由于bash.exe的安装目录和 docker quickstart terminal快捷方式中所指向的bash.exe的目录不一致所造成,修订docker quickstart terminal快捷方式中的bash.exe目录就好,具体bash.exe的目录在Git安装目录下的bin目录中。
注意:运行这个需要在bios中打开CPU对应虚拟化支持VT-x/AMD-V
第一次运行需要做基本设置时间相对较长
-
使用SecureCRT连接docker
下载并安装secureCRT,
在连接对话框输入docker的地址:默认是192.168.99.100,上面的图里看得见:),用户名:docker,密码:tcuser
在docker中安装和运行splash
- docker中安装splash
通过SecureCRT连接到docker机器输入
#从docker hub下载相关镜像文件
sudo docker pull scrapinghub/splash
这里需要注意的是由于docker hub的软件仓库不在国内,下载或许需要不少时间,若无法忍受请自行使用代理服务或者其他镜像仓库
- 启动splash服务
- 使用docker启动服务命令启动Splash服务
#启动splash服务,并通过http,https,telnet提供服务
#通常一般使用http模式 ,可以只启动一个8050就好
#Splash 将运行在 0.0.0.0 at ports 8050 (http), 8051 (https) and 5023 (telnet).
sudo docker run -p 5023:5023 -p 8050:8050 -p 8051:8051 scrapinghub/splash
-
服务启动后,打开浏览器输入192.168.99.100:8050查看服务启动情况
-
输入www.baidu.com,点击Render me 按钮,立马可以看见在服务器端渲染后的百度页面
- Splash使用
Splash 本身支持进行页面的过滤,具体规则模式和Adblock Plus的规则模式一致,我们可以通过直接下载Adblock Plus的过滤规则来对页面进行过滤,或者为了提高页面的加载和渲染速度,可以通过设定过滤规则来屏蔽一些不想下载的内容,比如图片,视频等。一般可以首先下载Adblock Plus的规则,屏蔽掉广告
#设置一个本地目录映射为docker中 splash的文件目录,用于类似adblock plus的广告过滤
#<my-filters-dir>:是一个本地文件夹,注意这里的本地是宿主哦,不是windows哦
#同时设置adblock过滤器目录为/etc/splash/filters
$ docker run -p 8050:8050 -v <my-filters-dir>:/etc/splash/filters scrapinghub/splash --filters-path=/etc/splash/filters
下图是没有加载过滤器的新浪首页样子
下图是使用过滤器后新浪首页的样子