Best Websites to Practice Web Scraping (2026)
A web scraping test site list you can trust: 10 sandboxes and real data sources, each one live-checked October 16, 2026, with what it actually teaches.

On this page
Practicing on Amazon is how you get your IP flagged in an afternoon. A web scraping test site gives you the same markup pain (nested tables, pagination, logins, JavaScript) with an invitation to hit it as hard as you like. I fetched every site below on October 16, 2026 from a home connection, and each entry names what it teaches, what it ships with, and where it wastes your time.
The best websites for web scraping, at a glance
Ordered as a skill ladder, best-first for a beginner. Every status code came back 200 today unless the entry says otherwise.
| Site | Teaches | JavaScript? | Live check (2026-10-16) |
|---|---|---|---|
| quotes.toscrape.com | First scraper, pagination, login | No (JS variants optional) | 200, 11 KB, 10 quotes/page |
| books.toscrape.com | Catalog crawls at scale | No | 200, 51 KB, 1,000 books |
| scrapethissite.com | Tables, hidden URL params, AJAX | Mixed | 200, 582-row hockey table |
| webscraper.io/test-sites | E-commerce trees, infinite scroll | Static, AJAX, and scroll variants | 200 on all three variants |
| web-scraping.dev | Production rehearsal: auth, GraphQL | Mixed | 200, 19 scenarios |
| sandbox.oxylabs.io | Storefront, categories, search | No | 200, 99 words of clean text |
| scrapeme.live | WordPress + WooCommerce quirks | No | 200, 2.5 s (throttle it) |
| httpbin.org | The HTTP layer itself | n/a | 418 on purpose (teapot) |
| jsonplaceholder.typicode.com | JSON-first thinking | n/a (REST API) | 200 in 0.11 s |
| Wikipedia + Hacker News | Politeness on real sites | Mixed | 200 and 200 |
What makes a good web scraping test site
The good websites for web scraping share three traits. First, permission: a robots.txt that leaves practice paths open, or no terms problem at all, because the site was built to be scraped. Second, stability: the markup stays put for years, so a tutorial from 2019 still works. Third, an escalation path: static HTML first, then pagination, then logins, then JavaScript, then hidden APIs, in that order.
No single website for web scraping drills every skill, which is why this is a list and not a link. Dedicated data scraping sites exist so you can break things without a lawyer or a banned IP in the room. The rest of this page walks the ladder.
1. Quotes to Scrape (quotes.toscrape.com)
This is the first website to scrape data from without a guilt tax, and it is the default target for a reason. Zyte, the company behind the Scrapy framework, runs it, and the footer credits Zyte by name. Ten quotes per page, clean classes (.quote, .text, .author), server-rendered HTML that any HTTP client can read.
import requests
from bs4 import BeautifulSoup
for page in range(1, 6):
resp = requests.get(f"https://quotes.toscrape.com/page/{page}/",
headers={"User-Agent": "practice-bot/0.1"})
soup = BeautifulSoup(resp.text, "html.parser")
for q in soup.select(".quote"):
print(q.select_one(".text").get_text(), "|",
q.select_one(".author").get_text())
Run it and you get 50 real rows. The site also ships variants that each isolate one skill: /login for session handling (the form wants a CSRF token plus cookies), /scroll and /js for pages that need a browser, and /page/N/ path pagination for loop practice.
Two findings from today. The robots.txt URL returns 404: there is no robots file at all, so nothing is formally disallowed. And pagination lies at the edge: page 11 returns HTTP 200 with a 3 KB body and zero quotes. If your loop trusts status codes instead of counting extracted items, it will spin forever. Count rows, not responses.
2. Books to Scrape (books.toscrape.com)
A fake bookstore with 1,000 books at 20 per page, which is 50 pages of catalog to crawl politely. Prices and star ratings are randomly assigned, and every product page says so in its own warning text. You are practicing structure, not collecting real prices.
Today’s live detail: the homepage ships 51 KB of HTML but almost no prose, and my extractor’s thin-content quality gate rejected it outright. That is the lesson hiding in the sandbox. Catalog pages are link grids; the data lives on detail pages, which clean to a tidy 253 words each (one page: £51.77, “In stock (22 available)”, a product description). A books crawl is really two scrapers: one to harvest URLs, one to parse each product. That pattern (list page, then detail pages, throttled) is the backbone of most e-commerce work, and the pagination guide covers the loop mechanics.
3. Scrape This Site (scrapethissite.com)
A sandbox of lessons: an NHL hockey table with 582 team-season rows since 1990, country facts, movie releases, plus a session-handling form and an AJAX lesson. The hockey page cleaned to 573 words and a real table today.
Its best trick is educational: the pager advertises ?page=N in the URL, and the server silently ignores it. I probed ?page=3 three ways and got byte-identical page 1 every time. The real parameter is page_num, which you only learn by reading the Next button’s markup. Bonus discovery: per_page=1000&page_num=1 returns all 582 rows in a single 716 KB request instead of 24 paginated ones. Finding the parameter a site actually honors is a skill you will use on every real site, and the hidden-API guide turns it into a method.
The AJAX lesson page is the opposite drill: a static fetch shows nothing, because the data arrives over JavaScript after load. Robots-wise, the site disallows only /lessons/ and /faq/; the sandbox pages themselves are open.
4. Web Scraper’s test sites (webscraper.io/test-sites)
Built for the Web Scraper browser extension, but the markup works for any client. Three flavors of the same laptop-product catalog, all verified 200 today: /e-commerce/static (plain HTML), /e-commerce/ajax (click-to-load), and /e-commerce/scroll (infinite scroll). Same products, three difficulty levels, so you can feel exactly what JavaScript changes.
The con: pages are pure product grids with zero prose, so there is nothing here for text-extraction practice. It is a URL-and-price drill, and a good one.
5. web-scraping.dev
The closest thing to a dress rehearsal among the best websites to scrape data. It is a realistic e-commerce testing platform with 19 scenarios: login flows, pagination, GraphQL alongside REST, file downloads, even an MCP tool surface. Where quotes.toscrape isolates one skill, this one chains them, which is what a production site does to you. The con: it assumes you already know what an API is. Start on entries 1 through 4 if GraphQL is still a buzzword to you.
Go here when the sandboxes feel too easy and you want to rehearse a full flow (authenticate, paginate, pull structured data) before pointing anything at a real target.
6. Oxylabs sandbox (sandbox.oxylabs.io)
A fictional games store from the proxy vendor Oxylabs: storefront, category pages, product pages, and search, per the site’s own description. It cleaned to just 99 words today, so like the other shop sandboxes it is a link-and-price drill, not a reading exercise. No robots.txt (the URL 404s), so nothing is formally off-limits.
Use it for category-walk practice: get the category list, walk each one, respect a one-request-per-second pace. That job, breadth-first over a product tree, is half of what “scrape this shop” means in practice.
7. ScrapeMe (scrapeme.live)
A Pokémon shop running real WordPress with WooCommerce; the page title still reads “Just another WordPress site.” If your future targets include small-business sites, WordPress says over 43% of all sites run on its stack, and this is your practice rig for that population: product grids, variation dropdowns, and WooCommerce’s ?add-to-cart= query parameters.
Its robots.txt is a real WordPress one, and worth reading: it disallows /wp-admin/, a set of upload directories, and every add-to-cart parameter URL. Throttle harder here than on the purpose-built sandboxes: today the homepage took 2.5 seconds to respond, three times quotes.toscrape. Someone is paying to host it.
8. httpbin.org
Not a data source. It is the HTTP layer itself, as a toy. Request /status/418 and the server answers 418 I’m a teapot (verified today). /headers echoes what you actually sent, /redirect/2 bounces twice, /delay/5 stalls five seconds before answering.
This is where you rehearse the boring code that decides whether a scraper survives contact with reality: retry logic on 5xx, timeouts that actually fire, redirect chains that resolve to the right URL. Break it here, where nobody minds.
9. JSONPlaceholder (jsonplaceholder.typicode.com)
A fake REST API with six resources (posts, comments, albums, photos, todos, users) that answers /posts/1 with real JSON in 0.11 seconds. No key, no rate-limit drama.
The skill it teaches is the most underrated one on this page: before you parse a single div, check whether the data is available as JSON. Many sites load their content from an internal API that returns cleaner data than the HTML ever shows. A JSONPlaceholder session builds the reflex, and the hidden-API guide shows you how to find those endpoints on real sites with your browser’s network tab.
10. Real websites to scrape data from: Wikipedia and Hacker News
Sooner or later you need a real target, and these two are the polite entry points.
Wikipedia serves full article pages to any client (today the web scraping article came back 236 KB), and its robots.txt leaves article paths open while disallowing Special: pages. But the polite route is not HTML at all: the MediaWiki API hands you structured page text, and Wikipedia asks bulk consumers to use it.
Hacker News is the politeness drill. Its robots.txt sets Crawl-delay: 30 and disallows the action endpoints (/fave?, /flag?, /hide?, /login) while leaving item and front pages crawlable. Honor the 30-second delay and read the disallow list before you write a loop; that discipline is the entire skill. When you want the data instead of the practice, the official API needs no key. These sites teach what most tutorials skip: on real servers, the robots file and the rate are the contract.
The best sites to scrape data, in skill order
One drill per evening beats a weekend binge. The ladder:
- Night one: selectors. Fetch quotes.toscrape.com, print 10 title-author pairs, then loop
/page/2/through/page/5/counting rows, not status codes. - Night two: catalogs. Crawl books.toscrape.com’s 50 pages at one request per second, harvesting detail-page URLs, then parse five product pages.
- Night three: hidden parameters. Get scrapethissite’s hockey table with the parameter the pager does not advertise, then with
per_page=1000. - Night four: sessions. Log into quotes.toscrape.com’s
/loginwith a cookie jar. If you would rather see the page than write the loop, a local scraping browser handles the form for you. - Night five: JavaScript. Pull quotes from the
/scrollvariant and scrapethissite’s AJAX lesson with a headless browser; the dynamic-pages guide covers when static escalation is worth it. - Week two: rehearse. Run a full login-paginate-extract flow against web-scraping.dev, then point the same flow at HN with its 30-second crawl-delay.
When the ladder runs out, the project-ideas list has 25 real builds, each with a data source checked from a home machine.
How I tested. Every status code above came from
curl, and every content check from the Magpie CLI (v0.1.32, a local Go binary) run from a home connection on October 16, 2026. Magpie respects robots.txt and throttles per host. It is the scraper I keep on the bench, not a practice site, and it is free to download with 5 free runs in the desktop app before a $49/month licence.
Practice etiquette: the rules that keep it legal
Sandboxes invite you in; real sites set terms. The habits that keep you welcome everywhere: read robots.txt first and honor what it disallows, set a real User-Agent instead of a fake browser string, cap yourself near one request per second, and stop on a 429 rather than retrying through it. The robots.txt guide explains the file line by line, the bots guide shows how to run one that servers do not hate, and the best-practices list turns etiquette into a checklist you can run before every crawl.
One more boundary: practice targets are chosen for permission, not convenience. LinkedIn, Instagram, and Amazon all prohibit scraping in their terms and back it with engineering, so a practice session against them is not practice; it is a test of their defense team. The legality guide covers where the lines actually sit.
FAQ
What is the best sandbox for scraping practice? quotes.toscrape.com. Server-rendered HTML, 10 clean quotes per page, login and JavaScript variants when you are ready. You can extract your first 10 rows from it in ten lines of Python, and nothing you do at a reasonable pace will get you blocked.
Are scrapper sites like these legal to practice on? Yes. Sites built for scraping (the toscrape family, Scraping This Site, the shop sandboxes) exist precisely to give you a legal target, and their robots.txt files mostly leave practice paths open. Real third-party sites are a different question: terms of service can ban scraping even where the law stays quiet.
Can I practice on real websites like Amazon or Instagram? Not those. Their terms prohibit scraping and their defenses work; most accounts of “I got blocked on day one” start there. Practice on the sandboxes above, take data from APIs where offered, and treat real-site HTML as something you approach slowly and politely.
Do I need to know Python to use these sites? No. The sites respond to any HTTP client, so no-code browser tools, desktop scrapers, and spreadsheets-with-connectors all work against them. Python is just the cheapest way to see every moving part, which is why tutorials default to it.
Do these sandbox sites change or shut down? Slowly, if ever: quotes.toscrape.com has kept the same markup for years, which is the point. But every live check on this page happened on one day from one connection, so re-fetch before a long session. sites.toscrape.com lists the current toscrape inventory with item counts and JavaScript requirements.
Tonight’s assignment: fetch quotes.toscrape.com, print 10 quote-author pairs, then crawl to page 5 with a one-second delay and count rows instead of status codes. Everything else on this page is that job with one more difficulty dial.


