Stop scrolling job boards. Get a ranked, fit-scored shortlist of the listings that actually match your skills, in one command.
A command-line tool that scrapes job listings by role and location, filters and deduplicates them, scores each one against a skills profile you define, and exports the ranked list to CSV. Run it daily to get a fresh, personalized shortlist instead of manually re-scrolling the same job boards.
$ python jobradar.py --role "Python Developer" --location "Bangalore"
Searching for "Python Developer" in "Bangalore"...
📁 Full results exported to jobs_2023-11-14.csv
Every listing gets a fit score from 0–100% instead of being dumped in chronological order. It's a deterministic, weighted keyword match — no randomness, fully explainable:
config/skills_profile.json — keywords with weights, so you can tell JobRadar which skills matter most.sql won't falsely match inside mysqlite, and multi-word skills like rest api are matched as a phrase.Change config/skills_profile.json and every score, and the ranking, updates to reflect it — no code changes needed:
{
"profile_name": "Python Backend / Data Roles",
"skills": [
{ "keyword": "python", "weight": 3.0 },
{ "keyword": "django", "weight": 2.0 },
{ "keyword": "rest api", "weight": 2.0 },
{ "keyword": "docker", "weight": 1.5 },
{ "keyword": "kubernetes", "weight": 1.0 }
]
}Parses job-board result cards with BeautifulSoup. Checks the target host's robots.txt via urllib.robotparser before any live fetch, and sleeps --rate-limit seconds (default 2s) before every request.
The fit-score algorithm — weighted, regex-based, word-boundary keyword matching against your configurable skill profile.
Listings are loaded into a pandas DataFrame and deduplicated on normalized (company, role), keeping the highest-scoring copy of each.
The CLI entry point — wires the pipeline together with argparse and exports the final ranked set with DataFrame.to_csv(...).
Requires Python 3.8+. By default it parses a bundled local HTML fixture so the full scrape → score → dedup → export pipeline runs offline, deterministically, with no live network calls.
# install dependencies $ pip install -r requirements.txt # search + score + export $ python jobradar.py --role "Python Developer" --location "Bangalore"
| Flag | Default | Description |
|---|---|---|
| --role | required | Role to search for |
| --location | required | Location to search in |
| --skills-config | config/skills_profile.json | Skill profile used to compute fit scores |
| --top-n | 10 | Ranked rows to print to the console |
| --live | off | Fetch a real job board instead of the local fixture |
| --rate-limit | 2.0 | Seconds to sleep before each live request |