Pada tulisan sebelumnya di Rendering Javascript dengan Splash saya telah menulis pengantar dari Splash. Splash adalah salah satu javascript rendering service berbasis WebKit dan layanan ini bersifat headless.

Scrapy merupakan salah satu web scraper framework berbasis python yang cukup populer. Pada kondisi default, scrapy tidak mampu melakukan javascript rendering / dynamic webpage load, sehingga diperlukan pihak aplikasi tambahan seperti Selenium atau Splash.

Pada tulisan ini saya akan memaparkan cara integrasi Scrapy dengan Splash sebagai dynamic webpage rendering service. Berikut cara integrasinya.

Pemasangan Splash

Diasumsikan project dan encironment scrapy telah terbuat. Langkah pertama yang dilakukan yaitu memasang splash dengan perintah :

pip install scrapy-splash

Konfigurasi Splash

Setelah splash terpasang, selanjutnya lakukan konfigurasi pada scrapy.

  1. Di settings.py pada scrapy, tambahkan parameter baru :

    SPLASH_URL = ‘http://127.0.0.1:8050’

  2. Tambahkan DOWNLOAD_MIDDLEWARES , SPIDER_MIDDLEWARES, DUPEFILTER_CLASS pada settings.py,

     DOWNLOADER_MIDDLEWARES={
     'scrapy_splash.SplashCookiesMiddleware': 720,
     'scrapy_splash.SplashMiddleware': 725,
     'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810,
    

    } SPIDER_MIDDLEWARES={ ‘scrapy_splash.SplashDeduplicateArgsMiddleware’: 100, } DUPEFILTER_CLASS=‘scrapy_splash.SplashAwareDupeFilter’ HTTPCACHE_STORAGE = ‘scrapy_splash.SplashAwareFSCacheStorage’

  3. Selanjutnya, pada spider anda, ubah start_requests untuk menggunakan Splash.

    splash_args = { ‘html’:1, ‘images’:0, ‘png’:0, }

    def start_requests(self): for url in self.start_urls: yield SplashRequest( url=url, callback=self.parse_info, endpoint=‘render.json’, args=self.splash_args )

  4. Pemasangan dan integrasi selesai. Scrapy akan menggunakan Splash untuk webpage rendering, untuk selectornya masih sama, atau dapat menggunakan ‘BeautifulSoup 4’

References

Referensi