前言
百度百科对词云的解释:“词云”就是对网络文本中出现频率较高的“关键词”予以视觉上的突出,形成“关键词云层”或“关键词渲染”,从而过滤掉大量的文本信息,使浏览网页者只要一眼扫过文本就可以领略文本的主旨。python提供了制作词云图的jieba和Wordcloud库,本文爬取交大就业信息网近十年的宣讲会公司信息,做出词云图,以期发现交大宣讲会中哪种公司的词频最高。
1.准备工作
利用pip安装jieba和wordcloud
pip install jieba
pip install Wordcloud
可能遇到的问题:pip安装源默认为国外,因为国内有“墙”的原因,网速会特别慢,很容易报read time out错误。
解决方法:这时候可以切换国内的pip源进行安装。推荐清华大学镜像:
可以在使用pip的时候在后面加上-i参数,指定pip源
pip install jieba -i https://pypi.tuna.tsinghua.edu.cn/simple
关于这两个库的使用可以自行百度,很简单。
2.数据爬取
打开交大官网获取招聘宣讲页的URL,要爬取的信息为下图框中内容。
对网页进行分析找到包含公司名称的网页标签位置:
很容易就获取到了,剩下的就是和上篇文章的套路一样了,直接上代码:
import requests
from bs4 import BeautifulSoup
import time
#以创建写模式把爬取到的数据保存到company.txt文件中
with open('C:/Users/ASUS/Desktop/company.txt','x',encoding='utf-8')as f:
#爬取675页宣讲会公司数据
for i in range(1,676):
url = 'http://job.xjtu.edu.cn/listMeeting.do?page={}&filter=%7b%22is4practice%22%3a%22-1%22%2c%22status%22%3a%22-1%22%7d&ext=&sign='.format(i)
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36'}
response = requests.get(url,headers = headers)
html = response.text
soup = BeautifulSoup(html,'html.parser')
#做一个有节操的爬手,睡眠一秒再发请求,防止请求太频繁ip被限制
time.sleep(1)
companys = soup.find_all('td',class_="btlist")
for div in companys:
company =div.get_text().strip()
f.write('{} '.format(company))
运行程序,大概十分钟左右,交大近十年675页上万条宣讲会公司信息就爬取下来了。验证一下爬的信息是否完整:
可以看到网页中的最后一条数据和txt文件中的是一致的,证明爬取信息完整。
3.词云图制作
直接上代码吧,里面有注释:
import jieba
from wordcloud import WordCloud
#排除词列表,剔除无效词语
excludes = {"股份","有限","责任","集团","公司","招聘","公告","有限公司","有限责任公司","一间","1间","2间",
"有限公司校园招聘","面向西安交大毕业生","面向交大毕业生","面向西安交大","中国","校园招聘","取消",}
#以只读模式打开刚爬取的txt文档
f = open('C:/Users/ASUS/Desktop/company.txt','r',encoding='utf-8')
txt = f.read()
f.close()
words = jieba.lcut(txt)#使用精确分词模式进行分词
newtxt = ''.join(words)#利用空格连接精确分词后的词语
#对词云图参数进行设置,以newtxt文本生成词云
wordcloud = WordCloud(background_color="white",#设置图片背景颜色
width=800,#设置图片宽度
height=600,#设置图片高度
font_path="C:/Windows/Fonts/simfang.ttf",#指定字体文件的完整路径,如果不设置可能显示不了中文
max_words=100,#词云中最大词数
max_font_size=80,#词云中最大的字体号数
stopwords = excludes,#被排除的词列表
).generate(newtxt)
wordcloud.to_file('company.png')
运行程序后就生成了一张公司词云图:
有点丑,,,,而且无效词语还得进一步剔除,可以看出“北京”,“上海”,“深圳”三个词频最高,可知这三个城市的公司偏向去交大做宣讲。。。等等,还得考虑每个城市做宣讲会的公司基数,中国综合实力排名前三的城市当然在公司数量上有绝对的优势,所以这三个城市的公司词频最高并不奇怪,所以以上内容都是瞎分析。