python-jobspy-damarowen 1.2.0__tar.gz → 1.2.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. python_jobspy_damarowen-1.2.2/CHANGELOG.md +29 -0
  2. python_jobspy_damarowen-1.2.0/README.md → python_jobspy_damarowen-1.2.2/PKG-INFO +166 -0
  3. python_jobspy_damarowen-1.2.0/PKG-INFO → python_jobspy_damarowen-1.2.2/README.md +108 -28
  4. {python_jobspy_damarowen-1.2.0 → python_jobspy_damarowen-1.2.2}/jobspy/jobstreet/__init__.py +25 -1
  5. {python_jobspy_damarowen-1.2.0 → python_jobspy_damarowen-1.2.2}/pyproject.toml +2 -2
  6. {python_jobspy_damarowen-1.2.0 → python_jobspy_damarowen-1.2.2}/LICENSE +0 -0
  7. {python_jobspy_damarowen-1.2.0 → python_jobspy_damarowen-1.2.2}/jobspy/__init__.py +0 -0
  8. {python_jobspy_damarowen-1.2.0 → python_jobspy_damarowen-1.2.2}/jobspy/bayt/__init__.py +0 -0
  9. {python_jobspy_damarowen-1.2.0 → python_jobspy_damarowen-1.2.2}/jobspy/bdjobs/__init__.py +0 -0
  10. {python_jobspy_damarowen-1.2.0 → python_jobspy_damarowen-1.2.2}/jobspy/bdjobs/constant.py +0 -0
  11. {python_jobspy_damarowen-1.2.0 → python_jobspy_damarowen-1.2.2}/jobspy/bdjobs/util.py +0 -0
  12. {python_jobspy_damarowen-1.2.0 → python_jobspy_damarowen-1.2.2}/jobspy/exception.py +0 -0
  13. {python_jobspy_damarowen-1.2.0 → python_jobspy_damarowen-1.2.2}/jobspy/glassdoor/__init__.py +0 -0
  14. {python_jobspy_damarowen-1.2.0 → python_jobspy_damarowen-1.2.2}/jobspy/glassdoor/constant.py +0 -0
  15. {python_jobspy_damarowen-1.2.0 → python_jobspy_damarowen-1.2.2}/jobspy/glassdoor/util.py +0 -0
  16. {python_jobspy_damarowen-1.2.0 → python_jobspy_damarowen-1.2.2}/jobspy/google/__init__.py +0 -0
  17. {python_jobspy_damarowen-1.2.0 → python_jobspy_damarowen-1.2.2}/jobspy/google/constant.py +0 -0
  18. {python_jobspy_damarowen-1.2.0 → python_jobspy_damarowen-1.2.2}/jobspy/google/util.py +0 -0
  19. {python_jobspy_damarowen-1.2.0 → python_jobspy_damarowen-1.2.2}/jobspy/indeed/__init__.py +0 -0
  20. {python_jobspy_damarowen-1.2.0 → python_jobspy_damarowen-1.2.2}/jobspy/indeed/constant.py +0 -0
  21. {python_jobspy_damarowen-1.2.0 → python_jobspy_damarowen-1.2.2}/jobspy/indeed/util.py +0 -0
  22. {python_jobspy_damarowen-1.2.0 → python_jobspy_damarowen-1.2.2}/jobspy/jobstreet/constant.py +0 -0
  23. {python_jobspy_damarowen-1.2.0 → python_jobspy_damarowen-1.2.2}/jobspy/jobstreet/util.py +0 -0
  24. {python_jobspy_damarowen-1.2.0 → python_jobspy_damarowen-1.2.2}/jobspy/linkedin/__init__.py +0 -0
  25. {python_jobspy_damarowen-1.2.0 → python_jobspy_damarowen-1.2.2}/jobspy/linkedin/constant.py +0 -0
  26. {python_jobspy_damarowen-1.2.0 → python_jobspy_damarowen-1.2.2}/jobspy/linkedin/util.py +0 -0
  27. {python_jobspy_damarowen-1.2.0 → python_jobspy_damarowen-1.2.2}/jobspy/model.py +0 -0
  28. {python_jobspy_damarowen-1.2.0 → python_jobspy_damarowen-1.2.2}/jobspy/naukri/__init__.py +0 -0
  29. {python_jobspy_damarowen-1.2.0 → python_jobspy_damarowen-1.2.2}/jobspy/naukri/constant.py +0 -0
  30. {python_jobspy_damarowen-1.2.0 → python_jobspy_damarowen-1.2.2}/jobspy/naukri/util.py +0 -0
  31. {python_jobspy_damarowen-1.2.0 → python_jobspy_damarowen-1.2.2}/jobspy/util.py +0 -0
  32. {python_jobspy_damarowen-1.2.0 → python_jobspy_damarowen-1.2.2}/jobspy/ziprecruiter/__init__.py +0 -0
  33. {python_jobspy_damarowen-1.2.0 → python_jobspy_damarowen-1.2.2}/jobspy/ziprecruiter/constant.py +0 -0
  34. {python_jobspy_damarowen-1.2.0 → python_jobspy_damarowen-1.2.2}/jobspy/ziprecruiter/util.py +0 -0
@@ -0,0 +1,29 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [1.2.2] - 2026-07-19
9
+
10
+ ### Added
11
+ - `CHANGELOG.md` to track changes between releases and display them on PyPI.
12
+
13
+ ### Changed
14
+ - `pyproject.toml` now reads release notes from `CHANGELOG.md` for PyPI release history.
15
+
16
+ ## [1.2.1] - 2026-07-19
17
+
18
+ ### Changed
19
+ - Expanded JobStreet Tangerang location filter to include Serpong, BSD, Alam Sutera, Tangerang Selatan, Kabupaten Tangerang, Kota Tangerang, and surrounding Banten areas.
20
+
21
+ ## [1.2.0] - 2026-07-19
22
+
23
+ ### Added
24
+ - Initial fork release as `python-jobspy-damarowen`.
25
+ - JobStreet Indonesia scraper (`site_name="jobstreet"`).
26
+ - README with usage examples, engine integration guide, and development workflow.
27
+
28
+ ### Changed
29
+ - Package metadata updated for fork publication on PyPI.
@@ -1,3 +1,30 @@
1
+ Metadata-Version: 2.4
2
+ Name: python-jobspy-damarowen
3
+ Version: 1.2.2
4
+ Summary: Job scraper for LinkedIn, Indeed, Glassdoor, ZipRecruiter, Bayt, and JobStreet (Indonesia fork)
5
+ License-File: LICENSE
6
+ Keywords: jobs-scraper,jobstreet,linkedin,indeed,glassdoor,ziprecruiter,bayt,naukri
7
+ Author: Cullen Watson
8
+ Author-email: cullen@cullenwatson.com
9
+ Requires-Python: >=3.10,<4.0
10
+ Classifier: Programming Language :: Python :: 3
11
+ Classifier: Programming Language :: Python :: 3.10
12
+ Classifier: Programming Language :: Python :: 3.11
13
+ Classifier: Programming Language :: Python :: 3.12
14
+ Classifier: Programming Language :: Python :: 3.13
15
+ Classifier: Programming Language :: Python :: 3.14
16
+ Requires-Dist: beautifulsoup4 (>=4.12.2,<5.0.0)
17
+ Requires-Dist: markdownify (>=1.1.0,<2.0.0)
18
+ Requires-Dist: numpy (>=1.26.0)
19
+ Requires-Dist: pandas (>=2.1.0,<3.0.0)
20
+ Requires-Dist: pydantic (>=2.3.0,<3.0.0)
21
+ Requires-Dist: regex (>=2024.4.28,<2025.0.0)
22
+ Requires-Dist: requests (>=2.31.0,<3.0.0)
23
+ Requires-Dist: tls-client (>=1.0.1,<2.0.0)
24
+ Project-URL: Homepage, https://github.com/damarowen/JobSpy
25
+ Project-URL: Repository, https://github.com/damarowen/JobSpy
26
+ Description-Content-Type: text/markdown
27
+
1
28
  <img src="https://github.com/cullenwatson/JobSpy/assets/78247585/ae185b7e-e444-4712-8bb9-fa97f53e896b" width="400">
2
29
 
3
30
  **JobSpy** is a job scraping library with the goal of aggregating all the jobs from popular job boards with one tool.
@@ -54,6 +81,114 @@ zip_recruiter Software Developer TEKsystems Phoenix
54
81
 
55
82
  ```
56
83
 
84
+ ## Using JobSpy as a Scraping Engine
85
+
86
+ This package is published to PyPI as `python-jobspy-damarowen` and can be used as the scraping engine inside your own API or application.
87
+
88
+ ### Installation
89
+
90
+ ```bash
91
+ pip install python-jobspy-damarowen==1.2.0
92
+ ```
93
+
94
+ ### Import and Scrape
95
+
96
+ ```python
97
+ from jobspy import scrape_jobs
98
+
99
+ jobs = scrape_jobs(
100
+ site_name="jobstreet",
101
+ search_term="software engineer",
102
+ location="Jakarta",
103
+ results_wanted=10,
104
+ hours_old=24,
105
+ verbose=0,
106
+ )
107
+
108
+ print(f"Found {len(jobs)} jobs")
109
+ print(jobs.to_dict(orient="records"))
110
+ ```
111
+
112
+ ### FastAPI Example
113
+
114
+ ```python
115
+ from fastapi import FastAPI
116
+ from jobspy import scrape_jobs
117
+
118
+ app = FastAPI()
119
+
120
+ @app.post("/scrape")
121
+ def scrape(
122
+ site_name: str = "jobstreet",
123
+ search_term: str = "software engineer",
124
+ location: str | None = None,
125
+ results_wanted: int = 10,
126
+ hours_old: int | None = None,
127
+ ):
128
+ kwargs = {
129
+ "site_name": site_name,
130
+ "search_term": search_term,
131
+ "results_wanted": results_wanted,
132
+ "verbose": 0,
133
+ }
134
+ if location:
135
+ kwargs["location"] = location
136
+ if hours_old is not None:
137
+ kwargs["hours_old"] = hours_old
138
+
139
+ jobs = scrape_jobs(**kwargs)
140
+ return {
141
+ "total": len(jobs),
142
+ "jobs": jobs.to_dict(orient="records"),
143
+ }
144
+ ```
145
+
146
+ ### JobStreet Indonesia Notes
147
+
148
+ - Use `site_name="jobstreet"` to scrape JobStreet Indonesia.
149
+ - `location` accepts Indonesian city names such as `Jakarta`, `Tangerang`, `Bandung`, `Surabaya`, or `Yogyakarta`.
150
+ - If `location` is omitted, the search defaults to `Indonesia` (nationwide).
151
+ - For `hours_old`, the scraper maps the value to JobStreet's server-side `daterange` filter (1, 3, 7, 14, or 30 days).
152
+
153
+ ## Development & Release Workflow
154
+
155
+ ### Day-to-Day Development
156
+
157
+ You can push commits to GitHub as often as needed without changing the package version:
158
+
159
+ ```bash
160
+ git add -A
161
+ git commit -m "fix(jobstreet): improve location slug handling"
162
+ git push origin main
163
+ ```
164
+
165
+ No PyPI release is required for normal development commits.
166
+
167
+ ### Releasing a New Version
168
+
169
+ 1. **Bump the version** in [`pyproject.toml`](pyproject.toml) following [Semantic Versioning](https://semver.org/):
170
+ - `1.2.0` → `1.2.1` for bug fixes
171
+ - `1.2.0` → `1.3.0` for new features
172
+ - `1.2.0` → `2.0.0` for breaking changes
173
+
174
+ 2. **Commit the version bump**:
175
+ ```bash
176
+ git add pyproject.toml
177
+ git commit -m "chore(release): bump version to 1.2.1"
178
+ git push origin main
179
+ ```
180
+
181
+ 3. **Build and upload to PyPI**:
182
+ ```bash
183
+ python -m build
184
+ twine upload dist/*
185
+ ```
186
+
187
+ 4. **Update downstream projects** (e.g., `jobspy-api`) to use the new version:
188
+ ```txt
189
+ python-jobspy-damarowen==1.2.1
190
+ ```
191
+
57
192
  ### Parameters for `scrape_jobs()`
58
193
 
59
194
  ```plaintext
@@ -258,3 +393,34 @@ Naukri specific
258
393
  ├── vacancy_count
259
394
  └── work_from_home_type
260
395
  ```
396
+
397
+ # Changelog
398
+
399
+ All notable changes to this project will be documented in this file.
400
+
401
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
402
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
403
+
404
+ ## [1.2.2] - 2026-07-19
405
+
406
+ ### Added
407
+ - `CHANGELOG.md` to track changes between releases and display them on PyPI.
408
+
409
+ ### Changed
410
+ - `pyproject.toml` now reads release notes from `CHANGELOG.md` for PyPI release history.
411
+
412
+ ## [1.2.1] - 2026-07-19
413
+
414
+ ### Changed
415
+ - Expanded JobStreet Tangerang location filter to include Serpong, BSD, Alam Sutera, Tangerang Selatan, Kabupaten Tangerang, Kota Tangerang, and surrounding Banten areas.
416
+
417
+ ## [1.2.0] - 2026-07-19
418
+
419
+ ### Added
420
+ - Initial fork release as `python-jobspy-damarowen`.
421
+ - JobStreet Indonesia scraper (`site_name="jobstreet"`).
422
+ - README with usage examples, engine integration guide, and development workflow.
423
+
424
+ ### Changed
425
+ - Package metadata updated for fork publication on PyPI.
426
+
@@ -1,30 +1,3 @@
1
- Metadata-Version: 2.4
2
- Name: python-jobspy-damarowen
3
- Version: 1.2.0
4
- Summary: Job scraper for LinkedIn, Indeed, Glassdoor, ZipRecruiter, Bayt, and JobStreet (Indonesia fork)
5
- License-File: LICENSE
6
- Keywords: jobs-scraper,jobstreet,linkedin,indeed,glassdoor,ziprecruiter,bayt,naukri
7
- Author: Cullen Watson
8
- Author-email: cullen@cullenwatson.com
9
- Requires-Python: >=3.10,<4.0
10
- Classifier: Programming Language :: Python :: 3
11
- Classifier: Programming Language :: Python :: 3.10
12
- Classifier: Programming Language :: Python :: 3.11
13
- Classifier: Programming Language :: Python :: 3.12
14
- Classifier: Programming Language :: Python :: 3.13
15
- Classifier: Programming Language :: Python :: 3.14
16
- Requires-Dist: beautifulsoup4 (>=4.12.2,<5.0.0)
17
- Requires-Dist: markdownify (>=1.1.0,<2.0.0)
18
- Requires-Dist: numpy (>=1.26.0)
19
- Requires-Dist: pandas (>=2.1.0,<3.0.0)
20
- Requires-Dist: pydantic (>=2.3.0,<3.0.0)
21
- Requires-Dist: regex (>=2024.4.28,<2025.0.0)
22
- Requires-Dist: requests (>=2.31.0,<3.0.0)
23
- Requires-Dist: tls-client (>=1.0.1,<2.0.0)
24
- Project-URL: Homepage, https://github.com/damarowen/JobSpy
25
- Project-URL: Repository, https://github.com/damarowen/JobSpy
26
- Description-Content-Type: text/markdown
27
-
28
1
  <img src="https://github.com/cullenwatson/JobSpy/assets/78247585/ae185b7e-e444-4712-8bb9-fa97f53e896b" width="400">
29
2
 
30
3
  **JobSpy** is a job scraping library with the goal of aggregating all the jobs from popular job boards with one tool.
@@ -81,6 +54,114 @@ zip_recruiter Software Developer TEKsystems Phoenix
81
54
 
82
55
  ```
83
56
 
57
+ ## Using JobSpy as a Scraping Engine
58
+
59
+ This package is published to PyPI as `python-jobspy-damarowen` and can be used as the scraping engine inside your own API or application.
60
+
61
+ ### Installation
62
+
63
+ ```bash
64
+ pip install python-jobspy-damarowen==1.2.0
65
+ ```
66
+
67
+ ### Import and Scrape
68
+
69
+ ```python
70
+ from jobspy import scrape_jobs
71
+
72
+ jobs = scrape_jobs(
73
+ site_name="jobstreet",
74
+ search_term="software engineer",
75
+ location="Jakarta",
76
+ results_wanted=10,
77
+ hours_old=24,
78
+ verbose=0,
79
+ )
80
+
81
+ print(f"Found {len(jobs)} jobs")
82
+ print(jobs.to_dict(orient="records"))
83
+ ```
84
+
85
+ ### FastAPI Example
86
+
87
+ ```python
88
+ from fastapi import FastAPI
89
+ from jobspy import scrape_jobs
90
+
91
+ app = FastAPI()
92
+
93
+ @app.post("/scrape")
94
+ def scrape(
95
+ site_name: str = "jobstreet",
96
+ search_term: str = "software engineer",
97
+ location: str | None = None,
98
+ results_wanted: int = 10,
99
+ hours_old: int | None = None,
100
+ ):
101
+ kwargs = {
102
+ "site_name": site_name,
103
+ "search_term": search_term,
104
+ "results_wanted": results_wanted,
105
+ "verbose": 0,
106
+ }
107
+ if location:
108
+ kwargs["location"] = location
109
+ if hours_old is not None:
110
+ kwargs["hours_old"] = hours_old
111
+
112
+ jobs = scrape_jobs(**kwargs)
113
+ return {
114
+ "total": len(jobs),
115
+ "jobs": jobs.to_dict(orient="records"),
116
+ }
117
+ ```
118
+
119
+ ### JobStreet Indonesia Notes
120
+
121
+ - Use `site_name="jobstreet"` to scrape JobStreet Indonesia.
122
+ - `location` accepts Indonesian city names such as `Jakarta`, `Tangerang`, `Bandung`, `Surabaya`, or `Yogyakarta`.
123
+ - If `location` is omitted, the search defaults to `Indonesia` (nationwide).
124
+ - For `hours_old`, the scraper maps the value to JobStreet's server-side `daterange` filter (1, 3, 7, 14, or 30 days).
125
+
126
+ ## Development & Release Workflow
127
+
128
+ ### Day-to-Day Development
129
+
130
+ You can push commits to GitHub as often as needed without changing the package version:
131
+
132
+ ```bash
133
+ git add -A
134
+ git commit -m "fix(jobstreet): improve location slug handling"
135
+ git push origin main
136
+ ```
137
+
138
+ No PyPI release is required for normal development commits.
139
+
140
+ ### Releasing a New Version
141
+
142
+ 1. **Bump the version** in [`pyproject.toml`](pyproject.toml) following [Semantic Versioning](https://semver.org/):
143
+ - `1.2.0` → `1.2.1` for bug fixes
144
+ - `1.2.0` → `1.3.0` for new features
145
+ - `1.2.0` → `2.0.0` for breaking changes
146
+
147
+ 2. **Commit the version bump**:
148
+ ```bash
149
+ git add pyproject.toml
150
+ git commit -m "chore(release): bump version to 1.2.1"
151
+ git push origin main
152
+ ```
153
+
154
+ 3. **Build and upload to PyPI**:
155
+ ```bash
156
+ python -m build
157
+ twine upload dist/*
158
+ ```
159
+
160
+ 4. **Update downstream projects** (e.g., `jobspy-api`) to use the new version:
161
+ ```txt
162
+ python-jobspy-damarowen==1.2.1
163
+ ```
164
+
84
165
  ### Parameters for `scrape_jobs()`
85
166
 
86
167
  ```plaintext
@@ -285,4 +366,3 @@ Naukri specific
285
366
  ├── vacancy_count
286
367
  └── work_from_home_type
287
368
  ```
288
-
@@ -166,6 +166,30 @@ class JobStreet(Scraper):
166
166
 
167
167
  jobs = []
168
168
  requested_location = (self.scraper_input.location or "Indonesia").strip().lower()
169
+ # Expand "Tangerang" to cover the whole Tangerang metropolitan area
170
+ location_matchers = {
171
+ "tangerang": {
172
+ "tangerang",
173
+ "serpong",
174
+ "bsd",
175
+ "alam sutera",
176
+ "cipondoh",
177
+ "ciledug",
178
+ "batuceper",
179
+ "benda",
180
+ "jatiuwung",
181
+ "karawaci",
182
+ "larangan",
183
+ "periuk",
184
+ "pinang",
185
+ "tangerang selatan",
186
+ "kabupaten tangerang",
187
+ "kota tangerang",
188
+ "banten",
189
+ }
190
+ }
191
+ accepted_matchers = location_matchers.get(requested_location, {requested_location})
192
+
169
193
  for card in job_cards:
170
194
  try:
171
195
  job = self._parse_card(card)
@@ -176,7 +200,7 @@ class JobStreet(Scraper):
176
200
  getattr(job.location, field, "") or ""
177
201
  for field in ("city", "state", "country")
178
202
  ).lower()
179
- if requested_location not in job_location:
203
+ if not any(matcher in job_location for matcher in accepted_matchers):
180
204
  log.debug(f"Skipping job '{job.title}' in '{job_location}' (requested {requested_location})")
181
205
  continue
182
206
  jobs.append(job)
@@ -4,12 +4,12 @@ build-backend = "poetry.core.masonry.api"
4
4
 
5
5
  [tool.poetry]
6
6
  name = "python-jobspy-damarowen"
7
- version = "1.2.0"
7
+ version = "1.2.2"
8
8
  description = "Job scraper for LinkedIn, Indeed, Glassdoor, ZipRecruiter, Bayt, and JobStreet (Indonesia fork)"
9
9
  authors = ["Cullen Watson <cullen@cullenwatson.com>", "Zachary Hampton <zachary@zacharysproducts.com>", "Damarowen"]
10
10
  homepage = "https://github.com/damarowen/JobSpy"
11
11
  repository = "https://github.com/damarowen/JobSpy"
12
- readme = "README.md"
12
+ readme = [ "README.md", "CHANGELOG.md",]
13
13
  keywords = [ "jobs-scraper", "jobstreet", "linkedin", "indeed", "glassdoor", "ziprecruiter", "bayt", "naukri"]
14
14
  [[tool.poetry.packages]]
15
15
  include = "jobspy"