Excel中怎样计算面积? Excel制作计算圆面积工具的教程-英雄云拓展知识分享
131
2023-11-13
【摘要】 本书摘自《Python网络爬虫 从入门到精通》一书中第4章,第3节,吕云翔、张扬和韩延刚等编著。
4.3.3 PyV8与 Splash
在介绍 PyV8 之前,需要先带大家认识一下 V8 引 擎 。V8 引擎是一款基于 C++编写的 JavaScript 引擎,设计之初是考虑到 JavaScript 的应用愈发广泛,因此需要在执行性能上有所 进步。在 Google 发布 V8 后 ,V8 迅速被应用到了包括 Chromium 在内的多个产品中,受到 广泛欢迎。比较粗略地说, V8 引擎就是一个能够用来执行 JavaScript 的运行工具,也是执行 JavaScript 的利器,只要配合网页 DOM 树解析,理论上它就能够当作一个浏览器来使用。为 了在 Python 中使用 V8 引擎,先要安装 PyV8 库 ( 使 用 pip 安装)。使用 PyV8 来执行 JavaScript 代码的方法主要是使用 JSContext 对象,见例4-10。
【例4-10】 使用PyV8执行JavaScript 代码。
import PyV8
ct =PyV8.JSContext()
ct.enter()
func =ct.eval(
H #
(function(){
function hi(){
return"Hi!";
}
return hi();
})
H #H
)
print(func())# 输出"Hi!"
由于PyV8 仅提供JavaScript 执行环境,无法与实际的网页URL 对接(除非在脚本基础 上做更多的扩展和更改),只能用于单纯的JavaScript 执行,因此比较常见的使用方式是通过 分析网页代码,将网页中用于构造JSON 数据接口的JavaScript 语句写入 Python 程序中,再 利用 PyV8 执行 JavaScript 并获取必要的信息(比如获取 JSON 数据的特定 URL)。 换句话 说,单纯使用 PyV8 并不能直接获得最终的网页元素信息。与 V8 引擎不同, Splash 则是一 个专为 JavaScript 渲染而生的工具(文档可见 htps://splash.readthedocs.io/en/stable/), 基于
Twisted 和 QT5 开发的 Splash 为开发者提供了 JavaScript 渲染服务,同时也可以作为一个轻 量级浏览器来使用。先使用 Docker 安装 Splash (如果机器上尚未安装 Docker, 还需要先安 装Docker 服务):
docker pull scrapinghub/splash
之后使用对应的命令来运行 Splash 服务:
docker run -p 8050:8050 -p 5023:5023 scrapinghub/splash
运行后会出现类似图4-18所示的输出。
docker run -p 8050:8050 -p 5023:5023 scrapinghub/splash
g opened,
Splash version:3.2
Qt 5.9.1,PyQt 5.9,Webkit 602.1,sip 4.19.3,Twisted 16.1.1,Lua 5.2
Python 3.5.2(default,Nov 232017,16:37:01)[GCC 5.4.020160609]
n't bfp i4le87liit
not set,defaulting to'/tmp/runtime-root'
proxy profiles support is enabled,proxy profiles path:/etc/splash/pr
verbosity=1
slots=50
rgeubment_L(sandbox:enabled)
Server listening on 0.0.0.8:8050
Site starting on 8050
Starting factory
在 HAR Data 中可以看到渲染过程中的通信情况,这部分的内容类似于 Chrome 开发者 工具中的 “Network” 模块。
使用 Splash 服务的最简单方法就是使用API 来获取渲染后的网页源码,Splash 提供了这 样的 URL 来访问某个页面的渲染结果,这使得开发者可以通过Requests 来获取 JavaScript 加载后的页面代码,而非原始的静态源码。传递一个特定的 URL(targeturl) 给该接口,可以获得页面渲染后的代码,还可以指定 等待时间,确保页面内的所有内容都被加载完成。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。