抓取动态网页(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 源代码

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线