美文网首页
scrapy爬取前端渲染页面

scrapy爬取前端渲染页面

作者: LiviSun | 来源:发表于2020-04-14 14:44 被阅读0次

    最近用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爬取前端渲染页面

          本文链接:https://www.haomeiwen.com/subject/rhzzmhtx.html