当前位置:   article > 正文

Scrapy爬虫中使用Splash抓取动态JS页面_scrapy爬取数据时,使用开发者工具来查看 javascript 动态生成的内容,

scrapy爬取数据时,使用开发者工具来查看 javascript 动态生成的内容,

目前,为了加速页面的加载速度,页面的很多部分都是用JS生成的,而对于用scrapy爬虫来说就是一个很大的问题,因为scrapy没有JS engine,所以爬取的都是静态页面,对于JS生成的动态页面都无法获得。

解决方案:

  • 利用第三方中间件来提供JS渲染服务: scrapy-splash 等。
  • 利用webkit或者基于webkit库

Splash简介:

Splash是一个Javascript渲染服务。它是一个实现了HTTP API的轻量级浏览器,Splash是用Python实现的,同时使用Twisted和QT。Twisted(QT)用来让服务具有异步处理能力,以发挥webkit的并发能力。


下面就来讲一下如何使用scrapy-splash:

  1. 利用pip安装scrapy-splash库:
    $ pip install scrapy-splash
  2. scrapy-splash使用的是Splash HTTP API, 所以需要一个splash instance,一般采用docker运行splash,所以需要安装docker
  3. 安装docker, 安装好后运行docker。
  4. 拉取镜像(pull the image):
    $ docker pull scrapinghub/splash
  5. 用docker运行scrapinghub/splash:
    $ docker run -p 8050:8050 scrapinghub/splash
  6. 配置splash服务(以下操作全部在settings.py):

    1)添加splash服务器地址:

    SPLASH_URL = 'http://localhost:8050'  

    2)将splash middleware添加到DOWNLOADER_MIDDLEWARE中:

    1. DOWNLOADER_MIDDLEWARES = {
    2. 'scrapy_splash.SplashCookiesMiddleware': 723,
    3. 'scrapy_splash.SplashMiddleware': 725,
    4. 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
    5. }

    3)Enable SplashDeduplicateArgsMiddleware:

    1. SPIDER_MIDDLEWARES = {
    2. 'scrapy_splash.SplashDeduplicateArgsMiddleware': 100,
    3. }

    4)Set a custom DUPEFILTER_CLASS:

    DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter'

    5)a custom cache storage backend:

    HTTPCACHE_STORAGE = 'scrapy_splash.SplashAwareFSCacheStorage'
  7. 例子
    获取HTML内容:

  1. import scrapy
  2. from scrapy_splash import SplashRequest
  3. class MySpider(scrapy.Spider):
  4. start_urls = ["http://example.com", "http://example.com/foo"]
  5. def start_requests(self):
  6. for url in self.start_urls:
  7. yield SplashRequest(url, self.parse, args={'wait': 0.5})
  8. def parse(self, response):
  9. # response.body is a result of render.html call; it
  10. # contains HTML processed by a browser.
  11. # ...


参考资料

Scrapinghub博客:http://blog.scrapinghub.com/

Splash官方文档:http://splash.readthedocs.org/en/latest/scripting-tutorial.html

Github中ScrapyJS项目:https://github.com/scrapinghub/scrapyjs

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/226636
推荐阅读
相关标签
  

闽ICP备14008679号