Why not just practise on a real site?
Because a real shop will rate-limit you, ban your IP, or quietly serve you different markup once it decides you are a bot — and none of that teaches you anything about scraping. You end up debugging someone's defences instead of your selector.
There is also the question of whether you should be pointing a half-finished script at a business's servers at all. Here, that question does not arise.
Four problems, one shop
Each page is a different thing that breaks scrapers. Expected results are listed so you can tell whether yours is right.
Paginated card grid
Products in <article> cards, not a table — nine per page,
six pages, a Next button at the bottom. Tests detection on repeated markup and
following pagination.
Expected: 54 rows across 6 pages.
A plain HTML table
A real <table> with a <thead>. The easy case,
and a good first target for anything you are writing from scratch.
Expected: 50 rows, 7 columns, one page.
Infinite scroll
Eight rows on load, then more appended each time you reach the bottom, five batches
before it stops. Tests whether your scraper scrolls, waits, and knows when to give
up.
Expected: 8 rows on load, 40 after scrolling to the end.
A value outside the table
A discount that applies to every row but is written once, above the table, and never
repeated inside it. No amount of automatic detection can infer that — it is what
manual selection is for.
Expected: 10 rows, plus one discount no row contains.
A three-level link chain
One hop proves nothing. This one goes three deep on purpose.
| Level | Page | Fields only found there |
|---|---|---|
| The list | Catalogue | Name, maker, price, rating, stock |
| → one | Product page | SKU, material, made in, weight, lead time, warranty |
| → two | Maker page | Founded, based in, workshop, typical lead time, minimum order |
| → three | Sourcing page | Primary material, sourced from, certification, recycled content, last audited |
Every product links to its maker through an identically-worded “About the maker →”, not through the maker's name. That is deliberate, and it is how real shops label such links: a chain you confirm on one row only works on the rest if the label is the same everywhere. If your scraper works on row one and fails on row two, that is usually why.
120 product pages, 8 makers, 8 sourcing pages. Enough that a full run takes long enough to be worth pacing.
Fair use
Take what you like. It is a static site with no database behind it and no bill attached to traffic. If you are load-testing something enormous, a moment's delay between requests is polite rather than necessary.
It was built to demonstrate the Magic Scraper extension, but it is not restricted to it and never will be. A practice site that only works with one tool is not a practice site.
Northwind Supply is invented. The products, makers, prices, SKUs and audit dates are all generated, and any resemblance to a real business is coincidental.