You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python函数过滤输入表单中的指定技能(如django/Django)

过滤包含指定技能的招聘职位解决方案

问题:如何使用Python函数从爬取的招聘技能数据中过滤掉包含'django'和'Django'这类指定技能的职位?已使用requests和bs4获取原始数据,需对结果进行过滤。

原代码问题分析

  1. 输入解析错误:list(map(str,input('>')))会将输入的每个字符拆分为列表元素,无法正确获取用户需要过滤的完整技能。
  2. 过滤逻辑失效: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 15:30:57