scrapy爬取前端渲染页面
2020-04-14 本文已影响0人
LiviSun
最近用scrapy写的爬虫爬一个页面的时候,页面结构明明是有内容的,但是xpath定位却是空的,我意识到这是一个Vue写的页面,数据是动态渲染的,于是在网上找到一个插件splash。
- 安装splash
- 通过docker 安装一下splash,我直接在nas上的docker里安装的,大家有服务器的可以跑在服务器的docker里,或者win7下跑一会儿也行,嘻嘻(docker安装教程,这里不讲了)
- 执行运行指令(nas上配置好端口,运行就完了)
$ docker run -p 8050:8050 -p 8051:8051 scrapinghub/splash
-
运行好之后,打开127.0.0.1:8050,我是在nas上,打开本地端口:nas地址:32768
123.png
出现下图,表示splash启动成功
322.png
- 在scrapy项目中配置
- 安装scrapy-splash
pip install scrapy-splash
- 在settings.py中添加配置项
#你刚刚开启的splash服务的地址
SPLASH_URL = 'http://192.168.11.18:32768'
# 开启Splash的两个下载中间件并调整HttpCompressionMiddleware的次序
DOWNLOADER_MIDDLEWARES = {
'scrapy_splash.SplashCookiesMiddleware': 723,
'scrapy_splash.SplashMiddleware': 725,
'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
}
# 设置去重过滤器
DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'
-
在Spider中引入SplashRequest
222.png -
然后我们用SplashRequest 替换scrapy.Request发起请求就好了
// scrapy.Request(url= Url, callback = self.parseXXX)
SplashRequest(url= Url, args={'wait': 1},callback = self.parseXXX)
args参数中 wait表示延时,其他参数请自行查阅
ok,现在我们就可以愉快的抓取动态渲染的页面了,溜了。