Network Panel, The Scraper's Most Important Tool
Where the data actually lives. Use Network to find the JSON endpoint the page is hitting and skip HTML scraping entirely.
What you’ll learn
- Open the Network panel, filter, and identify the requests that fetch the data you want.
- Distinguish Document, XHR/Fetch, Image, JS, CSS, and Other traffic.
- Read the request and response details of a single call: URL, method, headers, body, status, response body.
- Reproduce the call outside the browser, the first step of every API-scraping lesson in Sub-Path 3.
If Elements is your reconnaissance kit, Network is the gold-mine. Most modern pages don't render data into HTML server-side, they ship a near-empty HTML shell, then fetch data via XHR / Fetch / WebSocket from JSON endpoints. Find those endpoints and you skip HTML parsing entirely. This is the foundational skill of Sub-Path 3.
Layout
- Top bar: Recording toggle (red dot), clear, search across all requests, preserve log toggle, disable cache toggle.
- Filter row: All / Doc / XHR / Fetch / JS / CSS / Img / Media / WS / Other / 3rd-party.
- Request list: name, status, type, initiator, size, time, waterfall.
- Detail pane: Headers / Preview / Response / Initiator / Timing for the selected request.
The five filter buttons that matter
| Filter | What it shows | When you use it |
|---|---|---|
| Doc | Top-level HTML responses (page loads + redirects) | When mapping initial response |
| Fetch/XHR | Background data fetches (modern JS) | This is where 90% of your scraping wins live |
| JS | Script files | When reverse-engineering minified code (Sub-Path 3) |
| Img | Images | When checking image URLs / lazy-loading patterns |
| WS | WebSocket frames | When the data streams in real-time |
You'll spend most of your Network time on Fetch/XHR. That's where the JSON endpoints live.
The workflow: "find the data endpoint"
A canonical recipe, works for almost any modern site:
- Open DevTools → Network → Fetch/XHR filter.
- Reload the page (
Cmd/Ctrl + R). - Sort by Size descending. The big JSON responses are usually what you want.
- Click a likely-looking response. Look at Preview, if it's the data you want, you've found the endpoint.
- Right-click → Copy → Copy as cURL (covered in lesson F12).
In ten seconds you have a curl command that fetches the exact data, in JSON form. No HTML parsing. No browser automation. Just a clean API call.
The detail tabs
Click any request:
- Headers, request + response headers, status code, URL. The request URL (with query params expanded) is what you'll reproduce.
- Preview, rendered view. JSON gets a collapsible tree; HTML gets a thumbnail; images preview.
- Response, raw response body. Useful for grep-style debugging.
- Initiator, who triggered this request (which JS file, which line). Click through to Sources to see the code that made the call.
- Timing, TTFB, download time, DNS, TCP, SSL. Useful when comparing your scraper to the browser.
Filtering and searching
The search box (top of Network) searches across request bodies, response bodies, headers, URLs, all of it. Type a string you saw on the rendered page (a product name, an exact price) and DevTools tells you exactly which request returned that data.
This is the single most useful trick: search for a literal value from the page, and Network points you at the source.
Other filters in the Filter input:
domain:api.example.commethod:POSTstatus-code:200larger-than:10khas-response-header:x-rate-limit
Combine them. method:POST status-code:200 domain:api.example.com is a one-line filter for "successful POST calls to the API."
The waterfall, what's slow, what's slowest
The right column shows a Gantt chart of when each request happens relative to page load. Useful for two things in scraping:
-
Ordering. What runs first? The initial HTML doc, then often the auth/config calls, then the data calls. The data calls usually depend on a token from the earlier calls, replicate the order in your scraper.
-
Identifying lazy-loaded calls. Calls that fire only on scroll, or only on a click, will appear later in the waterfall. Catalog108's
/challenges/dynamic/infinite-scroll/*pages are perfect for spotting this, scroll, watch new requests appear.
"Preserve log" and "Disable cache"
Two toggles you should turn on every time:
- Preserve log, keeps requests across navigations. Without it, requests are cleared on every page load and you lose context.
- Disable cache (only while DevTools is open), forces fresh requests. Your browser cache can hide network calls; turning this off ensures you see everything your scraper would have to make.
Block, throttle, replay
Lesser-known but invaluable:
- Right-click → Block request URL. Simulates that endpoint being unreachable. Useful for understanding which calls the page actually needs vs. nice-to-have.
- Throttling (top bar, "No throttling" dropdown). Simulate slow 3G or offline. Useful when debugging lazy-load behaviour and timing-dependent JS.
- Right-click → Replay XHR. Re-runs the request with the same parameters. Useful for testing whether a response is deterministic or session-dependent.
A real example
You want to scrape product reviews from practice.scrapingcentral.com/products/1-yellow-ceramic-mug. In Network:
- Reload with Fetch/XHR filter.
- Spot a call to
/api/products/1/reviews?page=1returning JSON. - Preview shows
{ "reviews": [...], "next_cursor": "..." }. - You now know: the page loads HTML, then fetches reviews via JSON. You can skip the HTML and hit
/api/products/1/reviews?page=Ndirectly withrequests. Add?page=2,?page=3for pagination.
Five minutes of Network work; saves an hour of HTML parsing.
Hands-on lab
On practice.scrapingcentral.com/products/1-yellow-ceramic-mug (any product detail), find the XHR call that loads reviews. Note the URL, method, status, and what the response looks like. Then click "Copy as cURL" and paste it into your terminal, you should get the same JSON. Congratulations: you just bypassed HTML parsing for the reviews scrape.
Hands-on lab
Practice this lesson on Catalog108, our first-party scraping sandbox.
Open lab target →/products/1-yellow-ceramic-mugQuiz, check your understanding
Pass mark is 70%. Pick the best answer; you’ll see the explanation right after.