使用python爬取BOSS直聘岗位数据并做可视化(Boss直聘对网页做了一些修改,现在的代码已经不能用了)

使用python爬取BOSS直聘岗位数据并做可视化

  • 结果展示
    • 首页
    • 岗位信息
      • 岗位详情
      • 薪资表
      • 学历需求
      • 公司排名
      • 岗位关键词
      • 福利关键词
  • 代码展示
    • 爬虫代码
      • 一、导入库
      • 二、爬取数据
        • 1、爬取数据代码展示
        • 2、通过selenium打开浏览器
        • (1)打开网页
        • (2)找到需要的数据
    • 三、爬取多页数据
    • 四、存储数据
      • 1、创建mysql数据库
      • 2、插入数据到mysql数据库
  • 数据可视化
    • 一、网站模板
    • 二、flask框架
      • 1、创建flask项目
      • 2、导入网站模板
      • 3、查询数据展示到网页上
    • 三、echarts图表
    • 四、词云

结果展示

首页

我使用Flask框架和网站模板制作了一个简单的首页,
其中数据和岗位数量会根据数据库里的数据显示数据!
在这里插入图片描述

岗位信息

岗位详情

在这里插入图片描述

薪资表

在这里插入图片描述

学历需求

在这里插入图片描述

公司排名

在这里插入图片描述

岗位关键词

在这里插入图片描述

福利关键词

在这里插入图片描述

代码展示

爬虫代码

一、导入库

from selenium import webdriver
import pymysql
from urllib import parse

二、爬取数据

1、爬取数据代码展示

drive = webdriver.Chrome()
KeyWord = input("请输入你要搜索的岗位关键字")
KeyWords = parse.quote(parse.quote(KeyWord))
# print(KeyWords)
drive.get("https://www.zhipin.com/c101270100/?query="+KeyWords+"&page=1&ka=page-")
drive.implicitly_wait(10)
datalist = []
def get_job_info():lis = drive.find_elements_by_css_selector('.job-list li')for li in lis:data = []# 工作名称name = li.find_element_by_css_selector('.job-name a').textdata.append(name)# 工作地点area = li.find_element_by_css_selector('.job-area').textdata.append(area)# 公司名称company_name = li.find_element_by_css_selector('.company-text .name a').textdata.append(company_name)# 公司类型company_type = li.find_element_by_css_selector('.company-text p a').textdata.append(company_type)# 薪资待遇money = li.find_element_by_css_selector('.red').textmoney = ''.join(money).replace("13薪", '').replace('14薪', '').replace('16薪', '').replace('·', '')if (len(money) > 6): #个别薪资格式不统一,强行用下面代替money = "6-8K"money = ''.join(money).replace('-','000-').replace('K','000')data.append(money)# 经验学历exp = li.find_element_by_css_selector('.job-limit p').textdata.append(exp)# 标签tags = li.find_element_by_css_selector('.tags span').textdata.append(tags)# 福利待遇boon = li.find_element_by_css_selector('.info-desc').textdata.append(boon)#tags = [tag.find_element_by_css_selector('.tag-item') for tag in tags]# print(name,area,company_name,company_type,money,exp,tags,boon)datalist.append(data)# nonextpage = drive.find_element_by_css_selector(".page .disabled")print(data)return datalist

2、通过selenium打开浏览器

我使用的selenium库来爬取的数据,要使用selenium库的话首先要去网上下载浏览器驱动。
这里我展示了几个浏览器驱动的下载和使用方法:
Chrome
点击下载chrome的webdriver: http://chromedriver.storage.googleapis.com/index.html
不同的Chrome的版本对应的chromedriver.exe 版本也不一样,下载时不要搞错了。如果是最新的Chrome, 下载最新的chromedriver.exe 就可以了。
把chromedriver的路径也加到环境变量里。

Firefox
Firefox驱动下载地址为: https://github.com/mozilla/geckodriver/releases/
根据自己的操作系统下载对应的驱动即可,使用的话,需要把驱动的路径和火狐浏览器的路径加入到环境变量里面才可以

IE
IE浏览器驱动下载地址为: http://selenium-release.storage.googleapis.com/index.html
根据自己selenium版本下载对应版本的驱动即可,python的话,下载里面的IEDriverServerxxx.zip即可,这个是区分32和64位系统的,根据自己的系统下载即可,需要注意的是,如果要打开IE浏览器的话,需要在浏览器的Internet选项中的安全页里有4个安全选项,Internet、本地Internet、受信任的站点、受限制的站点,这4个里面都有一个启用保护模式,都需要勾选上才可以,还得把驱动的路径加入到环境变量中。
转载于:https://www.cnblogs.com/nancyzhu/p/8589764.html

(1)打开网页

drive = webdriver.Chrome()
KeyWord = input("请输入你要搜索的岗位关键字")
KeyWords = parse.quote(parse.quote(KeyWord))
# print(KeyWords)
drive.get("https://www.zhipin.com/c101270100/?query="+KeyWords+"&page=1&ka=page-")
drive.implicitly_wait(10)

(2)找到需要的数据

通过css选择器选取所需要的文本信息
在这举一个例子,
其他参数和这个类似!

# 工作名称
name = li.find_element_by_css_selector('.job-name a').text

在这里插入图片描述

三、爬取多页数据

我使用css选择器查找到下一页的按钮class=“next"然后用drive.find_element_by_css_selector(”.next")**.click()**模拟用户点击下一页然后跳转到下一页
在这里插入图片描述

通过Boss直聘查找岗位发现,Boss直聘最多只会显示10页的岗位数据,所以我就通过for循环爬取10页数据。但是有些岗位的数量又没有10页,可能有7页,8页,因此我就要判断是否到达了最后一页。
通过观察发现最后一页按钮的class=“next disabled”,
所以我就尝试用drive.find_element_by_css_selector(“.next disabled”)来判断最后一页,但是通过测试发现有点问题。
然后我又优化了一下代码drive.find_element_by_css_selector(“.page .disabled”)这样就可以精准的查找的最后一页的特征。
判断是否是最后一页,如果不是,就点击下一页,如果是就保存数据并且退出循环,最后关闭浏览器。
在这里插入图片描述

if __name__ == '__main__':for page in range(1,11):print(f'正在爬取第{page}页的数据内容')get_job_info()try:drive.find_element_by_css_selector(".page .disabled")saveDB(datalist)breakexcept:drive.find_element_by_css_selector(".next").click()drive.quit()

四、存储数据

1、创建mysql数据库

创建表的sql语句,%s和%(KeyWord)可以通过爬取数据时输入的关键词创建不同名的数据库表

sql = 'CREATE TABLE `%s`(`id` int(11) NOT NULL AUTO_INCREMENT,`name` VARCHAR(255) DEFAULT NULL,`area` VARCHAR(255) DEFAULT NULL,`company_name` VARCHAR(255) DEFAULT NULL,`company_type` VARCHAR(255) DEFAULT NULL,`money` VARCHAR(255) DEFAULT NULL,`exp` VARCHAR(255) DEFAULT NULL,`tags` VARCHAR(255) DEFAULT NULL,`boon` VARCHAR(255) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;'%(KeyWord) #创建数据库表
#创建数据库表
def init_db():conn = pymysql.connect(host='127.0.0.1',user='root',password='123',port=3306,charset='utf8',db='boss') #链接数据库sql = 'CREATE TABLE `%s`(`id` int(11) NOT NULL AUTO_INCREMENT,`name` VARCHAR(255) DEFAULT NULL,`area` VARCHAR(255) DEFAULT NULL,`company_name` VARCHAR(255) DEFAULT NULL,`company_type` VARCHAR(255) DEFAULT NULL,`money` VARCHAR(255) DEFAULT NULL,`exp` VARCHAR(255) DEFAULT NULL,`tags` VARCHAR(255) DEFAULT NULL,`boon` VARCHAR(255) DEFAULT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;'%(KeyWord) #创建数据库表cursor = conn.cursor()cursor.execute(sql)# print(sql)conn.close()

2、插入数据到mysql数据库

在输入数据时先调用init_db() 函数创建表

#插入数据
def saveDB(datalist):init_db() #创建表conn = pymysql.connect(host='127.0.0.1',user='root',password='123',port=3306,charset='utf8',db='boss')#创建游标cursor = conn.cursor()i = 0for ex in datalist:i = i+1#工作名称name = ex[0]#工作地点area = ex[1]#公司名称company_name = ex[2]#公司类型company_type = ex[3]#薪资待遇money = ex[4]#经验学历exp = ex[5]#标签tags = ex[6]#福利待遇boon = ex[7]try:sql = 'insert into `%s`(name,area,company_name,company_type,money,exp,tags,boon)values("{}","{}","{}","{}","{}","{}","{}","{}")'.format(name,area,company_name,company_type,money,exp,tags,boon)%(KeyWord)cursor.execute(sql)conn.commit()print(f"正在保存第{i}条数据")# print(sql)except:print("数据有问题"+name)cursor.close()conn.close()

mysql数据库中的数据

数据可视化

一、网站模板

我使用模板王下载的网站模板。
模板王:http://www.mobanwang.com/
在这里插入图片描述

二、flask框架

1、创建flask项目

在这里插入图片描述

2、导入网站模板

将assets文件夹里面的所有文件导入flask中的static文件夹里面。
将html文件放到templates文件夹里面。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3、查询数据展示到网页上

通过sql语句查询需要的数据显示到网页

def search():if request.form.get('question')==None:kw = 'python'else:kw = request.form.get('question')# if len(kw)==0:# kw = "python"conn = pymysql.connect(host='127.0.0.1',user='root',password='123',port=3306,charset='utf8',db='boss')  # 链接数据库cur = conn.cursor()S = request.values.get('question')sql = 'select * from `%s`'%(kw)cur.execute(sql)item = cur.fetchall()cur.close()conn.close()

在这里插入图片描述
在这里插入图片描述

三、echarts图表

在echarts官网找到想要的图表,然后把图表代码放在html代码中。
要使用echarts的模板还需要下载echarts的js文件
echarts官网:https://echarts.apache.org/zh/index.html

通过mysql查询语句查询工资

# 最低工资conn = pymysql.connect(host='127.0.0.1',user='root',password='123',port=3306,charset='utf8',db='boss')  # 链接数据库cur = conn.cursor()sql = "SELECT AVG(money1) FROM (SELECT SUBSTRING_INDEX(money,'-',1) as money1 FROM `%s`) as t1" % (kw)cur.execute(sql)lows = cur.fetchall()low = []for datas in lows:low.append(datas[0])low = list(map(int, low))cur.close()conn.close()# 最高工资conn = pymysql.connect(host='127.0.0.1',user='root',password='123',port=3306,charset='utf8',db='boss')  # 链接数据库cur = conn.cursor()sql = "SELECT AVG(money1) FROM (SELECT SUBSTRING_INDEX(money,'-',-1) as money1 FROM `%s`) as t1" % (kw)cur.execute(sql)highs = cur.fetchall()high = []for datas in highs:high.append(datas[0])high = list(map(int, high))cur.close()conn.close()avg = (low[0] + high[0]) / 2

将查找到的数据返回到网页

return render_template('table.html', low = low,high = high,avg=avg)

在这里插入图片描述
在这里插入图片描述

四、词云

#岗位关键词conn = pymysql.connect(host='127.0.0.1',user='root',password='123',port=3306,charset='utf8',db='boss')  # 链接数据库cur = conn.cursor()sql = 'select tags from `%s`' % (kw)cur.execute(sql)data = cur.fetchall()text = []for cd in data:text.append(cd[0])# print(item[0])datas = ' '.join(text)print(len(text))cur.close()conn.close()wc = WordCloud(background_color='white',# mask=img_array,font_path="msyh.ttc",# stopwords=exclidewidth=600, height=600,min_font_size=10,max_words=500,max_font_size=400)wc.generate_from_text(datas)# 绘图fig = plt.figure(1)plt.imshow(wc)plt.axis('off')  # 是否显示坐标轴# plt.show()  # 显示生成的词云图片plt.savefig(f'./static/assets/img/{kw}.jpg', dpi=100)  # 输出词云图片

将保存的图片通过img标签显示到网页上
在这里插入图片描述

在这里插入图片描述
最后附上源代码:
python和网页源代码:https://pan.baidu.com/s/1ha1Sq9KlRkg8kqNEBK55jg
提取码:nula
echarts js文件:https://pan.baidu.com/s/1cBxP5yu4kSugGMJTolA9mg
提取码:l5wg

首次创作,还请大家多多包涵
如有建议,欢迎大家提出!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用Python对淘宝用户行为数据的分析

目录 项目前言 一、分析目的 二、数据获取与理解 1.数据来源 2.理解数据 三、具体做法 1.导入并清洗数据 3.1.1.把时间戳改为datetime类型 3.1.2.查看是否存在重复的行数据 3.1.3.查看列中是否存在缺失数据 2.用户维度 3.2.1.一个月内每天pv、uv的变化 ​3.2.2.日A…

小白也可以开发闲鱼自动化工具(自动找爆款)

在闲鱼上,我们的课程里面教给大家,如何找爆款,主要是看数据,分析,那么这个分析过程,能否自动化下? 事实是可以的。这个是这几天写的一个,自动化分析电脑这个词下面的一些爆款&#x…

基于Python+网络爬虫的兼职招聘就业信息数据可视化分析

🔥作者:雨晨源码🔥 💖简介:java、微信小程序、安卓;定制开发,远程调试 代码讲解,文档指导,ppt制作💖 精彩专栏推荐订阅:在下方专栏👇&…

Python抓取电商平台数据 / 采集商品评论 / 可视化展示 词云图...

前言 大家早好、午好、晚好吖 ❤ ~ 我给大家准备了一些资料,包括: 2022最新Python视频教程、Python电子书10个G (涵盖基础、爬虫、数据分析、web开发、机器学习、人工智能、面试题)、Python学习路线图等等 直接在文末名片自取即可&#x…

chatgpt赋能python:Python简单数据采集教程:提高SEO排名的必要工具

Python简单数据采集教程:提高SEO排名的必要工具 在当前数字化时代下,数据已经成为商业流量和营销策略中至关重要的交易资源。因此,数据采集成为了提高SEO排名的必要手段之一。现在,Python由于其强大的数据处理能力被广泛应用于数…

利用 Python 爬虫采集 1688商品详情关键词数据-API

要利用 Python 爬虫采集 1688 商品详情数据,需要先了解 1688 网站的页面结构和数据请求方式。一般使用 requests 库请求网站的数据,使用 BeautifulSoup 库解析网页中的数据。 以下是一个简单的 Python 爬虫采集 1688 商品详情数据的示例代码&#xff1a…

英特尔淘汰迷你电脑,宣布放弃 NUC 业务!

整理 | 屠敏 出品 | CSDN(ID:CSDNnews) 相比造芯这件事,也许有很多人不知道全球知名半导体公司英特尔还在造电脑。 只是有些遗憾的是,据外媒 ServetheHome 报道,英特尔已经开始通知其生态系统的合作伙伴们&…

Web版和客户端哪种SQL工具更好?ChatGPT有话要说

2023年年初公司发布了一款Web版SQL工具,短期内就赢得了众多用户的喜爱和下载。不过,也有SQL用户在评论区中提出自己的观点,认为Web版工具都不可靠,甚至看见Web版工具就劝返… … 工具Web化逐渐成为一种趋势,比如&…

自动批量日文翻译工具,免费日文等小语种翻译互译工具

日文翻译工具具有日文、俄语、韩语、德语等多国小语种翻译,支持日文整篇文章翻译成中文等多种语种,长篇文章翻译后保留原文格式段落,并通过批量内容编辑处理,实现翻译后的文章敏感词删除、插图图片和同义词替换实现本地化翻译。 日…

谁说首富不懂技术!马斯克晒出Twitter2.0架构图

推荐阅读: 《重磅:Spring Boot 3.0 发布!》 《职场霸凌、潜规则,已经这么猖獗了吗。。》 出品 | OSC开源社区(ID:oschina2013) 近日,马斯克前往 Twitter 总部大楼和工程师团队进行了 code revie…

马斯克在中国的44小时!行程、会面与表态,释放出什么信号?

时隔3年,“自带流量”的美国特斯拉首席执行官马斯克再次到访中国,从公布的信息来看,可谓是行程满满。在中美关系似乎春寒料峭之际,马斯克的来华及表态极具象征意义。 马斯克:反对“脱钩断链” 5月30日下午15时30分左右…

TikTok广告投放指南(基础入门)

TikTok 在全球拥有超过5亿活跃用户,目前还属于一个红利期阶段,在 TikTok 号称开放广告投放后,发现先机的各方卖家纷纷涌入,俨然让它成为炙手可热的广告投放池。 TikTok拥有大量低价流量,人气赶超老牌社媒,再…

腾讯广点通广告投放-Web转化数据API自归因文档对接

关于自建H5落地页投放广告的流程总结 文档地址 Web转化数据API自归因文档 流程 转化归因配置 配置页面地址:https://ad.qq.com/atlas/22172840/tool/conversionspec选择网页转化新建网页转化API自归因上报 PS:关于点击监测链接的说明: …

TikTok运营指南:如何通过TikTok广告实现社媒引流?

短视频平台TikTok在海外可以说是越来越火了,很多做跨境电商的开始涌向TikTok这个平台去营销推广,所以如果你每天日思夜想怎样推出一个新产品,怎样以低成本引流客源和提供销售量,都可以利用 TikTok广告来实现社媒引流,目…

为什么选择TikTok广告?TikTok广告投放如何操作?TikTok广告教程

为什么选择TikTok广告? TikTok是发展最快的社交媒体平台,迄今为止下载量已超过20亿。尤其是在这个大流行的世界中,TikTok可以让人们通过创建自己的内容来寻找新颖有趣的方式彼此联系,从而获得新鲜的空气。 尽管TikTok并未发布受众…

开封抖音广告如何有效投放?

抖音广告投放现阶段已经是十分火爆的引流方法引流渠道了,为了更好开展获客,许多面向电脑端顾客的知名品牌,都是会在抖音里开展投放广告,那样,怎样来完成高效的投放广告呢,下列将采取推广流程、方式、价钱&a…

抖音广告投放的展现形式!抖音广告推广可以找谁合作?

抖音推广现在主要是信息流广告,抖音信息流广告靠精准传播、高转化率的特点成为移动广告主要承载模式,抖音短视频平台借助全面竖屏、交互形式原生的优势使得短视频广告的点击率相对传统图文广告提升6-8倍。 抖音效果广告曝光量大幅增长体现了媒介对流量更…

抖音的广告位在哪?抖音信息流广告样式?

抖音广告是属于巨量引擎广告平台的,巨量引擎广告平台包括:今日头条、西瓜视频、火山小视频、抖音四个媒体,投放时可以选择期中某一个媒体进行投放或全部投放,四个媒体的付费方式及价格都一样。 抖音广告形式有四种,分…

如何掌握TikTok广告投放技巧,玩转“TikTok+独立站”新模式?

导读:TikTok已经发展成为全球第六大社交媒体网络,这使其成为一个非常富饶的广告目的地。 跨境卖家如何在 TikTok 上投放广告?在“TikTok独立站”模式中,卖家在 TikTok ads 上投放电商广告,用户点击后将跳转到独立站落…

进来看tiktok如何变现和投放广告

昨天发完这个tiktok shop的注册教程,立刻有人来私信龙哥来问这个平台要怎么做。tiktok shop和传统电商平台不同,他的转化方式更多是基于短视频和直播机制下的。流量才是第一要素,所以今天龙哥就凭着自己对于tiktok shop的经验来给大家讲讲具体…