Vomy
A YouTube scraper CLI that collects channels, video metadata, comments and playlists without an API key.
- Language
- Python
- Collects
- 4 types
- channel · video · comments · playlists
- API key
- None
- License
- MIT
My role
Sole author
Domains
Tooling/Data collection/CLI
Context
Pulling a channel's back catalogue — video metadata, playlists, the comments under each one — is the starting point for any analysis of it. The official route is the YouTube Data API: a key, an OAuth flow, and a daily quota that a single large channel can exhaust before you have finished collecting it.
The problem
The obvious alternative is to fetch the public pages directly, and the obvious naive version of that stops working within a few hundred requests. You get rate-limited, then blocked, and the run dies halfway through with a partial dataset and no way to resume from anything meaningful.
What I built
Vomy is a CLI over a scraper core, with the two kept deliberately separate: `cli.py` parses and orchestrates, `scraper.py` does the fetching, `models.py` defines what a channel, video and comment actually are, and configuration lives in `config/settings.py` rather than in flags scattered through the code. The rate-limit problem is handled on two fronts — rotation across proxies, fetched from public lists automatically or supplied as your own file, and a configurable `--sleep-interval` so a run can be deliberately slowed to something polite. Requests are shaped to look like a browser rather than a script. An interactive mode lets you pick which of the four data types you actually want instead of collecting everything by default.
Outcome
One command against a channel URL produces a timestamped output directory of JSON — channel info, video metadata, comments and playlists — with no key, no OAuth and no quota. MIT-licensed and pure Python.
How it works
Detail- CLI and core kept apart
- The command layer never does the fetching. Splitting cli / scraper / models / utils / config means the scraper is importable as a library and the interface can change without touching the part that has to be careful.
- Rotation plus throttling
- Proxy rotation handles the block; `--sleep-interval` handles the courtesy. Public proxy lists are fetched automatically, and a custom list can be supplied instead when you have better ones.
- Collect only what you asked for
- Interactive mode selects among channel info, video metadata, comments and playlists. Comments are by far the most expensive to collect, so not gathering them by default is the difference between a minute and an hour.
- Runs you can tell apart
- Every run writes to its own timestamped directory, so re-scraping a channel a month later gives you two datasets to diff rather than one that silently overwrote the other.
Built with
Python/CLI/HTTP proxies/JSON