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


我们知道,为了加速页面的加载速度,页面的很多部分都是用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

启动结果如下:
启动

访问 http://localhost:8050/

localhost:8050

安装 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

splash spider

GitHub源码

猜你喜欢

转载自blog.csdn.net/weixin_43430036/article/details/84841091