python 爬虫学习:抓取智联招聘网站职位信息(二)

在第一篇文章(python 爬虫学习:抓取智联招聘网站职位信息(一))中,我们介绍了爬取智联招聘网站上基于岗位关键字,及地区进行搜索的岗位信息,并对爬取到的岗位工资数据进行统计并生成直方图展示;同时进入每个职位明细页面提取出职位要求部分的页面内容,经数据清洗后将职位要求部分写入txt文件(FILEPATH+FILENAME + ‘-requirements.TXT’);接下来我们要对该txt文件中的数据进行分词及词频分析并生成词频统计图。
可以看到我们对深圳+广州地区的银行+客户经理岗位进行抓取到的数据文件中(深圳+广州地区银行+客户经理岗位统计结果-requirements.txt),显示的是所有岗位明细的要求数据:
python 爬虫学习:抓取智联招聘网站职位信息(二)_第1张图片
因此我们需要使用python的分词库,jieba分词来对以上文本进行分词处理:

# 结巴分词
content = read_txt_file(path)
segment = jieba.lcut(content)
words_df = pd.DataFrame({'segment': segment})
# 剔除停止词
stopwords = pd.read_csv("stopwords.txt", index_col=False, quoting=3, sep=" ", names=['stopword'], encoding='utf-8')
words_df = words_df[~words_df.segment.isin(stopwords.stopword)]`

其中用到了“stopwords.txt”这个停止词文件(可以随便百度一个放到工程目录下即可)来剔除停止词,如果有需要也可以自行在其中添加本次分词中出现的不需要的词汇;
接下来对其进行词频统计:

 #词频统计
 words_stat = words_df.groupby(by=['segment'])['segment'].agg({"计数": numpy.size})
 words_stat = words_stat.reset_index().sort_values(by=["计数"], ascending=False)
 print(words_stat)

得到的words_stat对象就是一个单词及对应词频数的json格式数据,打印出来如下:

segment  计数
销售  37
2     30
行业  17
资格  15
银行  15
岗位  13
经理  12

接下来我们用python的wordcloud库来对以上词频进行可视化,生成词云;

    # 生成词云, 可以用generate输入全部文本,也可以我们计算好词频后使用generate_from_frequencies函数
    word_frequence = {x[0]: x[1] for x in words_stat.head(100).values}
    word_frequence_dict = {}
    for key in word_frequence:
         word_frequence_dict[key] = word_frequence[key]

    wordcloud.generate_from_frequencies(word_frequence_dict)

本篇所有的代码放在jieba_analysis.py文件中:

import pandas as pd
import numpy
import imageio
from wordcloud import WordCloud, ImageColorGenerator
import matplotlib.pyplot as plt
import os
from src.zhilian_config import *


def read_txt_file(path):
    '''
    读取txt文本
    '''
    with open(path, 'r', encoding='utf-8', newline='') as f:
        return f.read()

def jieba_analysis(path):

    # 结巴分词
    content = read_txt_file(path)
    segment = jieba.lcut(content)
    words_df = pd.DataFrame({'segment': segment})
    # 剔除停止词
    stopwords = pd.read_csv("stopwords.txt", index_col=False, quoting=3, sep=" ", names=['stopword'], encoding='utf-8')
    words_df = words_df[~words_df.segment.isin(stopwords.stopword)]
    # 词频统计
    words_stat = words_df.groupby(by=['segment'])['segment'].agg({"计数": numpy.size})
    words_stat = words_stat.reset_index().sort_values(by=["计数"], ascending=False)
    print(words_stat)
    return words_stat

#  词云可视化
def wordcloud_show(words_stat):
    # 设置词云属性
    #设置生成词云的图片原型
    color_mask = imageio.imread('python-img.jpg')
    wordcloud = WordCloud(font_path="simhei.ttf",  # 设置字体可以显示中文
                              background_color="white",  # 背景颜色
                              max_words=200,  # 词云显示的最大词数
                              mask=color_mask,  # 设置背景图片
                              max_font_size=300,  # 字体最大值
                              random_state=42,
                              width=1000, height=860, margin=2,
                              # 设置图片默认的大小,但是如果使用背景图片的话,                                                   # 那么保存的图片大小将会按照其大小保存,margin为词语边缘距离
                              )

    # 生成词云, 可以用generate输入全部文本,也可以我们计算好词频后使用generate_from_frequencies函数
    word_frequence = {x[0]: x[1] for x in words_stat.head(100).values}
    word_frequence_dict = {}
    for key in word_frequence:
         word_frequence_dict[key] = word_frequence[key]

    wordcloud.generate_from_frequencies(word_frequence_dict)
    # 从背景图片生成颜色值
    image_colors = ImageColorGenerator(color_mask)
    # 重新上色
    wordcloud.recolor(color_func=image_colors)
    # 保存图片
    wordcloud.to_file('result\output.png')
    plt.imshow(wordcloud)
    plt.axis("off")
    plt.show()

# 主函数
if __name__ == '__main__':
    words_stat = jieba_analysis(os.path.join(FILEPATH, FILENAME + '-requirements.txt'))
    wordcloud_show(words_stat)

我们使用的词云图片原型(python-img.jpg)如下:
python 爬虫学习:抓取智联招聘网站职位信息(二)_第2张图片
最后运行主函数后,生成的词云图片(路径:result\output.png)如下:
python 爬虫学习:抓取智联招聘网站职位信息(二)_第3张图片
到此,我们对智联招聘网站的职位抓取以及数据分析基本完成。

你可能感兴趣的:(Python,爬虫,python,数据分析)