{"library":"scrapling","title":"Scrapling","description":"Scrapling is an adaptive, high-performance Python library designed for robust web scraping. It emphasizes undetectability and efficiency, automatically bypassing common anti-bot systems like Cloudflare and adapting to minor website structure changes. It offers various fetcher types for HTTP, headless browser, and stealthy browser interactions, alongside a Scrapy-like asynchronous spider framework for large-scale, concurrent crawling. The library is actively maintained with frequent updates, focusing on stealth, performance, and developer experience.","language":"python","status":"active","last_verified":"Sun May 17","install":{"commands":["pip install \"scrapling[fetchers]\""],"cli":null},"imports":["from scrapling.fetchers import Fetcher","from scrapling.fetchers import StealthyFetcher","from scrapling.spiders import Spider","from scrapling.spiders import Response","from scrapling.fetchers import FetcherSession"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"from scrapling.fetchers import Fetcher\nfrom scrapling.spiders import Spider, Response\nimport asyncio\n\n# --- Basic HTTP Fetching ---\nprint(\"\\n--- Basic HTTP Fetching ---\")\npage = Fetcher.get('https://quotes.toscrape.com/')\nquotes = page.css('.quote .text::text').getall()\nauthors = page.css('.quote .author::text').getall()\nprint(f\"First quote: {quotes[0]}\\nAuthor: {authors[0]}\")\n\n# --- Basic Spider Framework ---\nprint(\"\\n--- Basic Spider Framework ---\")\nclass QuotesSpider(Spider):\n    name = \"quotes_spider\"\n    start_urls = [\"https://quotes.toscrape.com\"]\n\n    async def parse(self, response: Response):\n        for quote in response.css(\"div.quote\"):\n            yield {\n                \"text\": quote.css(\"span.text::text\").get(\"\"),\n                \"author\": quote.css(\"small.author::text\").get(\"\"),\n            }\n\nasync def run_spider():\n    # Note: For production, consider using `MySpider().start()` which handles event loops.\n    # For direct asyncio integration as below, ensure no other event loop is running.\n    result = await QuotesSpider().start_async()\n    print(f\"Scraped {len(result.items)} items with the spider.\")\n    if result.items:\n        print(f\"First item from spider: {result.items[0]}\")\n\nif __name__ == \"__main__\":\n    # Run the basic HTTP fetch synchronously\n    # The spider requires an async context if run outside `Spider().start()`\n    # For this example, we wrap it in asyncio.run\n    asyncio.run(run_spider())\n","lang":"python","description":"This quickstart demonstrates basic HTTP fetching with `Fetcher` to extract data using CSS selectors. It also includes a minimal example of Scrapling's `Spider` framework for structured, asynchronous crawling, similar to Scrapy.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":{"tag":null,"tag_description":null,"last_tested":"2026-05-17","installed_version":"0.2.99","pypi_latest":"0.4.8","is_stale":true,"summary":{"python_range":"3.10–3.9","success_rate":100,"avg_install_s":9.5,"avg_import_s":1.04,"wheel_type":"wheel"},"results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"fetchers","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"34.9M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"fetchers","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":8.6,"import_time_s":0.46,"mem_mb":28.9,"disk_size":"356M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"fetchers","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"37.0M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"fetchers","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":8.1,"import_time_s":0.79,"mem_mb":30.4,"disk_size":"361M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"fetchers","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"28.9M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"fetchers","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":7.4,"import_time_s":0.95,"mem_mb":30.3,"disk_size":"353M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"fetchers","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"28.6M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"fetchers","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":7.3,"import_time_s":0.94,"mem_mb":31,"disk_size":"352M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"fetchers","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"broken","install_time_s":null,"import_time_s":null,"mem_mb":null,"disk_size":"33.9M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"fetchers","exit_code":0,"wheel_type":"wheel","failure_reason":null,"import_side_effects":"clean","install_time_s":16.2,"import_time_s":2.08,"mem_mb":201.6,"disk_size":"430M"}]}}