如何用Python函数过滤输入表单中的指定技能(如django/Django)
过滤包含指定技能的招聘职位解决方案
问题:如何使用Python函数从爬取的招聘技能数据中过滤掉包含'django'和'Django'这类指定技能的职位?已使用requests和bs4获取原始数据,需对结果进行过滤。
原代码问题分析
- 输入解析错误:
list(map(str,input('>')))会将输入的每个字符拆分为列表元素,无法正确获取用户需要过滤的完整技能。 - 过滤逻辑失效:
filter(unfamiliar_skills, skills)不符合Pythonfilter函数的使用规范,无法实现过滤包含指定技能职位的需求。
解决方案
核心思路
- 正确解析用户输入的技能集合,统一转为小写实现不区分大小写匹配。
- 检查职位技能列表,排除包含任何指定过滤技能的职位。
- 处理技能字段为空的异常情况,避免程序报错。
修改后的完整代码
from bs4 import BeautifulSoup import requests import time # 处理用户输入:逗号分隔技能,转为小写集合 unfamiliar_skills = input('请输入要过滤的技能(逗号分隔):').strip().split(',') unfamiliar_skills = {skill.strip().lower() for skill in unfamiliar_skills if skill.strip()} def find_jobs(): html_text = requests.get('https://www.timesjobs.com/candidate/job-search.html?searchType=personalizedSearch&from=submit&txtKeywords=python&txtLocation=').text soup = BeautifulSoup(html_text, 'lxml') jobs = soup.find_all('li', class_='clearfix job-bx wht-shd-bx') for index, job in enumerate(jobs): published_date = job.find('span', class_='sim-posted').span.text if 'few' in published_date: company_name = job.find('h3', class_='joblist-comp-name').text.replace(' ', '') skill_elem = job.find('span', class_='srp-skills') # 跳过无技能信息的职位 if not skill_elem: continue skills = skill_elem.text.replace(' ', '') more_info = job.header.h2.a['href'] # 将职位技能转为小写并拆分 job_skills = [skill.strip().lower() for skill in skills.split(',') if skill.strip()] # 检查是否包含需过滤的技能 has_filter_skill = any(s in unfamiliar_skills for s in job_skills) # 仅保存不包含过滤技能的职位 if not has_filter_skill: with open(f'C:/Users/USER/{index}.txt', 'w', encoding='utf-8') as f: f.write(f'公司名称: {company_name.strip()} \n') f.write(f'所需技能: {skills.strip()} \n') f.write(f'详情链接: {more_info} \n') print(f'文件已保存: {index}') if __name__ == '__main__': while True: find_jobs() time_wait = 10 print(f'等待 {time_wait} 分钟后重新爬取...') time.sleep(time_wait * 60)
关键说明
- 输入处理:将用户输入的技能转为小写集合,既避免大小写匹配问题,又能快速判断元素是否存在。
- 异常处理:通过判断
skill_elem是否存在,跳过无技能信息的职位,防止后续调用text方法报错。 - 过滤逻辑:用
any()函数快速检查职位技能中是否包含需过滤的技能,逻辑清晰且效率较高。
内容的提问来源于stack exchange,提问作者Abayomi Adewale
相关产品推荐
相关产品推荐

