11.2 在 Scrapy 中使用 Splash
掌握了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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论