Splash (渲染JS服务)介绍安装
一. splash介绍
1.Splash 是一个带有 HTTP API 的 javascript 渲染服务。它是一个带有 HTTP API 的轻量级浏览器,使用 Twisted 和 QT5 在 Python 3 中实现。
2.Splash特点:
1)它快速、轻量且无状态,使其易于分发。
2)并行处理多个网页
3)获取 HTML 结果和/或截屏
4)关闭图像或使用 Adblock Plus 规则来加快渲染速度
4)在页面上下文中执行自定义 JavaScript
5)编写 Lua 浏览脚本
6)在Splash-Jupyter Notebooks中开发 Splash Lua 脚本。
7)获取 HAR 格式的详细渲染信息。
3.安装Splash不支持windows,需要linux+docker。
4.Scrapy-Splash是一个客户端包,使Scarpy轻松集成,Scrapy-Splash使用Splash HTTP API。
二.Splash安装
Splash是基于client/server架构,需要在server端安装,客户端通过Scrapy-Splash 接口调用spalsh api接口。
1)要求环境: linux+docker, docker version>=17
2)安装docker介绍:https://www.cnblogs.com/MrHSR/p/12806991.html
[root@iZwz927xptl8kw8zqrmwvcZ ~]# sudo yum install docker-ce-19.03.15 docker-ce-cli-19.03.15 containerd.io
3) 拉取镜像: $ sudo docker pull scrapinghub/splash
[root@iZwz927xptl8kw8zqrmwvcZ ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest feb5d9fea6a5 9 months ago 13.3kB scrapinghub/splash latest 9364575df985 23 months ago 1.89GB
4) 启动容器:
[root@iZwz927xptl8kw8zqrmwvcZ ~]# docker run -d -p 8050:8050 scrapinghub/splash 3bf80a55aec2f9735be66e51d226501df118e0fc4505ae775ad9c0ead6c8a725 [root@iZwz927xptl8kw8zqrmwvcZ ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3bf80a55aec2 scrapinghub/splash "python3 /app/bin/sp…" 8 seconds ago Up 7 seconds 0.0.0.0:8050->8050/tcp silly_panini
也可以指定内存指定版本:docker run -d -p 8050:8050 --memory=4.5G --restart=always scrapinghub/splash:3.1 --maxrss 4000
或者: docker run -d -p 8050:8050 --memory=4.0G scrapinghub/splash
在外网能拼通
三. 测试
官方提供了可视化界面进行测试,浏览器打开 http://120.xx.xxx.xxx:8050/ ,如下所示
输入baidu网站会自动截屏和查看网页原码,如下所示:
查看spalsh日志,首先要知道spalsh的容器ID,在根据容器ID,查看日志
[root@iZwz927xptl8kw8zqrmwvcZ ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3bf80a55aec2 scrapinghub/splash "python3 /app/bin/sp…" 9 days ago Up 9 days 0.0.0.0:80 50->8050/tcp silly_panini [root@iZwz927xptl8kw8zqrmwvcZ ~]# docker logs -f 3bf80a55aec2
服务端安装参考:https://splash.readthedocs.io/en/stable/install.html#install-docs
客户端安装参考:https://github.com/scrapy-plugins/scrapy-splash