Scrapy: Web Scraping Framework for Python
Scrapy is a Python framework for crawling websites and pulling structured data out of them, maintained by Zyte (formerly Scrapinghub) with outside contributors. It ships on PyPI and conda-forge and carries a permissive BSD-3-Clause license, signs of a project built to be depended on, not a weekend script. Reach for it when building a scraper meant to last; skip it if you only need one page and a plain HTTP request would do.
What Scrapy is for web data extraction
Scrapy is a web crawling and scraping framework for Python, published on PyPI and conda-forge under a BSD-3-Clause license. Per its GitHub description, it's built to pull structured data out of websites instead of leaving you to hand-roll a parser for every site, and it's cross-platform, requiring Python 3.10 or newer. Zyte (formerly Scrapinghub) maintains it along with a wider group of outside contributors.
Core capabilities of Scrapy
- โShips as an installable PyPI package (`pip install scrapy`) and also as a conda-forge package, so it drops into whichever Python environment a team already manages.
- โRuns on Python 3.10 or newer, per the version badge in the repository.
- โMaintained by Zyte (formerly Scrapinghub) plus a wider base of outside contributors credited on GitHub.
- โCarries a public GitHub Actions test suite and Codecov coverage reporting, so changes to the framework get checked before they ship.
- โLicensed BSD-3-Clause, a permissive license with no copyleft obligation for projects that depend on it.
- โHas a DeepWiki badge in the README linking to deepwiki.com/scrapy/scrapy.
- โTagged on GitHub under crawler, crawling, scraping, web-scraping, and framework topics, and participates in Hacktoberfest.
Getting started with Scrapy
Installation is one command: `pip install scrapy` pulls the package from PyPI, and a conda-forge build is available too, per the badge in the README. Past that single step, the README doesn't walk through project setup or a first run inline; it hands off to the documentation site at docs.scrapy.org for everything else. If you want to contribute code rather than just use the package, the README points to a separate contributing guide instead of describing the process itself.
Basic Scrapy usage
Basic usage isn't documented in the README itself. It defers entirely to the external documentation site rather than showing a first spider, a CLI command, or a minimal working example inline. Anyone evaluating Scrapy from the GitHub page alone has to click through to that documentation before seeing any actual code, since no usage snippet ships in the repository's own README.
Strengths
- โBacked by an established maintainer (Zyte, formerly Scrapinghub) rather than a single hobbyist maintainer, per the README.
- โDistributed two ways, PyPI and conda-forge, so it fits into whichever Python packaging workflow a team already has.
- โRuns a public CI test suite and tracks code coverage via Codecov, both visible as badges on the repository.
- โBSD-3-Clause licensing keeps the legal overhead low for teams that want to depend on it commercially.
- โA DeepWiki page is linked directly from the README, alongside the standard docs link.
Potential Scrapy challenges
- โณThe README shows no usage example, spider skeleton, or CLI command inline; you have to leave GitHub and read the separate documentation site before writing a line of code.
- โณNo release date or changelog appears in the facts available from the repository page, so there is no way to gauge release recency beyond the live PyPI version badge.
- โณRequires Python 3.10 or newer, which rules it out for any codebase still pinned to an older Python release.
- โณThe README doesn't describe what happens right after installation: no quickstart, no sample project layout, no explanation of what a first script looks like.
- โณMaintenance is credited to one company (Zyte) plus outside contributors, but the README gives no numbers on review activity or how often releases ship.
Other web scraping options
Common questions about Scrapy
Scrapy requires Python 3.10 or newer, according to the version badge on its GitHub repository; it doesn't run on older Python releases.
Scrapy is free to use. It's released under the permissive BSD-3-Clause license, which places no cost or copyleft obligation on projects that depend on it.
Scrapy's BSD-3-Clause license permits commercial use, including modifying and redistributing the code, without requiring you to open-source your own project.
Scrapy is maintained by Zyte, formerly known as Scrapinghub, together with a wider group of outside contributors credited on GitHub.
Install Scrapy with `pip install scrapy` from PyPI; a conda-forge package is also available if you manage Python environments with conda.
The problem it solves
Scraping more than a handful of pages usually means writing the same boilerplate over and over: send a request, wait, parse the response, retry on failure, save the result somewhere useful. Scrapy exists to take that repeated work off your plate. The project describes itself as a framework for pulling structured data out of websites, not a single script you rewrite for every new source.
Best use cases
- โขBuilding a scraper you expect to maintain for months, not a script you'll throw away after one run, since the project's CI and coverage tooling exist to support ongoing changes.
- โขStandardizing how a team writes crawlers across multiple projects instead of every script reinventing request handling and retries from scratch.
- โขWorking inside a Python codebase already, since Scrapy is a Python-only framework requiring version 3.10 or newer.
- โขPulling structured data at a scale where hand-rolled scripts stop being maintainable, per the project's own framing as an extraction framework rather than a single-page parser.
Who should try it โ and who should skip
Try Scrapy if you're a Python developer building a scraper meant to stick around, and you'd rather adopt a maintained framework than assemble retries, parsing, and output handling yourself. Skip it if you need a browser that executes JavaScript to see a page's real content, since the README gives no indication of that capability, or if you just need one page's HTML and don't want to install a framework and read a second documentation site to get there.
Related repositories
Still deciding about scrapy?
One click hands the question to an AI along with this page โ see what it says about scrapy.
