scrapy实战:scrapy-splash抓取动态数据

scrapy实战:scrapy-splash抓取动态数据

  • docker安装
  • 拉取scrapinghub/splash镜像
  • 启动Splash
  • 安装 scrapy-splash
  • 新建taobao spider项目
  • settings.py
  • 运行测试

我们知道,为了加速页面的加载速度,页面的很多部分都是用JS生成的,而对于用scrapy爬虫来说就是一个很大的问题,因为scrapy没有JS engine,所以爬取的都是静态页面,对于JS生成的动态页面直接使用scrapy的Request请求都无法获得,解决的方法就是使用scrapy-splash。

scrapy-splash加载js数据是基于Splash来实现的,Splash是一个Javascript渲染服务。它是一个实现了HTTP API的轻量级浏览器,Splash是用Python实现的,同时使用Twisted和QT,而我们使用scrapy-splash最终拿到的response相当于是在浏览器全部渲染完成以后,拿到的渲染之后的网页源代码。

docker安装

由于我这边使用的是MAC,具体安装过程略过,请参见这里

拉取scrapinghub/splash镜像

docker pull scrapinghub/splash

启动Splash

docker run -p 8050:8050 scrapinghub/splash

启动结果如下:
scrapy实战:scrapy-splash抓取动态数据_第1张图片

访问 http://localhost:8050/

scrapy实战:scrapy-splash抓取动态数据_第2张图片

安装 scrapy-splash

cd /data/code/python/venv/venv_Scrapy/tutorial/
../bin/pip3 install scrapy-splash

新建taobao spider项目

../bin/python3 ../bin/scrapy genspider -t basic taobao_splash www.taobao.com

settings.py

修改 settings.py 配置splash服务

# 渲染服务的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

scrapy实战:scrapy-splash抓取动态数据_第3张图片

GitHub源码

你可能感兴趣的:(scrapy,Scrapy爬虫实战)