返回介绍

11.2 在 Scrapy 中使用 Splash

发布于 2024-02-05 21:13:20 字数 1821 浏览 0 评论 0 收藏 0

掌握了Splash渲染引擎的基本使用后,我们继续学习如何在Scrapy中调用Splash服务,Python库的scrapy-splash是非常好的选择。

使用pip安装scrapy-splash:

$ pip install scrapy-splash

在项目环境中讲解scrapy-splash的使用,创建一个Scrapy项目,取名为splash_examples:

$ scrapy startproject splash_examples

首先在项目配置文件settings.py中对scrapy-splash进行配置,添加内容如下:

# Splash服务器地址
SPLASH_URL = 'http://localhost:8050'

# 开启Splash的两个下载中间件并调整HttpCompressionMiddleware的次序
DOWNLOADER_MIDDLEWARES = {
 'scrapy_splash.SplashCookiesMiddleware': 723,
 'scrapy_splash.SplashMiddleware': 725,
 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
}

# 设置去重过滤器
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'

# 用来支持cache_args(可选)
SPIDER_MIDDLEWARES = {
 'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
}

编写Spider代码过程中,使用scrapy_splash调用Splash服务非常简单,scrapy_splash中定义了一个SplashRequest类,用户只需使用scrapy_splash.SplashRequest(替代scrapy.Request)提交请求即可。下面是SplashRequest构造器方法中的一些常用参数。

url

与scrapy.Request中的url相同,也就是待爬取页面的url(注意,不是Splash服务器地址)。

headers

与scrapy.Request中的headers相同。

cookies

与scrapy.Request中的cookies相同。

args

传递给Splash的参数(除url以外),如wait、timeout、images、js_source等。

cache_args

如果args中的某些参数每次调用都重复传递并且数据量较大(例如一段JavaScript代码),此时可以把该参数名填入cache_args列表中,让Splash服务器缓存该参数,如SplashRequest(url, args = {'js_source': js, 'wait': 0.5}, cache_args = ['js_source'])。

endpoint

Splash服务端点,默认为'render.html',即JavaScript页面渲染服务,该参数可以设置为'render.json'、'render.har'、'render.png'、'render.jpeg'、'execute'等,有些服务端点的功能我们没有讲解,详细内容可以查阅文档。

splash_url

Splash服务器地址,默认为None,即使用配置文件中SPLASH_URL的地址。

现在,大家已经对如何在Scrapy中使用Splash渲染引擎爬取动态页面有了一定了解,接下来我们在已经配置了Splash使用环境的splash_examples项目中完成两个实战项目。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文