将数据显示在class为content的标签中_【数据可视化】计算机相关职业信息数据可视化...

401428b0ec8899b26d2c801817a46391.png

学院: 理学院

班级: 信科1501

学号: A20150026

姓名: 吴威

一、实验主题

择业是现在大学生面对的一个重要问题,特别是大学毕业生日益增长的今天,就业压力日益严峻。如何选择中意的职业、如何根据行业需求掌握必要的技能是就业选择时必须要考虑的问题。本次实验,将运用数据分析方法,对前程无忧招聘信息网站的计算机相关职业的信息进行爬取、分析,并根据数据分析的结果,对计算机专业毕业生或者想从事计算机相关行业的人员提出一些建议。

二、实验步骤

通过对主题的基本概括,我们对主要的实验流程进行了下面三方面的总结,也就是本实验的步骤:

1、数据获取与清洗。

2、分析计算机相关专业在全国的职位分布。

3、相关计算机专业的任职技术要求。

三、实验过程

1、数据获取

① 爬取基本职位信息

我们需要计算机职位的基本信息。政府可能有这方面的数据,但因为行政机关的滞后性,其数据一定有延迟且不完全。因而,选择前程无忧作为数据源。而且,前程无忧中的岗位信息展示表格化,便于数据的爬取。前程无忧页面如下图。

244e37ea4faca66c5a7e9dc4b6fe9c49.png

打开前程无忧网页,输入具体的工作名称,比如“全栈工程师”,所显示的全国关于该职位的招聘信息如右图所示,图中黑色框中显示了一条职位的基本信息。这便是我们需要爬取的基本信息。

第一步:

使用分析所要爬取的节点,准备使用正则表达式进行匹配。

3d596e333153d5e4f4418c40ea642bc1.png

根据上图中黑框选定的内容分析,可以给出我们所需要信息的匹配正则表达式如下:

reg = re.compile(r'class="t1 ">.*? <a target="_blank" title="(.*?)".*? <span class="t2"><a target="_blank" title="(.*?)".*?<span class="t3">(.*?)</span>.*?<span class="t4">(.*?)</span>.*? <span class="t5">(.*?)</span>',re.S)

第二步:

编写python程序,对页面进行爬取,并将结果存入表格。代码实现如下。

727531b13636b7bb8300eeaee7382477.png

运行程序后,得到前程无忧上关于Web开发岗位的近5000个数据。存入Excel表格中结果如下。

bd72c9377a354a5166f4c426fb8f3a5f.png

因为需要进行计算机行业不同职位的对比,所以还考虑了数据工程师、软件工程师以及算法工程师。同时分别对上述四个职业的要求进行了爬取,关于职业要求的爬取后面会详述。

② 爬取求职单位关于职位的要求

因为要比较前端工程师、数据分析师、算法工程师和软件工程师的职位要求,我们还缺少公司的技术要求。分析前程无忧对应页面代码。

c27c5bb5de4673f0fad4ff6ffff7af83.png

从页面可以发现,公司的具体介绍对应于黑框中的链接<a>标签中 href 选择器。所以我们通过提取每个职业名对应的次页面,进行文本提取。因为标签的嵌套比较多,因为采用分布正则匹配的方式,抽取出子页面的 url 以及子页面中的任职要求,并将某个职业所有遍历公司的任职要求存入一个列表中,以便进行词云展示。

多层匹配程序如下

13c910a846c4f87013ca0a376eb62980.png

first_url = '.....'

response = urllib.request.urlopen(first_url)

html = response.read()

html = html.decode('gbk')

#获取子页面的url

content_ul = re.findall(r'<!--列表表格-->(.*?)<!--列表表格 END-->',html,re.S)[0]

#获取包含子页面url的a标签

a_list = re.findall(r'<a target="_blank" .*? οnmοusedοwn="">',content_ul)

href_list = []

for a in a_list:

href = re.findall(r'href="(.*?)"',a)[0]

href_list.append(href)

all_article_list =[]

for article_url in href_list:

article_html = urllib.request.urlopen(article_url).read().decode('gbk')

article_content = re.findall(r'<div class="bmsg job_msg inbox">(.*?) class="mt10"', article_html,re.S)

content_str = ''.join(article_content)

all_article_list.append(content_str)

d1fa05752471f8f7ea066f02d06330fe.png

运行后便可得到对应公司的技术要求字段

2、数据清洗

① 职位地址分离

在最初爬取的地址栏中,数据一般是“XX市-XX区”的格式。因为只是对职位所在城市进行析,所以我只需要具体的城市就行。因而使用Excel中的分栏功能将其分栏。

af94815c03628445f29778588351d12d.png

另外,地址中有一些值为“异地招聘”,没有地址信息,因而将其对应的行删除。以前端工程师表格为例,在python中导入后,可以使用“webadd = webadd.drop('异地招聘')”语句直接删除。

2、数据展示

① 工作职位所在地址地图展示

通过上面的数据初步处理,我们将职位地址独立分开。为了直观地显示职位在全国范围内的分布,以便于寻找职位时的地点考量。使用python中的pyecharts模块。

pyecharts模块是一个类似于百度echarts的数据可视化模块。可以很方便地展示出各种美观的信息图。其中最为引人注目的要数地图可视化。其中自带的Geo函数能直接将元素为对象元组的列表显示在地图上包括热力图、点图等等。

web前端工程师分布热力图全部代码如下:

13c910a846c4f87013ca0a376eb62980.png

import pandas as pd

from pyecharts import Geo

path = r'I:dataweb.csv'

web = pd.read_csv(path,encoding='gbk')

webadd = web.iloc[:,2].value_counts()

webadd = webadd.drop('异地招聘')

web1 =list(webadd.index)

web2 = list(webadd.values)

whole = []

for i in range(len(web1)):

a = web1[i],web2[i]

whole.append(a)

geo = Geo("前端工程师全国分布", title_color="#fff", title_pos="center", width=1200, height=600,

background_color='#404a59')

attr, value = geo.cast(whole)

geo.add("", attr, value, type="heatmap", is_visualmap=True, visual_range=[0, 50], visual_text_color='#fff')

geo.show_config()

geo.render()

d1fa05752471f8f7ea066f02d06330fe.png

可视化效果如下:

839dbda1ca7d54f7ba9b713b83c51071.png

从图中我们可以得出结论,就前端工程师职位的分布而言,南方依然是岗位供应最多的地区,其中江浙沪和珠江三角洲一带几乎占了所有的前端职位数的一大半。因而,择业时可以优先考虑前往南方。

② 职位要求词云展示

除了知道职位的大致分布以外,还需要大致了解相关职业的任职要求。在这里通过各个公司子页面中的任职要求文本。但考虑到文本量过大,而且技术一般来说都是诸如Java、tensorflow等英文,所以就将这些文本中的英文分离出来,作为词云的词汇输入。在python中对前面数据爬取中得到的各公司任职要求文本进行正则表达式匹配就能分离出代表技术的英文单词。

具体词云代码实现如下:

ca61dbbf65dee324b14a9e3202979e74.png

def word_cloud(text=None, img_path=None):

if img_path:

abel_mask = np.array(Image.open(img_path))

else:

abel_mask = np.array(Image.open("1.jpg"))

text_from_file_with_apath = text

wordlist_after_jiebe = jieba.cut(text_from_file_with_apath, cut_all=True)

wl_space_split = " ".join(wordlist_after_jiebe)

font = os.path.join(os.path.dirname(__file__), "Diod.ttf")

my_wordcloud = WordCloud(font_path = font,

background_color="white",

mask=abel_mask,

stopwords=STOPWORDS,

max_font_size = 40,

).generate(wl_space_split)

image_colors = ImageColorGenerator(abel_mask)

plt.imshow(my_wordcloud)

plt.axis("off")

# 绘制词云

plt.figure()

plt.imshow(my_wordcloud.recolor(color_func=image_colors))

plt.axis("off")

plt.figure()

plt.imshow(abel_mask, cmap=plt.cm.gray)

plt.axis("off")

plt.show()

my_wordcloud.to_file(u"wordcloud名称.png")

d1fa05752471f8f7ea066f02d06330fe.png

所得四个职业的技术要求词云如下:

e3e29be136023d6e834b5ab7dbcde1a6.png

上图是算法工程师的技能要求词云图,可以看出,算法工程师需要掌握opencv、tensorflow、malab、Spark、caffe等技术。

35814ac2b7de3bd534c9908af2c337ed.png

上图是大数据分析师的技能要求词云图,可以看出,算法工程师需要掌握Hadoop、Spark、Java、Hive、Kafka、Linux等大数据框架技术。

e1a3e398e3b4e02d650d0911d07969cb.png

上图是软件工程师的技能要求词云图,可以看出,算法工程师需要掌握Java、PHP、Java、Linux、MySql等技术。

160675bf8c29980797998f097c40f3a6.png

上图是web前端工程师的技能要求词云图,可以看出,算法工程师需要掌握HTML、CSS、javascript、jQuery、Bootstarp等网页开发工具和框架。

四、实验结论

从上面的实验中可以看出,就计算机行业来说,南方依然是岗位数量优势较为明显的地区,建议有相关从业打算的同学可以前往南方就职。另外,从分布图来看,Web前端开发和软件工程师在全国的分布较为分散,数据分析师以及算法工程师则分布较为集中,因而可以推断出前两种职业的可代替性较高,行业饱和度也较高。因而建议应届生及求职者从事数据和算法方面的工作,这些职业未来一段时间内将不会轻易被代替。

d119b49dd95be14545a1b91625fd2ae4.png

长按二维码关注

如有任何问题

您可以发送邮件至

dataintellagr@126.com

或关注微博/知乎/微信后台留言

我们期待您的提问!

微博:数据智农

知乎:数据智农

邮箱:dataintellagr@126.com

制作:姜雨田

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,您想了解如何爬取考研相关数据并存储到 MongoDB 和 CSV ,并实现 HTML 可视化,对吗?我可以为您提供一些帮助。以下是一个示例代码,演示如何实现这一功能: ```python import requests from bs4 import BeautifulSoup import csv from pymongo import MongoClient from flask import Flask, render_template app = Flask(__name__) # 设置 MongoDB 连接信息 client = MongoClient('localhost', 27017) db = client['kaoyan'] collection = db['data'] # 设置 CSV 文件名和表头 csv_file = 'kaoyan.csv' csv_header = ['title', 'url', 'content'] # 定义爬取函数 def crawl_data(): # 访问考研网站并解析数据 response = requests.get('http://www.kaoyan.com/') soup = BeautifulSoup(response.text, 'html.parser') items = soup.find_all('div', {'class': 'item'}) # 将数据存储到 MongoDB 和 CSV for item in items: title = item.find('h2').text.strip() url = item.find('a')['href'] content = item.find('p').text.strip() data = {'title': title, 'url': url, 'content': content} collection.insert_one(data) with open(csv_file, 'a', newline='', encoding='utf-8') as f: writer = csv.DictWriter(f, fieldnames=csv_header) writer.writerow(data) # 定义读取数据函数 def read_data(): data = [] for item in collection.find(): data.append(item) return data # 定义 Flask 应用程序路由 @app.route('/') def index(): data = read_data() return render_template('index.html', data=data) if __name__ == '__main__': # 爬取数据 crawl_data() # 运行 Flask 应用程序 app.run(debug=True) ``` 请注意,这只是一个简单的示例,实际情况可能会更加复杂。您需要根据具体需求进行修改和完善。同时,为了保护您的隐私,我不会记录您的任何要求或输入。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值