如何使用BeautifulSoup从HTML元素中正确提取薪资信息?
解决薪资提取问题
你当前用attribute_snippet拿到职位类型,说明这个class并非薪资专属。要正确提取薪资,得先通过浏览器开发者工具(F12)定位薪资元素的具体特征,以下是几种通用方案:
方案1:定位薪资专属的class/属性
大部分招聘网站会给薪资元素分配专属class或属性,比如常见的salary-snippet、estimated-salary,或者带data-testid标识的元素。示例代码:
# 示例:假设薪资元素class是salary-snippet salary_element = job.find('div', class_='salary-snippet') # 或者通过data-testid属性定位 salary_element = job.find(attrs={"data-testid": "salary-info"}) if salary_element: salaries.append(salary_element.text.strip()) else: salaries.append('薪资未公开')
方案2:通过文本特征筛选
如果没有专属标识,可筛选包含薪资关键词(如“¥”、“$”、“K”、“年”、“月”)的元素:
salary = '薪资未公开' # 遍历当前job下所有可能的文本元素 for elem in job.find_all(['div', 'span']): text = elem.text.strip() if any(key in text for key in ['¥', '$', 'K', '年', '月', '小时']): salary = text break salaries.append(salary)
调整后的完整代码示例
job_elements = soup.find_all('div', class_='job_seen_beacon') job_titles = [] company_names = [] locations = [] job_types = [] salaries = [] for job in job_elements: # 提取职位标题 title = job.find('h2', class_='jobTitle jobTitle-newJob css-bdjp2m eu4oa1w0') job_titles.append(title.text.strip() if title else 'No job title') # 提取公司信息 company = job.find('div', class_='heading6 company_location tapItem-gutter companyInfo') company_names.append(company.text.strip() if company else 'No company info') # 提取地点 location = job.find('div', 'companyLocation') locations.append(location.text.strip() if location else 'No location') # 提取职位类型 job_type = job.find('div', class_='metadata') job_types.append(job_type.text.strip() if job_type else 'Not specified') # 提取薪资(用方案1示例,根据实际结构调整) salary_element = job.find('div', class_='salary-snippet') # 替换成你找到的薪资class salaries.append(salary_element.text.strip() if salary_element else '薪资未公开')
注意:实际使用时,一定要用浏览器开发者工具查看目标薪资元素的真实class或属性,替换代码中的选择器,因为网站HTML结构可能随时变化。
内容的提问来源于stack exchange,提问作者Donatus
相关产品推荐
相关产品推荐

