抓取动态网页(scrapy实战:scrapy-splash抓取动态数据(-))
优采云 发布时间: 2021-11-09 07:17抓取动态网页(scrapy实战:scrapy-splash抓取动态数据(-))
Scrapy 实战:scrapy-splash 抓取动态数据
我们知道为了加快页面的加载速度,页面的很多部分都是用JS生成的,这对于scrapy爬虫来说是个大问题,因为scrapy没有JS引擎,所以所有的爬取都是对于静态页面,无法直接使用scrapy的Request请求获取JS生成的动态页面。解决方案是使用scrapy-splash。
Scrapy-splash 基于 Splash 加载 js 数据,Splash 是一种 Javascript 渲染服务。它是一个实现 HTTP API 的轻量级浏览器。 Splash 是用 Python 实现的,同时使用 Twisted 和 QT。我们最终使用scrapy-splash得到的响应,相当于所有浏览器渲染完成后得到的响应。渲染后的网页源代码。
Docker 安装
由于我这里使用的是MAC,所以跳过了具体的安装过程,请看这里
拉动scrapinghub/splash mirror
docker pull scrapinghub/splash
开始飞溅
docker run -p 8050:8050 scrapinghub/splash
启动结果如下:
访问:8050/
安装scrapy-splash
cd /data/code/python/venv/venv_Scrapy/tutorial/
../bin/pip3 install scrapy-splash
新淘宝蜘蛛项目
../bin/python3 ../bin/scrapy genspider -t basic taobao_splash www.taobao.com
settings.py
修改 settings.py 以配置启动服务
# 渲染服务的url
SPLASH_URL = 'http://localhost:8050'
# 去重过滤器
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'
#爬虫中间健
# Enable or disable spider middlewares
# See https://doc.scrapy.org/en/latest/topics/spider-middleware.html
SPIDER_MIDDLEWARES = {
'tutorial.middlewares.TutorialSpiderMiddleware': 543,
'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
}
#下载器中间件
# Enable or disable downloader middlewares
# See https://doc.scrapy.org/en/latest/topics/downloader-middleware.html
DOWNLOADER_MIDDLEWARES = {
'tutorial.middlewares.TutorialDownloaderMiddleware': 543,
'scrapy_splash.SplashCookiesMiddleware': 723,
'scrapy_splash.SplashMiddleware': 725,
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
}
# 使用Splash的Http缓存
HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'
运行测试
../bin/python3 ../bin/scrapy crawl taobao_splash
GitHub 源代码