数据分析 — 招聘数据爬取和分析

news2025/4/15 10:53:47

目录

  • 一、数据获取
  • 二、词云图语法
    • 1、jieba 分词
    • 2、词云图

一、数据获取

需求:

招聘数据获取地址:https://careers.tencent.com/home.html

获取字段:岗位的名称、岗位职责、发布时间

import pandas as pd  # 导入 Pandas 库并使用别名 pd  
import requests  # 导入 requests 库,用于进行 HTTP 请求  
import time  # 导入 time 模块,用于处理时间相关操作  
import json  # 导入 json 模块,用于处理 JSON 数据  
import random  # 导入 random 模块,用于生成随机数

# 初始化一个空列表,用于存储招聘信息
lst = []
# 获取当前时间戳,乘以1000是为了将秒转换为毫秒
timestamp = int(time.time() * 1000)
# 获取用户输入的关键词和要爬取的数据页数
keyword = input('请输入要搜索的关键词:')
pageIndex = int(input('请输入要爬取的数据页数:'))

# 设置请求头,模拟浏览器访问
head = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
}

# 遍历每一页数据
for page in range(1, pageIndex + 1):
    # 构建请求 URL,使用 f-string 格式化字符串,将关键词和页数嵌入 URL 中
    url = f"https://careers.tencent.com/tencentcareer/api/post/Query?timestamp={timestamp}&countryId=&cityId=&bgIds=&productId=&categoryId=&parentCategoryId=&attrId=&keyword={keyword}&pageIndex={page}&pageSize=10&language=zh-cn&area=cn"
    # 打印当前请求的 URL
    print(url)
    
    # 发送 GET 请求获取数据
    res = requests.get(url=url, headers=head)
    # 将返回的内容解码为 UTF-8 格式的字符串
    result = res.content.decode('utf-8')
    # 随机等待1到5秒,模拟人为操作,防止被网站封 IP
    time.sleep(random.randint(1, 5))
    # 将返回的 JSON 字符串解析为字典
    content_dict = json.loads(result)
    # 打印解析后的字典内容
    print(content_dict)

    # 获取招聘信息列表
    post_list = content_dict['Data']['Posts']
    # 遍历招聘信息列表
    for value_dict in post_list:
        # 创建一个字典,存储招聘信息的相关字段
        dic = {}
        dic['LastUpdateTime'] = value_dict['LastUpdateTime']
        dic['RecruitPostName'] = value_dict['RecruitPostName']
        dic['Responsibility'] = value_dict['Responsibility']
        PostId = value_dict['PostId']
        # 将字典添加到列表中
        lst.append(dic)

# 将列表转换为 DataFrame
data = pd.DataFrame(lst)
# 打印 DataFrame
print(data)

# 将 DataFrame 保存为 CSV 文件,index=False 表示不保存行索引
data.to_csv('./招聘数据.csv', index=False)

二、词云图语法

1、jieba 分词

jieba 是一款用于中文分词的开源 Python 库。中文分词是将一段中文文本切割成有意义的词语的过程,是中文文本处理的基础步骤之一。jieba 库被广泛用于中文自然语言处理(NLP)任务,如文本分析、情感分析、关键词提取等。

安装和导入

pip install jieba

import jieba # 导入 jieba 库,用于中文分词

import jieba  # 导入 jieba 库,用于中文分词
# 文本
text = "今天生活很美好。"

# 精确模式分词:把文本精确的切分开,不存在冗余单词。
seg_list = jieba.cut(text, cut_all=False)
# 输出分词结果
print("精确模式:", "/ ".join(seg_list))  # 精确模式: 今天/ 生活/ 很/ 美好/ 。

# 全模式分词:把文本中所有可能的词语都扫描出来,有冗余。
seg_list = jieba.cut(text, cut_all=True)
# 输出分词结果
print("全模式:", "/ ".join(seg_list))  # 精确模式: 今天/ 生活/ 很/ 美好/ 。

# 搜索引擎模式分词:在精确模式基础上,对长词再次切分。
seg_list = jieba.cut_for_search(text)
# 输出分词结果
print("搜索引擎模式:", "/ ".join(seg_list))  # 搜索引擎模式: 今天/ 生活/ 很/ 美好/ 。

2、词云图

import numpy as np  # 导入 NumPy 库,用于处理图像
import pandas as pd  # 导入 Pandas 库并使用别名 pd
import jieba  # 导入 jieba 库,用于中文分词
from wordcloud import WordCloud  # 导入 WordCloud 类,用于生成词云图
from PIL import Image  # 导入 Image 模块,用于处理图像
from matplotlib import colors  # 导入 colors 模块,用于设置颜色映射

# 设置数据文件路径
path = r'F:\data\招聘数据.csv'
# 读取 CSV 文件并使用 ANSI 编码格式
data = pd.read_csv(path, encoding='utf-8')
# 打印读取到的数据
print(data)

# 创建空列表 res_list 用于存储职责信息
res_list = []
# 初始化字符串 st 为空字符串
st = ''

# 定义函数 chinese_jieba
def chinese_jieba():
    # 遍历数据列 'Responsibility' 中的每个元素,并将其转换为字符串后添加到 res_list 中
    for i in data['Responsibility']:
        res_list.append(str(i))
    # 将 res_list 中的字符串用空字符串连接起来
    st2 = st.join(res_list)
    # 使用 jieba 分词对连接后的字符串进行分词,返回分词后的字符串
    wordlist_data = jieba.lcut(st2)
    txt_jieba = " ".join(wordlist_data)
    return txt_jieba
# 打印使用 jieba 分词后的字符串
print(chinese_jieba())

# 定义函数 stopwords_read 用于读取停用词表
def stopwords_read():
    # 增加停用词
    stopwords_ = ['负责', '腾讯', '优化', 'learning']
    # 打开停用词文件,逐行读取并将非空行的内容加入停用词列表 stopwords_
    with open(r'F:\data\stopwords.txt', encoding='utf-8') as f:
        for line in f:
            if len(line) > 0:
                stopwords_.append(line.strip())
    return stopwords_

# 定义函数 wordcloud_generate 生成词云图
def wordcloud_generate():
    # 调用 stopwords_read 函数获取停用词列表
    stopwords_ = stopwords_read()
    # 调用 chinese_jieba 函数获取分词后的字符串
    txt = chinese_jieba()
    # 读取背景图片并转换为 NumPy 数组
    background_image = np.array(Image.open(r'F:\data\心形.png'))
    # 定义颜色映射
    colormaps = colors.ListedColormap(['blue', 'green', 'yellow', 'red', 'pink'])
    # 使用 WordCloud 类生成词云图
    wordcloud = WordCloud(
        width = 1000,  # 图片的宽度,默认为400
        height = 800,  # 图片的高度,默认为200
        background_color = 'lightblue',  # 图片的背景颜色,默认为黑色
        max_words = 100,  # 最大词数,默认为 200
        contour_color = 'steelblue',  # 词云图的轮廓颜色,默认为'black'
        contour_width = 2,  # 词云图的轮廓宽度,默认为2
        max_font_size = 400,  # 最大字体大小,默认为None
        min_font_size = 4,  # 最小字体大小,默认为4
        prefer_horizontal=0.99,  # 文字的方向,默认值是 0.9
        font_step = 1,  # 字体步⻓,增加该值会使字体大小增加的更平滑,默认为1
        font_path = 'simhei.ttf',  # 字体文件路径,用于中文显示
        random_state = None,  # 用于生成随机颜色,保证每次生成的词云图颜色⼀致
        colormap = colormaps,  # 颜色映射表,默认为'viridis'
        stopwords = stopwords_,  # 自定义停用词表,可以是列表或者集合
        mask = background_image,  # 词云形状的遮罩图,可以是numpy数组或图像文件路径
        scale = 1,  # 比例尺寸,默认为1,增大该值会增加生成图片的分辨率
        repeat = False,  # 是否重复词语,默认为False,如果为True,同样的词语会显示多次
        collocations = False,  # 是否包括两个词的搭配,默认为True
        regexp = None,  # 用于分词的正则表达式,默认为None
        min_word_length = 1,  # 最小词语⻓度,默认为1
        mode = 'RGB',  # 图片模式,可以为'RGB'或'RGBA'
        relative_scaling = 'auto',  # 词频相对大小的缩放因子,默认为'auto'
    ).generate(txt)
    # 将词云图保存为图片文件
    wordcloud.to_file('./词云图.jpg')
    # 显示词云图
    image = wordcloud.to_image()
    image.show()

# 如果该脚本是主程序,则执行 wordcloud_generate 函数
if __name__ == "__main__":
    wordcloud_generate()

在这里插入图片描述

记录学习过程,欢迎讨论交流,尊重原创,转载请注明出处~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1459269.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深度学习——概念引入

深度学习 深度学习简介深度学习分类根据网络结构划分:循环神经网络卷积神经网络 根据学习方式划分:监督学习无监督学习半监督学习 根据应用领域划分:计算机视觉自然语言处理语音识别生物信息学 深度学习简介 深度学习(Deep Learni…

什么是矩阵的秩?如何计算矩阵的秩?(done)

什么是矩阵的秩?https://search.bilibili.com/all?vt21986927&keyword%E4%BB%80%E4%B9%88%E6%98%AF%E7%9F%A9%E9%98%B5%E7%9A%84%E7%A7%A9%EF%BC%9F&from_sourcewebtop_search&spm_id_from333.1007&search_source5 矩阵本质上是线性方程组。但是方…

Rust可以解决的常见问题

文章目录 前言1. 悬垂指针(Dangling Pointers)修复悬垂指针问题 2. 缓冲区溢出(Buffer Overflow)那么是什么是缓冲区溢出?rust处理缓冲区溢出问题 3. 数据竞争(Data Races)4. 空指针&#xff08…

SICTF Round#3 Web方向 题解WP

100%_upload 题目描述:小茂夫说:一直上传恶意文件尊嘟要生气了,世事莫固守,转变思路求突破 开题,注意有个文件包含 题目把后缀过滤死了,无法上传php后缀文件。文件内容些许过滤,短…

猫头虎分享已解决Bug || Python AI错误处理:IndexError

博主猫头虎的技术世界 🌟 欢迎来到猫头虎的博客 — 探索技术的无限可能! 专栏链接: 🔗 精选专栏: 《面试题大全》 — 面试准备的宝典!《IDEA开发秘籍》 — 提升你的IDEA技能!《100天精通鸿蒙》 …

城市智慧驿站是什么?城市智慧驿站有哪些功能

城市智慧驿站作为一种创新性的社会配套设施,开始在多个城市落地使用,引起了社会的关注。 城市智慧驿站是什么?城市智慧驿站是在智慧城市的背景下,城市智慧驿站智慧公厕成为了一种创新性的社会配套建筑。作为景观式模块化建筑&…

聊聊分库分表

文章导读 背景介绍 随着互联网技术的发展,数据量呈爆炸性增长。大数据量的业务场景中,数据库成为系统性能瓶颈的一个主要因素。当单个数据库包含了太多数据或过高的访问量时,会出现查询缓慢、响应时间长等问题,严重影响用户体验。…

ComfyUI新宠,精准位置生成模型GLIGEN,附下载

GLIGEN 是一种在文本到图像模型中指定对象精确位置的直观方法。自带GUI,操作非常便利,可以精确控制要在什么位置画什么内容,比纯文字描述的RPG-DiffusionMaster更精确。 ComfyUI是一个基于节点的图形用户界面(GUI)工具…

24-k8s的附件组件-Metrics-server组件与hpa资源pod水平伸缩

一、概述 Metrics-Server组件目的:获取集群中pod、节点等负载信息; hpa资源目的:通过metrics-server获取的pod负载信息,自动伸缩创建pod; 参考链接: 资源指标管道 | Kubernetes https://github.com/kuberne…

【论文精读】MAE

摘要 将掩码重建任务从nlp引入到cv,提出非对称掩码自编码器。 框架 概述 如上图,本文提出掩码自编码器,即将给定原始信号的部分观测值的情况下重建原始信号,编码器将观察到的部分信号(没有掩码标记)映射到潜在表示,采…

原型设计工具初学者指南:从入门到精通

产品原型设计工具是设计师制作产品原型的必要工具。产品原型工具可以帮助我们解决许多问题,但产品原型工具的选择已经成为一个大问题。除了我们熟悉的产品原型设计工具Axure外,市场上还有许多有用的产品原型设计工具,如即时设计。本文将分享4…

Unity之闪电侠大战蓝毒兽(简陋的战斗系统)

目录 🎨一、创建地形 🎮二、创建角色 🏃2.1 动画 🏃2.2 拖尾 🏃2.3 角色控制 ​🏃2.4 技能释放 🏃2.5 准星 📱三、创建敌人 🐲3.1 选择模型 🐲3.…

体验一下UE5.3的Skeletal Editor

UE5.3中增加了蒙皮网格骨架编辑工具,用户无需导出Fbx就可以直接编辑蒙皮网格,支持修改绑定姿势的骨骼位置、修改蒙皮权重、对已蒙皮多边形进行编辑以及对蒙皮网格减免等操作,就来体验一下。 1.加载插件 要使用Skeletal Editor功能&#xff…

前端秘法基础式终章----欢迎来到JS的世界

目录 一.JavaScript的背景 二.JavaScript的书写形式 1.行内式 2.嵌入式 3.外部式 三.JS中的变量 1.变量的定义 2.JS动态类型变量 2.1强类型和弱类型 3.JS中的变量类型 四.运算符 五.if语句和三元表达式和Switch语句和循环语句 六.数组 1.创建获取数组元素 2.新增…

消息队列-RabbitMQ:MQ作用分类、RabbitMQ核心概念及消息生产消费调试

1、MQ 的相关概念 1)什么是 MQ MQ (message queue),从字面意思上看,本质是个队列,FIFO 先入先出,只不过队列中存放的内容是 message 而已,还是一种跨进程的通信机制,用于上下游传递消息。在互…

Linux 驱动开发基础知识——APP 怎么读取按键值(十二)

个人名片: 🦁作者简介:学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755qq.com 🦉个人WeChat:Vir2021GKBS 🐼本文由…

【算法 - 动态规划】最长公共子序列问题

在上两篇文章中,我们将 暴力递归 逐步修改成为 动态规划 ,并介绍了有严格 dp表依赖 和无表依赖结构的解题方法。其中,前篇文章中的纸牌博弈问题属于 [L , R]上范围尝试模型。该模型给定一个范围,在该范围上进行尝试,套…

【AI数字人-论文】AD-NeRF论文

文章目录 NeRFAD-NeRF模型NeRF体渲染个体NeRF表示背景和姿态编辑 loss 参考 NeRF 将一个连续的场景表示为一个输入为5D向量的函数,这个函数为NeRF函数,它的输入由一个空间点的3D位置 x ( x , y , z ) \mathbf{x} \left( x, y, z \right) x(x,y,z)和它…

C# Winfrom实现的肺炎全国疫情实时信息图

运行结果: using System; using System.Drawing; using System.Text; using NSoup; using NSoup.Nodes; using System.IO; using System.Net; using System.Text.RegularExpressions; using System.Windows.Forms;namespace Pneumonia {public partial class MainFo…

IO 作业 24/2/20

一、思维导图 二、习题 #include <myhead.h> int main(int argc, const char *argv[]) {FILE *fpNULL;FILE *fqNULL;pid_t pidfork();if(pid>0){if((fpfopen("./text.txt","r"))NULL){perror("fopen error");return -1;} if((f…