2023-09-05 10:17:22 -07:00
|
|
|
from ..jobs import Enum, BaseModel, JobType, JobResponse, Country
|
2023-09-03 18:05:31 -07:00
|
|
|
from typing import List, Optional, Any
|
2023-07-06 17:12:01 -07:00
|
|
|
|
|
|
|
|
|
|
|
class Site(Enum):
|
|
|
|
LINKEDIN = "linkedin"
|
|
|
|
INDEED = "indeed"
|
|
|
|
ZIP_RECRUITER = "zip_recruiter"
|
2023-10-30 17:57:36 -07:00
|
|
|
GLASSDOOR = "glassdoor"
|
2023-07-06 17:12:01 -07:00
|
|
|
|
|
|
|
|
|
|
|
class ScraperInput(BaseModel):
|
2023-08-26 12:28:02 -07:00
|
|
|
site_type: List[Site]
|
2023-07-06 17:12:01 -07:00
|
|
|
search_term: str
|
2023-07-11 03:42:20 -07:00
|
|
|
|
|
|
|
location: str = None
|
2023-09-05 10:17:22 -07:00
|
|
|
country: Optional[Country] = Country.USA
|
2023-09-03 07:29:25 -07:00
|
|
|
distance: Optional[int] = None
|
2023-07-11 03:42:20 -07:00
|
|
|
is_remote: bool = False
|
2023-09-03 07:29:25 -07:00
|
|
|
job_type: Optional[JobType] = None
|
2023-08-17 13:44:52 -07:00
|
|
|
easy_apply: bool = None # linkedin
|
2024-01-22 18:22:32 -08:00
|
|
|
full_description: bool = False
|
2023-09-28 16:11:28 -07:00
|
|
|
offset: int = 0
|
2023-07-10 16:04:44 -07:00
|
|
|
|
2023-07-10 20:07:19 -07:00
|
|
|
results_wanted: int = 15
|
2023-07-06 17:12:01 -07:00
|
|
|
|
|
|
|
|
2023-07-10 20:07:19 -07:00
|
|
|
class Scraper:
|
2023-09-07 09:28:17 -07:00
|
|
|
def __init__(self, site: Site, proxy: Optional[List[str]] = None):
|
2023-07-06 17:12:01 -07:00
|
|
|
self.site = site
|
2023-09-07 09:28:17 -07:00
|
|
|
self.proxy = (lambda p: {"http": p, "https": p} if p else None)(proxy)
|
2023-07-06 17:12:01 -07:00
|
|
|
|
2023-07-10 20:07:19 -07:00
|
|
|
def scrape(self, scraper_input: ScraperInput) -> JobResponse:
|
|
|
|
...
|