【系列】scrapy爬虫开发(9)Splash下载服务器

本文介绍了如何使用Scrapy结合Splash下载服务器来处理动态内容和静态资源。Scrapy原生下载器无法处理JavaScript,而Splash能提供渲染功能,与Scrapy紧密结合,提高爬虫性能。文章详细讲解了scrapy_splash库的组件,包括中间件、去重和HTTP缓存,并阐述了Splash的安装配置过程,以及如何在Scrapy中使用SplashRequest和SplashResponse类进行请求和响应操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

9.Splash下载服务器

原生scrapy的下载器本质上就是twisted建立TCP连接,然后直接请求单个url返回响应,不能继续请求其他相关的静态资源(除非手动编码yield所有解析到的url,但是这样的编码显然太复杂)比如js/css,更不能渲染网页。如此简单的功能,不仅不能获取需要动态渲染才能获取到的内容,也容易被很多网站反爬。
所以必须采用新的下载器,新的下载器必须能够可以像浏览器一样只需请求基本的网址,然后自动获取所有相关的静态资源,且能够执行js,渲染css,得到与真实浏览器相似的页面。
splash这类下载器和selenium这类自动化测试工具都可以实现,两者各有优势。splash可以与scrapy深度结合,性能较佳,代码逻辑较清晰;selenium使用真实的浏览器引擎,是应对反爬的最佳选择,还可以通过代码模拟各种浏览器动作,功能强大,但缺点是与scrapy配合度不够,性能较差。

scrapy_splash库

scrapy_splash主要内容:
1.一些中间件。
2.去重。
3.http缓存。
4.重写了原生scrapy的Request和Response类。

splash安装配置

splash通过建立服务、监听独立的端口,通过httpAPI实现功能,scrapy发出的请求不再进入原生下载器,而是传递给splash服务的API,splash会请求url得到响应后返回给scrapy。
splash运行在docker容器内,可通过官方提供的shell命令安装和运行。
在爬虫工程的配置文件里修改或添加一些项:
yourproject/settings.py:

HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'#基于splash的缓存
SPIDER_MIDDLEWARES = {
    #磁盘缓存去重
    'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
}
DOWNLOADER_MIDDLEWARES = {
    'scrapy_splash.SplashCookiesMiddleware': 723,
    'scrapy_splash.SplashMiddleware': 725,
}
SPLASH_URL = 'http://localhost:8050'

SplashRequest和SplashResponse类

均继承自原生scrapy的Request和Response类,并添加了许多参数选项。
需要重写RedisSpider的make_requests_from_url()方法,把默认的返回值Request对象改为SplashReqest对象,然后在所有的爬虫代码中把Request对象改为SplashRequest对象。
改写之后,则爬虫运行后,会停用scrapy原生下载器,而使用splash的下载器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值