Scrapy 之 docker splash

本文介绍如何在Ubuntu上使用Docker安装并配置Splash服务,通过编写Lua脚本结合Scrapy-Splash库实现动态网页的数据抓取。

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

Scrapy 之 docker splash

1. ubuntu 安装docker 命令

curl -sSL https://get.daocloud.io/docker | sh

  或者

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

2. 启动docker

sudo docker systemctl start docker

3. 安装Splash 拉取docker镜像

sudo docker pull scrapinghub/splash

4. 拉取成功后启动服务器

启动命令为:

docker run -p 8050:8050 -p 5023:5023 scrapinghub/splash

5. 最后再浏览器中打开

  1. 最后通过写lua 脚本 然后配合scrapy-splash 这个库 完成动态数据爬取
### Scrapy-Splash 的使用方法 Scrapy-Splash 是一个用于解决 Scrapy 无法解析由 JavaScript 动态加载的网页内容的问题的工具。通过集成 Splash 渲染服务,可以获取到经过 JavaScript 渲染后的页面源码。 #### 安装依赖 在使用 Scrapy-Splash 前,需安装必要的 Python 库以及启动 Splash 服务。以下是具体操作: 1. **安装 Scrapyscrapy-splash** ```bash pip install scrapy scrapy-splash ``` 2. **启动 Splash 服务** 下载并运行 Docker 镜像以快速部署 Splash: ```bash docker run -p 8050:8050 scrapinghub/splash ``` 启动成功后,默认监听 `localhost:8050` 地址[^4]。 --- #### 示例代码 以下是一个完整的 Scrapy Spider 实现动态加载页面抓取的例子: ```python import scrapy from scrapy_splash import SplashRequest class ExampleSpider(scrapy.Spider): name = 'example' allowed_domains = ['example.com'] start_urls = ['http://example.com'] def start_requests(self): for url in self.start_urls: yield SplashRequest( url=url, callback=self.parse, args={ 'wait': 2, # 设置等待时间,确保 JS 加载完成 'timeout': 30, # 超时设置 }, endpoint='render.html' # 默认渲染 HTML 页面 ) def parse(self, response): title = response.css('title::text').get() body_text = response.xpath('//body/text()').extract() yield { 'title': title, 'content': ''.join(body_text).strip(), } ``` 在此示例中,`SplashRequest` 替代了普通的 `scrapy.Request` 请求对象,并传递额外参数给 Splash 服务,例如 `'wait'` 表示等待时间为 2 秒,允许页面上的 JavaScript 执行完毕后再提取数据[^2]。 --- #### 关键配置项说明 - **endpoint**: 指定 Splash 提供的服务端点,常用的有 `render.html`, `execute`(执行 Lua 脚本)[^4]。 - **args**: 自定义请求参数,常见的选项包括: - `wait`: 等待时间(秒),让页面充分加载。 - `lua_source`: 如果需要自定义逻辑,可以通过此字段传入 Lua 脚本。 - `timeout`: 单位为秒的最大超时时间。 - **splash_url**: 若未指定默认连接本地 Splash 服务 (`http://localhost:8050`)。 --- #### 中间件启用 为了使 Scrapy 支持 Splash,请修改项目的 `settings.py` 文件如下: ```python DOWNLOADER_MIDDLEWARES = { 'scrapy_splash.SplashCookiesMiddleware': 723, 'scrapy_splash.SplashMiddleware': 725, 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810, } SPIDER_MIDDLEWARES = { 'scrapy_splash.SplashDeduplicateArgsMiddleware': 100, } DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter' # 可选:如果需要缓存响应 HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage' ``` 以上配置启用了 Scrapy-Splash 的去重过滤器和 HTTP 缓存功能[^1]。 --- ### 注意事项 1. **性能优化** Splash 对于大规模爬虫可能成为瓶颈,建议合理调整并发数或增加多个 Splash 实例分担压力[^3]。 2. **资源消耗** Splash 运行时会占用较多内存和 CPU,因此生产环境应考虑硬件条件适当扩展容器实例数量。 3. **错误处理** 在实际应用中可能会遇到网络异常等问题,务必加入 robust error handling 来增强稳定性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值