mirror of https://github.com/Bunsly/JobSpy
86 lines
2.5 KiB
Python
86 lines
2.5 KiB
Python
from bs4 import BeautifulSoup
|
|
|
|
from jobspy.model import JobType
|
|
from jobspy.util import get_enum_from_job_type
|
|
|
|
|
|
def job_type_code(job_type_enum: JobType) -> str:
|
|
return {
|
|
JobType.FULL_TIME: "F",
|
|
JobType.PART_TIME: "P",
|
|
JobType.INTERNSHIP: "I",
|
|
JobType.CONTRACT: "C",
|
|
JobType.TEMPORARY: "T",
|
|
}.get(job_type_enum, "")
|
|
|
|
|
|
def parse_job_type(soup_job_type: BeautifulSoup) -> list[JobType] | None:
|
|
"""
|
|
Gets the job type from job page
|
|
:param soup_job_type:
|
|
:return: JobType
|
|
"""
|
|
h3_tag = soup_job_type.find(
|
|
"h3",
|
|
class_="description__job-criteria-subheader",
|
|
string=lambda text: "Employment type" in text,
|
|
)
|
|
employment_type = None
|
|
if h3_tag:
|
|
employment_type_span = h3_tag.find_next_sibling(
|
|
"span",
|
|
class_="description__job-criteria-text description__job-criteria-text--criteria",
|
|
)
|
|
if employment_type_span:
|
|
employment_type = employment_type_span.get_text(strip=True)
|
|
employment_type = employment_type.lower()
|
|
employment_type = employment_type.replace("-", "")
|
|
|
|
return [get_enum_from_job_type(employment_type)] if employment_type else []
|
|
|
|
|
|
def parse_job_level(soup_job_level: BeautifulSoup) -> str | None:
|
|
"""
|
|
Gets the job level from job page
|
|
:param soup_job_level:
|
|
:return: str
|
|
"""
|
|
h3_tag = soup_job_level.find(
|
|
"h3",
|
|
class_="description__job-criteria-subheader",
|
|
string=lambda text: "Seniority level" in text,
|
|
)
|
|
job_level = None
|
|
if h3_tag:
|
|
job_level_span = h3_tag.find_next_sibling(
|
|
"span",
|
|
class_="description__job-criteria-text description__job-criteria-text--criteria",
|
|
)
|
|
if job_level_span:
|
|
job_level = job_level_span.get_text(strip=True)
|
|
|
|
return job_level
|
|
|
|
|
|
def parse_company_industry(soup_industry: BeautifulSoup) -> str | None:
|
|
"""
|
|
Gets the company industry from job page
|
|
:param soup_industry:
|
|
:return: str
|
|
"""
|
|
h3_tag = soup_industry.find(
|
|
"h3",
|
|
class_="description__job-criteria-subheader",
|
|
string=lambda text: "Industries" in text,
|
|
)
|
|
industry = None
|
|
if h3_tag:
|
|
industry_span = h3_tag.find_next_sibling(
|
|
"span",
|
|
class_="description__job-criteria-text description__job-criteria-text--criteria",
|
|
)
|
|
if industry_span:
|
|
industry = industry_span.get_text(strip=True)
|
|
|
|
return industry
|