今天来聊聊求职需要的 Python 技能

简介: 今天来聊聊求职需要的 Python 技能

每年的 3、4 月份都是金三银四跳槽季,企业一般也会选择在这个时期调整职工的薪资,小伙伴在这个时候也会心里痒痒,在招聘网站上看看是否有合适的机会,需要的 Python 技能是否符合年限等等情况。这里以招聘网站为例抓取魔都近一个月的招聘数据,生成柱状图与词云。


image.png

抓取招聘网站数据

首先将魔都 近 1 个月的招聘职位都抓取出来,使用 requests 模块和 BeautifulSoup 模块



image.png


# -*- coding: utf-8 -*-
import requests
from bs4 import BeautifulSoup
import time
import random
urlFileName = 'urls.txt' # 存放招聘信息详情的URL文本
contentFileName = 'context.txt' # 存放抓取的内容
def getUrls2Txt(page_num):
    p = page_num+1
    for i in range(1, p):
        urls = []
        # 抓取魔都的
        url = 'https://search.51job.com/list/020000,000000,0000,00,2,99,Python,2,'+str(i)+'.html?lang=c&postchannel=0000&workyear=99&cotype=99°reefrom=99&jobterm=99&companysize=99&ord_field=0&dibiaoid=0&line=&welfare='
        html = requests.get(url)
        soup = BeautifulSoup(html.content, "html.parser")
        ps = soup.find_all('p', class_='t1')
        for p in ps:
            a = p.find('a')
            urls.append(str(a['href']))
        with open(urlFileName, 'a', encoding='utf-8') as f:
            for url in urls:
                f.write(url+'\n')
        s = random.randint(5, 30)
        print(str(i)+'page done,'+str(s)+'s later')
        time.sleep(s)
def getContent(url, headers):
    record = ''
    try:
        html = requests.get(url, headers=headers)
        soup = BeautifulSoup(html.content, "html.parser")
        positionTitle = str(soup.find('h1')['title']) # 标题
        salary = soup.find_all('strong')[1].get_text() # 薪资
        companyName = soup.find('p', class_='cname').get_text().strip().replace('\n','').replace('查看所有职位','') # 公司名
        positionInfo = soup.find(
            'div', class_='bmsg job_msg inbox').get_text().strip().replace('\n', '').replace('分享', '').replace('举报', '').replace(' ', '').replace('\r', '') # 岗位职责
        record = positionTitle + '&&&' + salary + '&&&' + companyName + '&&&' + '&&&' + positionInfo
    except Exception as e:
        print('错误了')
    return record
def main():
        page_num = 93
        getUrls2Txt(page_num)
        user_Agent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36'
        headers = {'User-Agent': user_Agent}
        with open(urlFileName, 'r', encoding='utf-8') as f:
            urls = f.readlines()
        i = 0
        for url in urls:
            url = url.strip()
            if url != '':
                record = getContent(url, headers)
                with open(contentFileName, 'a', encoding='utf-8') as f:
                        f.write(record + '\n')
                i += 1
                print(str(i)+'详情抓取完成')
                time.sleep(1)
        print('完成了')
if __name__ == '__main__':
    main()


image.png


分词

在这一步需要对招聘信息中的职位信息进行人工的初步删选,过滤掉常用字存入 filterWords 变量中,然后利用结巴分词(https://github.com/fxsjy/jieba)基于TF-IDF算法将职位信息进行分词,并统计技术词语出现的次数。



from jieba import analyse
fenCi = {}
def main():
    # 负责过滤的词语,这里只列出了几个    filterWords = ['熟悉', '熟练', '经验', '优先', '应用开发', '相关', '工作', '开发', '能力', '负责', '技术', '具备', '精通', '数据', 'ETC']
    # 结巴分词基于 TF-IDF 算法的关键词    tfidf = analyse.extract_tags        for zpInfo in open('context.txt', 'r', encoding='utf-8'):
        if zpInfo.strip() == '':            continue        # 详情数据是用&&&分割的        infos = zpInfo.split("&&&")        words = tfidf(infos[-1])
        words = [x.upper() for x in words if x.upper() not in filterWords]
        for word in words:            num = fenCi.get(word, 0) + 1            fenCi[word] = num
    print(sorted(fenCi.items(), key=lambda kv: (kv[1], kv[0]), reverse=True))    print('分出了' + str(len(fenCi)) + '了词语')
if __name__ == '__main__':    main()


技能图表


在分词中,分出了 12663 个词这些词大多都是常用字,需要进一次筛选出多个高频的 Python 技能利用 matplotlib 模块画出柱状图。


import matplotlib.pyplot as pltimport numpy as np
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']params = {    'axes.labelsize': '14',    'xtick.labelsize': '14',    'ytick.labelsize': '13',    'lines.linewidth': '2',    'legend.fontsize': '20',    'figure.figsize': '26, 24'}plt.style.use("ggplot")plt.rcParams.update(params)
# 筛选分词中高频的barDir = {    'PYTHON': 2283,    'LINUX': 981,    '算法': 658,    '运维': 530,    '数据库(MySql,Sql,Redis等)': 1021,    'SHELL': 996,    '数据分析/挖掘': 695,    'WEB': 454,    '测试用例': 515,    'MATLAB': 221,    'PERL': 209,    'HIVE': 122,    'HADOOP': 176,    'SPARK': 146,    'TENSORFLOW': 136,    '多线程': 127,    'AI': 106,    'SAS': 104,    '视觉/图像处理': 180,    '人工智能': 170,    'HTTP': 90,    'DOCKER': 82,    'DJANGO': 82,}
fig, ax = plt.subplots(figsize=(20, 10), dpi=100)
# 添加刻度标签labels = np.array(list(barDir.keys()))ax.barh(range(len(barDir.values())), barDir.values(), tick_label=labels, alpha=1)
ax.set_xlabel('Python技术词的次数', color='k')ax.set_title('Python工作高频技术词')
# 为每个条形图添加数值标签for x, y in enumerate(barDir.values()):    ax.text(y + 0.5, x, y, va='center', fontsize=14)
# 显示图形plt.show()


图表


image.png


词云

最后将分词数据生成一个词云,将 Python 图标作为底图使用。


def getWorldCloud():   # 底层图片路径   path_img = "python.jpg"   background_image = np.array(Image.open(path_img))
   wordcloud = WordCloud(       # 字体路径       font_path="/System/Library/Fonts/STHeiti Light.ttc",       background_color="white",       mask=background_image).generate(" ".join(list(fenCi.keys())))   image_colors = ImageColorGenerator(background_image)   plt.imshow(wordcloud.recolor(color_func=image_colors), interpolation="bilinear")   plt.axis("off")   plt.show()

最后生成的词云图


image.png


总结



本文主要是从招聘网站抓取 Python 工作职责并生成柱状图和词云,展示企业需要哪些 Python 技能,从而在面试前学会并运用这些技能。在生成最后结果的过程中存在 2 点不完美的情况,一点是存在人工筛选另一个是在分词中没有完全过滤掉通用字。随着小编的 Python 技能树的增长,有理由相信在不久这 2 种情况将完全避免。


示例代码:求职需要的 Python 技能

目录
相关文章
|
3月前
|
安全 Python
Python并发编程必备技能:掌握threading模块,让你的代码跑得更快!
【8月更文挑战第22天】Python并发编程采用多线程技术实现任务的同时执行。利用`threading`模块可轻松管理和创建线程。通过`Thread`类实例化线程并用`start()`方法启动。线程同步通过`Lock`确保资源访问互斥,或用`Semaphore`控制并发数量。线程间通信则可通过`Queue`安全传递数据,实现生产者-消费者模式等功能。这些工具有效避免了竞态条件,确保了程序的正确性和效率。
56 1
|
3月前
|
测试技术 持续交付 Apache
深度挖掘:Python性能测试中JMeter与Locust的隐藏技能🔍
【8月更文挑战第5天】随着软件规模扩大,性能测试对系统稳定性至关重要。Apache JMeter和Locust是两大主流工具,各有千秋。本文探索它们在Python环境下的进阶用法,挖掘更多性能测试潜力。JMeter功能强大,支持多种协议,可通过命令行模式执行复杂测试计划,并与Python集成实现动态测试数据生成。Locust基于Python,通过编写简洁脚本模拟HTTP请求,支持自定义请求及与Python库深度集成。掌握这些技巧可实现高度定制化测试场景,有效识别性能瓶颈,提升应用稳定性。
126 1
|
1月前
|
机器学习/深度学习 算法 计算机视觉
【Python篇】Python + OpenCV 全面实战:解锁图像处理与视觉智能的核心技能
【Python篇】Python + OpenCV 全面实战:解锁图像处理与视觉智能的核心技能
66 2
|
2月前
|
存储 大数据 索引
解锁Python隐藏技能:构建高效后缀树Suffix Tree,处理大数据游刃有余!
通过构建高效的后缀树,Python程序在处理大规模字符串数据时能够游刃有余,显著提升性能和效率。无论是学术研究还是工业应用,Suffix Tree都是不可或缺的强大工具。
46 6
|
2月前
|
机器学习/深度学习 数据挖掘 TensorFlow
解锁Python数据分析新技能,TensorFlow&PyTorch双引擎驱动深度学习实战盛宴
在数据驱动时代,Python凭借简洁的语法和强大的库支持,成为数据分析与机器学习的首选语言。Pandas和NumPy是Python数据分析的基础,前者提供高效的数据处理工具,后者则支持科学计算。TensorFlow与PyTorch作为深度学习领域的两大框架,助力数据科学家构建复杂神经网络,挖掘数据深层价值。通过Python打下的坚实基础,结合TensorFlow和PyTorch的强大功能,我们能在数据科学领域探索无限可能,解决复杂问题并推动科研进步。
61 0
|
3月前
|
算法 关系型数据库 程序员
程序员必备技能)基于Python的鼠标与键盘控制实战扩展与源码
这篇文章是关于如何使用Python的`pyautogui`库来控制鼠标和键盘进行各种操作,包括移动、点击、滚轮控制以及键盘的按键和快捷键输出,并介绍了如何结合图像处理和计算机视觉技术来扩展其应用。
|
4月前
|
数据采集 网络协议 数据挖掘
网络爬虫进阶之路:深入理解HTTP协议,用Python urllib解锁新技能
【7月更文挑战第30天】网络爬虫是数据分析和信息聚合的关键工具。深入理解HTTP协议及掌握Python的urllib库对于高效爬虫开发至关重要。HTTP协议采用请求/响应模型,具有无状态性、支持多种请求方法和内容协商等特点。
51 3
|
4月前
|
机器学习/深度学习 数据挖掘 TensorFlow
解锁Python数据分析新技能,TensorFlow&PyTorch双引擎驱动深度学习实战盛宴
【7月更文挑战第31天】在数据驱动时代,Python凭借其简洁性与强大的库支持,成为数据分析与机器学习的首选语言。**数据分析基础**从Pandas和NumPy开始,Pandas简化了数据处理和清洗,NumPy支持高效的数学运算。例如,加载并清洗CSV数据、计算总销售额等。
59 2
|
3月前
|
数据采集 数据挖掘 数据处理
解锁Python数据分析新技能!Pandas实战学习,让你的数据处理能力瞬间飙升!
【8月更文挑战第22天】Python中的Pandas库简化了数据分析工作。本文通过分析一个金融公司的投资数据文件“investment_data.csv”,介绍了Pandas的基础及高级功能。首先读取并检查数据,包括显示前几行、列名、形状和数据类型。随后进行数据清洗,移除缺失值与重复项。接着转换日期格式,并计算投资收益。最后通过分组计算平均投资回报率,展示了Pandas在数据处理与分析中的强大能力。
45 0
|
3月前
|
SQL 网络协议 数据库连接
"解锁数据连接新技能:Python携手SqlServer,轻松驾驭企业级数据库挑战!"
【8月更文挑战第21天】本文介绍如何在Python中连接SqlServer数据库。首先,需安装`pyodbc`库:`pip install pyodbc`。接着配置数据库详情如服务器地址、端口等。示例代码展示如何建立连接、执行查询及处理结果。务必确认TCP/IP已启用并使用合适ODBC驱动。了解这些步骤可助您更好地利用Python进行数据管理。
87 0