# jobsparser
A simple CLI tool to scrape jobs from multiple job sites (LinkedIn, Indeed, Glassdoor) using [JobSpy](https://github.com/Bunsly/JobSpy).
Relevant article: [Automate Your Job Search: Scraping 400+ LinkedIn Jobs with Python](https://www.franciscomoretti.com/blog/automate-your-job-search)
## Installation
From PyPI (coming soon):
```bash
pip install jobsparser
```
From source:
```bash
git clone https://github.com/fran/jobsparser
cd jobsparser
pip install .
```
## Usage
Basic usage:
```bash
jobsparser --search-term "Python Developer" --location "London"
```
Use multiple job sites:
```bash
jobsparser --search-term "Frontend Engineer" --location "Remote" --site linkedin --site indeed
```
Advanced usage:
```bash
jobsparser \
--search-term "Data Scientist" \
--location "New York" \
--site linkedin \
--results-wanted 200 \
--distance 50 \
--job-type fulltime \
--output-dir "my_jobs" \
--hours-old 168 \
--linkedin-experience-level "internship" \
--linkedin-experience-level "entry_level"
```
See all options:
```bash
jobsparser --help
```
## Features
- Scrape jobs from LinkedIn, Indeed, and Glassdoor
- Customizable search parameters:
- Job type (fulltime, parttime, contract, internship)
- Search radius (distance)
- Number of results
- Location and country
- Automatic retries and rate limiting
- CSV output with unique filenames
- Progress tracking and status updates
## Options
- `--search-term`: Job search query (required)
- `--location`: Job location (required)
- `--site`: Job sites to search (default: linkedin)
- `--results-wanted`: Total number of results (default: 100)
- `--distance`: Search radius in miles/km (default: 25)
- `--job-type`: Type of job (default: fulltime)
- `--country`: Country code for Indeed search (default: UK)
- `--fetch-description`: Fetch full job description (default: true)
- `--batch-size`: Results per batch (default: 30)
- `--sleep-time`: Base sleep time between batches (default: 100)
- `--output-dir`: Directory for CSV files (default: data)
- `--hours-old`: Hours old for job search (default: None)
- `--linkedin-experience-level`: Experience levels for LinkedIn search (internship, entry_level, associate, mid_senior, director, executive)
## License
MIT License - see [LICENSE](LICENSE) for details.
Raw data
{
"_id": null,
"home_page": null,
"name": "jobsparser",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": "cli, glassdoor, indeed, jobs, linkedin, scraping",
"author": "FranciscoMoretti",
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/9a/3f/a643672d3774b2ada839d66fb679765b7f9d7a1b24d3bdd859530a8a69c9/jobsparser-0.1.6.tar.gz",
"platform": null,
"description": "# jobsparser\n\nA simple CLI tool to scrape jobs from multiple job sites (LinkedIn, Indeed, Glassdoor) using [JobSpy](https://github.com/Bunsly/JobSpy).\n\nRelevant article: [Automate Your Job Search: Scraping 400+ LinkedIn Jobs with Python](https://www.franciscomoretti.com/blog/automate-your-job-search)\n\n## Installation\n\nFrom PyPI (coming soon):\n```bash\npip install jobsparser\n```\n\nFrom source:\n```bash\ngit clone https://github.com/fran/jobsparser\ncd jobsparser\npip install .\n```\n\n## Usage\n\nBasic usage:\n```bash\njobsparser --search-term \"Python Developer\" --location \"London\"\n```\n\nUse multiple job sites:\n```bash\njobsparser --search-term \"Frontend Engineer\" --location \"Remote\" --site linkedin --site indeed\n```\n\nAdvanced usage:\n```bash\njobsparser \\\n --search-term \"Data Scientist\" \\\n --location \"New York\" \\\n --site linkedin \\\n --results-wanted 200 \\\n --distance 50 \\\n --job-type fulltime \\\n --output-dir \"my_jobs\" \\\n --hours-old 168 \\\n --linkedin-experience-level \"internship\" \\\n --linkedin-experience-level \"entry_level\"\n```\n\nSee all options:\n```bash\njobsparser --help\n```\n\n## Features\n\n- Scrape jobs from LinkedIn, Indeed, and Glassdoor\n- Customizable search parameters:\n - Job type (fulltime, parttime, contract, internship)\n - Search radius (distance)\n - Number of results\n - Location and country\n- Automatic retries and rate limiting\n- CSV output with unique filenames\n- Progress tracking and status updates\n\n## Options\n\n- `--search-term`: Job search query (required)\n- `--location`: Job location (required)\n- `--site`: Job sites to search (default: linkedin)\n- `--results-wanted`: Total number of results (default: 100)\n- `--distance`: Search radius in miles/km (default: 25)\n- `--job-type`: Type of job (default: fulltime)\n- `--country`: Country code for Indeed search (default: UK)\n- `--fetch-description`: Fetch full job description (default: true)\n- `--batch-size`: Results per batch (default: 30)\n- `--sleep-time`: Base sleep time between batches (default: 100)\n- `--output-dir`: Directory for CSV files (default: data)\n- `--hours-old`: Hours old for job search (default: None)\n- `--linkedin-experience-level`: Experience levels for LinkedIn search (internship, entry_level, associate, mid_senior, director, executive)\n\n## License\n\nMIT License - see [LICENSE](LICENSE) for details.\n",
"bugtrack_url": null,
"license": null,
"summary": "CLI tool to scrape jobs from multiple job sites",
"version": "0.1.6",
"project_urls": {
"Repository": "https://github.com/fran/jobsparser"
},
"split_keywords": [
"cli",
" glassdoor",
" indeed",
" jobs",
" linkedin",
" scraping"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "dda3251afbf20694bebdceefb42b7377d3d3dfef2db60b7ed8c9ec1522a33ee5",
"md5": "44ce0f34d6ab9f9941869cd88cfd3ef3",
"sha256": "6b01beba7d65e85e50d7770211535213cfc86e8b13d30cf2e57d30fc6bd4e181"
},
"downloads": -1,
"filename": "jobsparser-0.1.6-py3-none-any.whl",
"has_sig": false,
"md5_digest": "44ce0f34d6ab9f9941869cd88cfd3ef3",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 5199,
"upload_time": "2025-02-01T11:46:25",
"upload_time_iso_8601": "2025-02-01T11:46:25.197063Z",
"url": "https://files.pythonhosted.org/packages/dd/a3/251afbf20694bebdceefb42b7377d3d3dfef2db60b7ed8c9ec1522a33ee5/jobsparser-0.1.6-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "9a3fa643672d3774b2ada839d66fb679765b7f9d7a1b24d3bdd859530a8a69c9",
"md5": "d9302492218ffa9ee5e0498d38058ec9",
"sha256": "989d9ac2a877e03c7313425965b1090e33c21358a0cb0122d8d3e8edfa4cbc7a"
},
"downloads": -1,
"filename": "jobsparser-0.1.6.tar.gz",
"has_sig": false,
"md5_digest": "d9302492218ffa9ee5e0498d38058ec9",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 40122,
"upload_time": "2025-02-01T11:46:26",
"upload_time_iso_8601": "2025-02-01T11:46:26.984616Z",
"url": "https://files.pythonhosted.org/packages/9a/3f/a643672d3774b2ada839d66fb679765b7f9d7a1b24d3bdd859530a8a69c9/jobsparser-0.1.6.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-02-01 11:46:26",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "fran",
"github_project": "jobsparser",
"github_not_found": true,
"lcname": "jobsparser"
}