目录
- 一、数据获取
- 二、词云图语法
- 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()
记录学习过程,欢迎讨论交流,尊重原创,转载请注明出处~