{"id":24563,"library":"scrapy-splash","title":"scrapy-splash","description":"scrapy-splash provides JavaScript support for Scrapy using Splash, a headless browser. Version 0.11.1 is the latest release. The library allows rendering JavaScript-heavy pages by delegating requests to a Splash instance. Releases are sporadic; the last major update (0.10.0) added support for Python 3.12/3.13 and Scrapy 2.12+, and deprecated old dupefilter/cache storage components.","status":"active","version":"0.11.1","language":"python","source_language":"en","source_url":"https://github.com/scrapy-plugins/scrapy-splash","tags":["scrapy","splash","javascript","headless-browser","web-scraping"],"install":[{"cmd":"pip install scrapy-splash","lang":"bash","label":"pip install scrapy-splash"}],"dependencies":[{"reason":"scrapy-splash is a Scrapy plugin; requires Scrapy >= 1.0","package":"Scrapy","optional":false},{"reason":"Splash HTTP API service must be running; not a Python dependency but required at runtime","package":"Splash","optional":false}],"imports":[{"note":"SplashRequest is exposed directly from the package, not from a submodule.","wrong":"from scrapy_splash.request import SplashRequest","symbol":"SplashRequest","correct":"from scrapy_splash import SplashRequest"},{"note":"Deprecated since 0.10.0 in favor of default Scrapy dupefilter; see warnings.","wrong":null,"symbol":"SplashAwareDupeFilter","correct":"from scrapy_splash import SplashAwareDupeFilter"},{"note":"Deprecated since 0.10.0; use default Scrapy cache storage.","wrong":null,"symbol":"SplashAwareFSCacheStorage","correct":"from scrapy_splash import SplashAwareFSCacheStorage"}],"quickstart":{"code":"import scrapy\nfrom scrapy_splash import SplashRequest\n\nclass MySpider(scrapy.Spider):\n    name = 'myspider'\n    start_urls = ['http://example.com']\n\n    def start_requests(self):\n        for url in self.start_urls:\n            yield SplashRequest(url, self.parse, args={'wait': 0.5})\n\n    def parse(self, response):\n        # response is a SplashJsonResponse\n        yield {'title': response.css('title::text').get()}","lang":"python","description":"Basic spider using SplashRequest to render JavaScript."},"warnings":[{"fix":"Remove DUPEFILTER_CLASS = 'scrapy_splash.SplashAwareDupeFilter' from settings. Instead, set SPLASH_REQUEST_FINGERPRINTER_CLASS = 'scrapy_splash.SplashRequestFingerprinter' and let Scrapy use its default dupefilter.","message":"In scrapy-splash 0.10.0, SplashAwareDupeFilter and SplashAwareFSCacheStorage are deprecated. You must remove them from your settings and use the default Scrapy components (DUPEFILTER_CLASS and FILES_STORE_S3_ACL etc.) instead. A new SplashRequestFingerprinter component is provided to maintain request fingerprinting for Splash requests.","severity":"breaking","affected_versions":">=0.10.0"},{"fix":"Set SPLASH_USER and SPLASH_PASS in settings.py and remove http_user/http_pass from spider attributes. Upgrade to >=0.8.0.","message":"HttpAuthMiddleware credentials leak: If you use http_user and http_pass spider attributes for Splash authentication, those credentials are sent to every non-Splash request (including robots.txt). Use SPLASH_USER and SPLASH_PASS settings instead.","severity":"gotcha","affected_versions":"<0.8.0"},{"fix":"Replace calls to response.body_as_unicode() with response.text.","message":"SplashJsonResponse.body_as_unicode() is deprecated since 0.9.0; use .text instead.","severity":"deprecated","affected_versions":">=0.9.0"}],"env_vars":null,"last_verified":"2026-05-01T00:00:00.000Z","next_check":"2026-07-30T00:00:00.000Z","problems":[{"fix":"Run 'pip install scrapy-splash' in the correct virtual environment.","cause":"scrapy-splash is not installed or installed in a different environment.","error":"ModuleNotFoundError: No module named 'scrapy_splash'"},{"fix":"Start Splash: 'sudo docker run -p 8050:8050 scrapinghub/splash'. Or set SPLASH_URL to the correct endpoint.","cause":"Splash service is not running or unreachable. Default host/port is localhost:8050.","error":"ConnectionError: Splash HTTP status 502: upstream connect error or disconnect/reset before headers. retried"},{"fix":"Add 'SPLASH_URL = \"http://localhost:8050\"' to your settings.py.","cause":"You haven't set the SPLASH_URL setting in Scrapy settings.","error":"KeyError: 'SPLASH_URL'"}],"ecosystem":"pypi","meta_description":null,"install_score":null,"install_tag":null,"quickstart_score":null,"quickstart_tag":null}