scrapy爬取前端渲染页面

最近用scrapy写的爬虫爬一个页面的时候,页面结构明明是有内容的,但是xpath定位却是空的,我意识到这是一个Vue写的页面,数据是动态渲染的,于是在网上找到一个插件splash。

  1. 安装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
  1. 在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,现在我们就可以愉快的抓取动态渲染的页面了,溜了。

你可能感兴趣的:(scrapy爬取前端渲染页面)