无头浏览器是一种没有操作界面的浏览器,常用于网页自动化测试,利用其提供的API,可以自动执行操作指令,它是测试利器,也是爬虫神器,Chrome则是自带该特性的王者
背景
这几天发现了几个好玩的Html5游戏,界面效果十分炫酷,简直是解压神器。但由于游戏网站是国外的,访问速度不稳定,尤其是用到Google提供的JS、字体文件时,有时连图片都无法正常显示,这逼我放大招啊!立马准备撸个爬虫将游戏代码下载到自己服务器来玩,岂不是爽歪歪。
方案
动手之前,先做个全面的分析,爬虫方案有很多,但这次有所不同,工具不对可能会干无用
分析
h5游戏和普通静态网站有所不同。通常静态网站是一次将资源文件全部加载到页面,通过标准的script、link、img等html标签加载,简单的页面甚至可以直接Ctrl+S保存下来。
而游戏站点要复杂的多,通常会基于成熟的游戏引擎开发,需要加载大量的js、图片、音频等资源。游戏开始之前会有一个资源加载页面,等待期间使用Javascript程序异步加载游戏所需要的资源文件。
这个异步加载是势必要破的障碍。无论是Ctrl+S还是Curl、Wget,可以统统退下了,专业的事情得专业的工具,咱可以打开浏览器devtools来分析站点结构,但总不能手动一个一个的保存请求相应吧,工具能干的事,咱绝对不动手。
工具选择
想和异步请求打交道,最好的方式便是模拟浏览器访问,这方面早有先驱者为咱趟过坑了,核心是使用无头浏览器模拟真实用户操作,不过这次比较特殊,需要抓取所有前端资源文件并保存下来,而不是单纯的抓取页面标题、图片这类工作。我找了三个轻量级的方案进行分析选择
splash