Docker部署及使用Docker部署Splsh+Scrapy爬取动态渲染页面
前言
在使用 Scrapy 爬取动态渲染页面(JS 加载、异步接口数据)时,原生爬虫无法直接获取页面真实内容,经常出现网页解析失败、数据为空等问题。
Splash 是一款轻量级 JavaScript 渲染服务,可以模拟浏览器执行 JS、渲染动态网页,搭配 scrapy-splash 插件能完美补齐 Scrapy 不支持动态页面的短板。
本文将从 Docker 部署 Splash 镜像开始,一步步讲解环境搭建、依赖安装、Scrapy 项目配置与代码编写,带你完整实现 Scrapy + Splash 抓取动态网页。
一、Docker部署
1.1 环境配置
我是以centos7为例,本次所有部署都是在centos7虚拟机上进行,如果使用的不同,可按需参考。首先需要一台CentOS 7虚拟机,没有centos7可参考:centos-7-isos-x86_64安装包下载-开源镜像站-阿里云Oracle VirtualBox虚拟机安装CentOS 7 。
![]()
1.2安装Docker 安装Docker
1.验证服务器是否接入互联网
ping baidu.com
如果能够正常显示ping信息证明网络可用
2. 检查CentOS内核版本
Docker要求CentOS系统的内核版本高于3.10,看一下CentOS版本是否支持Docker。
uname -r
3.使用root权限登录CentOS。确保yum包更新到最新
sudo yum update
4.安装Docker所需依赖
yum -y install yum-utils device-mapper-persistent-data lvm2
5.指定Docker镜像源,使用阿里云加速
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
6.安装Docker
yum -y install docker-ce
7. 验证安装成功
docker -v
8. 启动Docker
sudo systemctl start docker
9. 设置开机启动(注意,如果你长时间用这个虚拟机的话,并且内存分配的比较少,建议跳过这一步)
sudo systemctl enable docker
10. 测试镜像
docker run hello-world
二、slpsh的配置及使用
1.获取splash的镜像
sudo docker pull scrapinghub/splash
2. 运行镜像
前台运行
sudo docker run -p 8050:8050 scrapinghub/splash
后台运行
sudo docker run -d -p 8050:8050 scrapyinghub/splash
建议:初次运行建议前台运行,观察部署是否出现问题
3. Pycharm中连接Splash服务
(1)在python虚拟环境中安装scrapy-splash包(注意python解释器版本需要3.8以上)
pip install scrapy-splash
(2)在scrapy中使用splash
创建项目(在终端执行命令)
scrapy startproject scrapy_splash_demo
进入项目目录
cd scrapy_splash_demo
在settings文件中添加splash的配置信息
#渲染服务的url
SPLASH_URL = "http://0.0.0.0:8050"
#下载器中间件
DOWNLOADER_MIDDLEWARES = {
'scrapy_splash.SplashMiddleware': 723,
'scrapy_splash.SplashMiddleware': 725,
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
}
#去重过滤器
DUPEFILTER_CLASS = 'scrapy_splash.SpiderFilter'
#使用Splash的Http缓存
HTTPCACHE_STORAGE = 'scrapy_splash.SpiderCacheStorage'
ROBOTSTXT_OBEY = False
在spider中导入类并使用
import scrapy
from scrapy_splash import SplashRequest #使用scrapy_splash包提供的request对象
def start_requests(self):
yield SplashRequest(self.start_urls[0],
callback=self.parse_splash,
args={'wait': 10}, #最大超时时间,单位:秒
endpoint='render.html') #使用slpash服务的固定参数
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)