← Back to work

02 · Completed

Polite
Scraper.

A production-minded Node.js web scraper for collecting structured book data from Books to Scrape.

Node.jsCheerioAxiosSchema validationGitHub Actions
View GitHub Repository ↗

CATALOGUE

→

PARSE

title()
price()
availability()
→

OUTPUT

{
 books: [
  ...
 ]
}
HTML → DATA → JSON

The problem

Turn catalogue pages into useful data.

I wanted a way to collect book information from Books to Scrape and bring the results together as structured data instead of working with individual pages separately.

01

The solution

A Node.js scraper that visits catalogue pages, extracts book information, processes and normalizes the data, validates records, and produces a JSON file.

02

My role

I built the scraper and worked through the implementation and troubleshooting required to get the different parts working together.

03

Responsible scraping

The project includes request throttling and robots.txt handling as part of the approach to responsible web scraping.

04

Automation

Automated testing and GitHub Actions CI help make the scraper easier to check and run consistently.

How it works

From catalogue to structured output.

01

Resolve catalogue URL

02

Fetch HTML

03

Parse book data

04

Normalize records

05

Validate schema

06

Save JSON

01

Parsing

HTML is parsed so the scraper can extract the book information it needs.

02

Normalization

The extracted values are processed into a consistent structure.

03

Validation

Records are checked against a schema before the final JSON is produced.

What I learned

Troubleshooting is part of the build.

The hardest part for me was troubleshooting. I learned how to work through issues until the pieces of the scraper worked reliably together, while gaining practical experience with responsible web scraping, data processing, validation, testing, and automation.