爬虫之Splash基础篇
一 点睛
Splash是一个JavaScript渲染服务,是一个带有HTTP API的轻量级浏览器,同时它对接了Python中的Twisted和QT库。利用它,我们同样可以实现动态渲染页面的抓取。
二 功能介绍
利用Splash,我们可以实现如下功能:
异步方式处理多个网页渲染过程;
获取渲染后的页面的源代码或截图;
通过关闭图片渲染或者使用Adblock规则来加快页面渲染速度;
可执行特定的JavaScript脚本;
可通过Lua脚本来控制页面渲染过程;
获取渲染的详细过程并通过HAR(HTTP Archive)格式呈现。
三 Splash服务的安装
1 通过Docker安装Splash的服务
[root@master ~]# docker run -p 8050:8050 scrapinghub/splash
2 测试安装是否成功
访问http://localhost:8050/
四 scrapy-splash库的安装
(venv) E:\WebSpider>pip install scrapy-splash
五 实例引入
1 通过Splash提供的Web页面来测试其渲染过程。例如,我们在本机8050端口上运行了Splash服务,打开http://localhost:8050/即可看到其Web页面。
2 右侧呈现的是一个渲染示例。可以看到,上方有一个输入框,默认是http://google.com,这里换成百度测试一下,将内容更改为https://www.baidu.com,然后点击Render me按钮开始渲染,结果如下:
3 可以看到,网页的返回结果呈现了渲染截图、HAR加载统计数据、网页的源代码。
通过HAR的结果可以看到,Splash执行了整个网页的渲染过程,包括CSS、JavaScript的加载等过程,呈现的页面和我们在浏览器中得到的结果完全一致。
4 脚本代码
function main(splash, args)assert(splash:go(args.url))assert(splash:wait(0.5))return {html = splash:html(),png = splash:png(),har = splash:har(),}
5 脚本分析
这个脚本实际上是用Lua语言写的脚本。即使不懂这个语言的语法,但从脚本的表面意思,我们也可以大致了解到它首先调用go()方法去加载页面,然后调用wait()方法等待了一定时间,最后返回了页面的源码、截图和HAR信息。
到这里,我们大体了解了Splash是通过Lua脚本来控制了页面的加载过程的,加载过程完全模拟浏览器,最后可返回各种格式的结果,如网页源码和截图等。
六 Splash Lua脚本
1 点睛
Splash可以通过Lua脚本执行一系列渲染操作,这样我们就可以用Splash来模拟类似Chrome、PhantomJS的操作了。
2 入口及返回值
2.1 代码
function main(splash, args)splash:go("http://www.baidu.com")splash:wait(0.5)local title = splash:evaljs("document.title")return {title=title}
end
2.2 结果
2.3 说明
注意,我们在这里定义的方法名称叫作main()。这个名称必须是固定的,Splash会默认调用这个方法。
该方法的返回值既可以是字典形式,也可以是字符串形式,最后都会转化为Splash HTTP Response。
2.3.1 返回字典代码
function main(splash)return {hello="world!"}
end
2.3.2 返回字符串
function main(splash)return 'hello'
end
2.3.3 结果
3 异步处理
3.1 点睛
Splash支持异步处理,但是这里并没有显式指明回调方法,其回调的跳转是在Splash内部完成的。
3.2 代码
function main(splash, args)local example_urls = {"www.baidu.com", "www.taobao.com", "www.zhihu.com"}local urls = args.urls or example_urlslocal results = {}for index, url in ipairs(urls) dolocal ok, reason = splash:go("http://" .. url)if ok thensplash:wait(2)results[url] = splash:png()endendreturn results
end
3.3 结果
3.4 说明
在脚本内调用的wait()方法类似于Python中的sleep(),其参数为等待的秒数。当Splash执行到此方法时,它会转而去处理其他任务,然后在指定的时间过后再回来继续处理。
这里值得注意的是,Lua脚本中的字符串拼接和Python不同,它使用的是..操作符,而不是+。如果有必要,可以简单了解一下Lua脚本的语法,详见http://www.runoob.com/lua/lua-basic-syntax.html。
另外,这里做了加载时的异常检测。go()方法会返回加载页面的结果状态,如果页面出现4xx或5xx状态码,ok变量就为空,就不会返回加载后的图片。
爬虫之Splash基础篇相关推荐
- php 爬虫_Scrapy 爬虫完整案例-基础篇
1 Scrapy 爬虫完整案例-基础篇 1.1 Scrapy 爬虫案例一 Scrapy 爬虫案例:爬取腾讯网招聘信息 案例步骤: 第一步:创建项目. 在 dos下切换到目录 D:爬虫_scriptsc ...
- 网络爬虫之java基础篇QueryRunner(Ⅲ)
目录 1Java操作数据库 java操作数据库第一种方法 java操作数据库的QueryRunner方法 1.Java操作数据库 如何将爬虫爬取的数据存储下来也是我们关注的问题之前,常用的存储方式有. ...
- 网络爬虫之Java基础篇(Ⅱ)
目录 1集合操作 集合创建 集合数据的添加 集合的遍历 1.集合操作 集合创建 Set集合不可以放重复数据,List可以,Map主要存放的是键值对,其中key(主键)不可以重复. List<T& ...
- python爬虫百度地图_零基础掌握百度地图兴趣点获取POI爬虫(python语言爬取)(基础篇)...
实现目的:爬取昆明市范围内的全部中学数据,包括名称.坐标. 先进入基础篇,本篇主要讲原理方面,并实现步骤分解,为python代码编写打基础. 因为是0基础开始,所以讲得会比较详细. 如实现目的所讲,爬 ...
- 循序渐进自学爬虫(一): 基础篇2
在开始本文的阅读之前,我希望你已经看过了 循序渐进自学爬虫(一): 基础篇1, 并且对相关的知识点进行了了解. 一个简单的不能再简单的爬虫 基本思路:利用程序来 获取网页,提取信息,保存数据. 获取网 ...
- Python3 Requests+BS4网络爬虫:最详细零基础的获取百度快照链接爬虫教程(思路篇)
Hello,大家好呀,五一劳动节快乐呀!最近在后台接到一个粉丝的私信说怎么爬取百度快照.正好五一有一段时间休息,咱们就来水一篇文章,顺便来巩固巩固基础的知识. 注意注意!这是思路篇,没有代码!只有思路 ...
- 零基础掌握百度地图兴趣点获取POI爬虫(python语言爬取)(基础篇)
实现目的:爬取昆明市范围内的全部中学数据,包括名称.坐标. 先进入基础篇,本篇主要讲原理方面,并实现步骤分解,为python代码编写打基础. 因为是0基础开始,所以讲得会比较详细. 如实现目的所讲,爬 ...
- Java网络爬虫学习记录(请求基础篇)
目录 个人实验遇见错误集: 一.javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX ...
- Python3爬虫中Splash的知识总结
更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接: 高州阳光论坛https://www.hnthzk.com/ 人人影视http://www.op-kg.com/ ...
最新文章
- Android之ActivityManagerService详解(APP启动过程)
- 【thymeleaf 】在 thymeleaf 中使用 shiro 标签
- Androd安全——反编译技术完全解析
- php左连接,如何在php中对左联接查询返回的数组数据进...
- TMM|车辆重识别的一些实践
- 统计csv词频_Python|国家统计局CPI数据动态图表可视化
- 列表视图案例3——显示联系人
- 结构体,文件操作,指针,简单练习
- 标记分布学习LDL与多标记学习MLL以及单标记学习
- opengl交叉编译
- Oracle between and
- 读懂trace file (tkprof格式化) 6
- 访问者模式的java语言_Java 设计模式系列(二三)访问者模式(Vistor)
- 我的HTML学习------表格的基本使用
- python web py入门(4)-从数据库读取数据显示到网页
- 谈谈CornerStone这个工具的使用
- 用易语言制作一款图文展示软件,点击按钮切换图片和文字说明,易语言按钮、图片框、编辑框的应用
- windows 10桌面快捷方式小箭头
- 活法 - 第四章 以利他心,度人生
- 第一节 使用ISM Web组态软件采集Modbus设备数据