Skip to content

feat: add Himalayas.app scraper (NeraJob#5) - #1

Open
CloneBro wants to merge 64 commits into
masterfrom
feat/himalayas-scraper-implementation
Open

feat: add Himalayas.app scraper (NeraJob#5)#1
CloneBro wants to merge 64 commits into
masterfrom
feat/himalayas-scraper-implementation

Conversation

@CloneBro

Copy link
Copy Markdown
Owner

This PR adds a new scraper for Himalayas.app public jobs API.

Changes

  • Added HimalayasScraper in src/nerajob/scrapers/himalayas.py
  • Registered in src/nerajob/scrapers/registry.py
  • Added tests in tests/test_himalayas.py

Features

  • Live API integration with https://himalayas.app/jobs/api
  • Offline fallback when NERAJOB_HIMALAYAS_OFFLINE=1 or network fails
  • Supports query, location filtering, and pagination
  • Returns structured JobPosting objects with salary, employment type, etc.

Fixes mergeos-bounties#5

CloneBro and others added 30 commits July 14, 2026 23:31
…es#49)

- Add parse_salary_value() to extract numeric salary from strings (80k, $80,000, etc.)
- Add --min-salary CLI flag to scan command
- Jobs with unparseable salaries are kept (not filtered out)
- 5 tests added

Closes mergeos-bounties#36

Co-authored-by: CloneBro <rundm.wiechmann@gmail.com>
- Extend SKILL_ALIASES for hardware terms
- Patch bump
- Extend SKILL_ALIASES for logistics terms
- Patch bump
- Extend SKILL_ALIASES for finance terms
- Patch bump
- Extend SKILL_ALIASES for cybersecurity
- Patch bump
- Extend SKILL_ALIASES for data engineering
- Patch bump
- Extend SKILL_ALIASES for UX/product design
- Patch bump
- Extend SKILL_ALIASES for devops/SRE
- Patch bump
- Extend SKILL_ALIASES for mobile development
- Patch bump
- Extend SKILL_ALIASES for machine learning
- Patch bump
- Extend SKILL_ALIASES for cloud engineering
- Patch bump
- Extend SKILL_ALIASES with blockchain/web3 domain
- Bump patch version
- Extend SKILL_ALIASES for game development
- Bump patch version
- Extend SKILL_ALIASES for QA/test automation
- Bump patch version
- Extend SKILL_ALIASES for CS/support
- Bump patch version
- Extend SKILL_ALIASES for solutions/sales eng
- Bump patch version
…nties#73)

* feat: implement [200 MRG] Feature: multi-CV profiles with selector (mergeos-bounties#42)

* docs: add contributor guide for adding new skill domains to push PR for NeraJob#62 )

---------

Co-authored-by: CloneBro <rundm.wiechmann@gmail.com>
Co-authored-by: Paperclip <noreply@paperclip.ing>
TUPM96 and others added 30 commits July 17, 2026 20:18
- Add comprehensive skill aliases for ML/MLOps domain
- Include core ML, MLOps, data, tool, and workflow skills
- Provide usage examples for resumes and job requirements

Fixes mergeos-bounties#56

Co-authored-by: Gustavo Morais <gustavo@MacBook-Air-de-Gustavo-7.local>
* docs: add ML/MLOps skill aliases

- Add comprehensive skill aliases for ML/MLOps domain
- Include core ML, MLOps, data, tool, and workflow skills
- Provide usage examples for resumes and job requirements

Fixes mergeos-bounties#56

* docs: add data engineering skill aliases

- Add comprehensive skill aliases for data engineering domain
- Include core DE, pipeline, storage, cloud, and streaming skills
- Provide usage examples for resumes and job requirements

Fixes mergeos-bounties#51

---------

Co-authored-by: Gustavo Morais <gustavo@MacBook-Air-de-Gustavo-7.local>
- Implements BaseScraper interface for GitHub Jobs API
- Supports search by query and location
- Offline mode with 5 sample jobs for testing
- Proper error handling with fallback to offline
- 100% test coverage with 6 test functions

Closes mergeos-bounties#38

Co-authored-by: Gustavo Morais <gustavo@MacBook-Air-de-Gustavo-7.local>
- Added comprehensive test suite for cybersecurity domain skill aliases
- Tests cover SIEM, pentest, IAM, infosec, and SOC alias expansion
- All tests pass locally

Closes mergeos-bounties#50

Co-authored-by: Gustavo Morais <gustavo@MacBook-Air-de-Gustavo-7.local>
…tion [bounty mergeos-bounties#61] (mergeos-bounties#88)

Co-authored-by: smslc <smslc@users.devnorepdely.local>
…-bounties#18] (mergeos-bounties#91)

* feat: add fixture packs, ethical scraping docs, offline match CLI [bounties mergeos-bounties#52 mergeos-bounties#53 mergeos-bounties#54]

* fix: remove unused imports (ruff lint) [bounties mergeos-bounties#52 mergeos-bounties#53 mergeos-bounties#54]

* fix: add source to fixture JSONs, create __main__.py for python -m support [bounties mergeos-bounties#52 mergeos-bounties#53 mergeos-bounties#54]

* feat: shared HTTP client with retry/rate-limit/robots [bounty mergeos-bounties#18]

---------

Co-authored-by: smslc <smslc@users.devnorepdely.local>
mergeos-bounties#52 mergeos-bounties#53 mergeos-bounties#54] (mergeos-bounties#89)

* feat: add fixture packs, ethical scraping docs, offline match CLI [bounties mergeos-bounties#52 mergeos-bounties#53 mergeos-bounties#54]

* fix: remove unused imports (ruff lint) [bounties mergeos-bounties#52 mergeos-bounties#53 mergeos-bounties#54]

* fix: add source to fixture JSONs, create __main__.py for python -m support [bounties mergeos-bounties#52 mergeos-bounties#53 mergeos-bounties#54]

---------

Co-authored-by: smslc <smslc@users.devnorepdely.local>
…nties#41 mergeos-bounties#19] (mergeos-bounties#90)

* feat: scan preset profile CLI + scan --all dedupe count [bounties mergeos-bounties#41 mergeos-bounties#19]

* fix: remove unused ScanPreset import (ruff lint)

---------

Co-authored-by: smslc <smslc@users.devnorepdely.local>
…os-bounties#99)

Implements FindworkScraper in src/nerajob/scrapers/findwork.py.
Live API at https://findwork.dev/api/jobs/ with Token auth.
Offline fallback when NERAJOB_FINDWORK_API_TOKEN not set or API fails.

Tests: 19 new in tests/test_findwork.py covering registration, offline
mode, live API (mocked httpx), error fallback, edge cases.
Full suite: 112 passed (93 baseline + 19 new).

Co-authored-by: Bounty Hunter Bot <bounty-hunter-bot@users.noreply.github.com>
…ergeos-bounties#97)

Fixes mergeos-bounties#53

Expanded from 71 lines to comprehensive 300+ line policy covering:
- 12 ethical principles
- 15-source Preferred Official APIs table
- Source Selection Priority (Tier A-E)
- 11 sources with ToS + robots.txt notes (incl. Himalayas + USAJOBS)
- Sources NOT to scrape (LinkedIn, Indeed, Glassdoor, etc.)
- Rate limit config (6 env vars + scraper-specific tokens)
- Exponential backoff strategy with code example
- User-Agent standard
- 10-step new scraper checklist
- 13-item compliance checklist

Added README link in Compliance section.

Co-authored-by: Bounty Hunter Bot <bounty-hunter-bot@users.noreply.github.com>
…geos-bounties#77)

* feat(aliases): expand cloud, devops, mobile, and finance domains. Fixes mergeos-bounties#57, Fixes mergeos-bounties#58, Fixes mergeos-bounties#59

* fix(aliases): add terraform->cloud and risk->finance mappings to satisfy CI alias tests

---------

Co-authored-by: Jamie DC Phillips <jamiedcphillips@users.noreply.github.com>
- Add growth_marketing domain keywords for match scoring
- Patch version bump
…ergeos-bounties#95)

* feat: add fixture packs, ethical scraping docs, offline match CLI [bounties mergeos-bounties#52 mergeos-bounties#53 mergeos-bounties#54]

* fix: remove unused imports (ruff lint) [bounties mergeos-bounties#52 mergeos-bounties#53 mergeos-bounties#54]

* fix: add source to fixture JSONs, create __main__.py for python -m support [bounties mergeos-bounties#52 mergeos-bounties#53 mergeos-bounties#54]

* feat: jobs list --sort match [bounty mergeos-bounties#20]

* feat: PDF CV export [bounty mergeos-bounties#21]

* feat: Jooble API scraper [bounty mergeos-bounties#15]

* feat: application tracker status states [bounty mergeos-bounties#40]

* fix: remove unused imports (ruff lint)

* fix: restore Path import in cli.py

* fix: restore missing imports after rebase

* fix: add save_scan_preset to cli.py imports

* chore: trigger CI re-run

---------

Co-authored-by: smslc <smslc@users.devnorepdely.local>
…ergeos-bounties#94)

* feat: add fixture packs, ethical scraping docs, offline match CLI [bounties mergeos-bounties#52 mergeos-bounties#53 mergeos-bounties#54]

* fix: remove unused imports (ruff lint) [bounties mergeos-bounties#52 mergeos-bounties#53 mergeos-bounties#54]

* fix: add source to fixture JSONs, create __main__.py for python -m support [bounties mergeos-bounties#52 mergeos-bounties#53 mergeos-bounties#54]

* feat: jobs list --sort match [bounty mergeos-bounties#20]

* feat: PDF CV export [bounty mergeos-bounties#21]

* feat: Jooble API scraper [bounty mergeos-bounties#15]

* fix: remove unused imports (ruff lint)

* fix: restore Path import in cli.py

* fix: remove unused imports (ruff)

* chore: trigger CI re-run

---------

Co-authored-by: smslc <smslc@users.devnorepdely.local>
mergeos-bounties#93)

* feat: add fixture packs, ethical scraping docs, offline match CLI [bounties mergeos-bounties#52 mergeos-bounties#53 mergeos-bounties#54]

* fix: remove unused imports (ruff lint) [bounties mergeos-bounties#52 mergeos-bounties#53 mergeos-bounties#54]

* fix: add source to fixture JSONs, create __main__.py for python -m support [bounties mergeos-bounties#52 mergeos-bounties#53 mergeos-bounties#54]

* feat: jobs list --sort match [bounty mergeos-bounties#20]

* feat: PDF CV export [bounty mergeos-bounties#21]

* fix: remove unused imports (ruff lint)

* fix: restore Path import in cli.py

* fix: rebase + restore missing Path import

* chore: trigger CI re-run

---------

Co-authored-by: smslc <smslc@users.devnorepdely.local>
…unties#92)

* feat: add fixture packs, ethical scraping docs, offline match CLI [bounties mergeos-bounties#52 mergeos-bounties#53 mergeos-bounties#54]

* fix: remove unused imports (ruff lint) [bounties mergeos-bounties#52 mergeos-bounties#53 mergeos-bounties#54]

* fix: add source to fixture JSONs, create __main__.py for python -m support [bounties mergeos-bounties#52 mergeos-bounties#53 mergeos-bounties#54]

* feat: jobs list --sort match [bounty mergeos-bounties#20]

* fix: remove unused imports (ruff lint)

* fix: remove unused Path from test file, restore in cli.py

* fix: restore missing Path import after rebase

* chore: trigger CI re-run

---------

Co-authored-by: smslc <smslc@users.devnorepdely.local>
- Add customer_success domain keywords for match scoring
- Patch version bump
…ergeos-bounties#98)

* feat(aliases): expand cloud, devops, mobile, and finance domains. Fixes mergeos-bounties#57, Fixes mergeos-bounties#58, Fixes mergeos-bounties#59

* fix(aliases): add terraform->cloud and risk->finance mappings to satisfy CI alias tests

---------

Co-authored-by: Jamie DC Phillips <jamiedcphillips@users.noreply.github.com>
…ergeos-bounties#105)

Add Reed.co.uk API scraper with offline fallback and Greenhouse public board scraper

- reed.py: Reed Jobs API v1.0 integration (bounty mergeos-bounties#9 - 50 MRG)
- greenhouse.py: Greenhouse Job Board API integration (bounty mergeos-bounties#11 - 50 MRG)
…ties#7] (mergeos-bounties#102)

* Add src/nerajob/scrapers/adzuna.py for Adzuna scraper (mergeos-bounties#7)

* Add tests/test_adzuna.py for Adzuna scraper (mergeos-bounties#7)

* Add src/nerajob/scrapers/registry.py for Adzuna scraper (mergeos-bounties#7)
- Added HimalayasScraper implementing BaseScraper
- Integrated into scraper registry
- Added tests for registration and offline mode
- Supports live API with offline fallback
- Handles query, location filtering, and pagination

Fixes mergeos-bounties#5
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[25 MRG] Scraper: Himalayas.app public remote jobs API

10 participants