Python selenium Boss直聘数据爬取(仅供学习使用)

2023-11-13

写在前面,因为最近刚好需要分析行业数据,又在查询时,发现了许多博主写了一些东西,但很多都已经失效了,所以写了那么一篇文章,希望能够帮到大家

注:BOSS直聘数据为js加载数据,故使用selenium

一、pip selenium/bs4、下载chromedriver.exe

下载命令
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple selenium
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple bs4

chromedriver.exe下载网址chormedriver下载地址(注意版本)
注:若下载失败,请自寻原因即解决办法

二、查询数据来源

注:此篇以查询关键字‘python’为数据来源

进入BOSS直聘官网 BOSS直聘
输入python 点击确认
示例图
进入里页,点击下一页,获取连接格式
示例图
示例图
此时发现格式为 https://www.zhipin.com/c101280600/?query=python&page=2&ka=-2

再在chrome浏览器中按【F12】再按【F5】获取相关数据
示例图
可以发现,citysites.json 为对应城市的传输文件,并且其对应的code为上述格式中的c后的数字,因此我们可以将其复制出来,并改为

citys = [{"name":"北京","code":101010100,"url":"/beijing/"},{"name":"上海","code":101020100,"url":"/shanghai/"},{"name":"广州","code":101280100,"url":"/guangzhou/"},{"name":"深圳","code":101280600,"url":"/shenzhen/"},{"name":"杭州","code":101210100,"url":"/hangzhou/"},{"name":"天津","code":101030100,"url":"/tianjin/"},{"name":"西安","code":101110100,"url":"/xian/"},{"name":"苏州","code":101190400,"url":"/suzhou/"},{"name":"武汉","code":101200100,"url":"/wuhan/"},{"name":"厦门","code":101230200,"url":"/xiamen/"},{"name":"长沙","code":101250100,"url":"/changsha/"},{"name":"成都","code":101270100,"url":"/chengdu/"},{"name":"郑州","code":101180100,"url":"/zhengzhou/"},{"name":"重庆","code":101040100,"url":"/chongqing/"},{"name":"佛山","code":101280800,"url":"/foshan/"},{"name":"合肥","code":101220100,"url":"/hefei/"},{"name":"济南","code":101120100,"url":"/jinan/"},{"name":"青岛","code":101120200,"url":"/qingdao/"},{"name":"南京","code":101190100,"url":"/nanjing/"},{"name":"东莞","code":101281600,"url":"/dongguan/"}]

则此时我们已经获取了对应城市数据

三、代码实现

from selenium import webdriver
from bs4 import BeautifulSoup

#无头浏览器开启
driver = webdriver.Chrome('chromedriver.exe')

#城市json
citys = [{"name":"北京","code":101010100,"url":"/beijing/"},{"name":"上海","code":101020100,"url":"/shanghai/"},{"name":"广州","code":101280100,"url":"/guangzhou/"},{"name":"深圳","code":101280600,"url":"/shenzhen/"},{"name":"杭州","code":101210100,"url":"/hangzhou/"},{"name":"天津","code":101030100,"url":"/tianjin/"},{"name":"西安","code":101110100,"url":"/xian/"},{"name":"苏州","code":101190400,"url":"/suzhou/"},{"name":"武汉","code":101200100,"url":"/wuhan/"},{"name":"厦门","code":101230200,"url":"/xiamen/"},{"name":"长沙","code":101250100,"url":"/changsha/"},{"name":"成都","code":101270100,"url":"/chengdu/"},{"name":"郑州","code":101180100,"url":"/zhengzhou/"},{"name":"重庆","code":101040100,"url":"/chongqing/"},{"name":"佛山","code":101280800,"url":"/foshan/"},{"name":"合肥","code":101220100,"url":"/hefei/"},{"name":"济南","code":101120100,"url":"/jinan/"},{"name":"青岛","code":101120200,"url":"/qingdao/"},{"name":"南京","code":101190100,"url":"/nanjing/"},{"name":"东莞","code":101281600,"url":"/dongguan/"}]

#每个城市爬取
for city in citys:

	#只获取前十页
    urls = ['https://www.zhipin.com/c{}/?query=python&page={}&ka=page-{}'.format(city['code'],i,i) for i in range(1,11)]

    for url in urls:

        driver.get(url)
		
		#获取源码,解析
        html=driver.page_source
        bs = BeautifulSoup(html,'html.parser')

        job_all = bs.find_all('div', {"class": "job-primary"})
        # print(job_all)

        for job in job_all:
        	#工作名称
	        job_name = job.find('span', {"class": "job-name"}).get_text()
			#工作地点
	        job_place = job.find('span', {'class': "job-area"}).get_text()
			#工作公司
	        job_company = job.find('div', {'class': 'company-text'}).find('h3', {'class': "name"}).get_text()
			#工作薪资
	        job_salary = job.find('span', {'class': 'red'}).get_text()
			#工作学历
	        job_education = job.find('div',{'class':'job-limit'}).find('p').get_text()[-2:]
			#工作标签
	        job_label = job.find('a', {'class': 'false-link'}).get_text()
	
	        #注:csv编码需更改为utf-8(若编码不为UTF-8)另:下载后需用记事本打开再另存为时将编码改为带BOM的UTF-8格式
	        with open('job.csv','a+',encoding='UTF-8-SIG') as fh:
	
	            #处理避免读取歧义
	            fh.write(job_name.replace(',','、') + "," + job_place + "," + job_company + "," + job_salary + "," + job_education +','+ job_label + "\n")
	
	            #检验成功写入、并成功获取数据
	            print('工作:' + job_name + ",地区:" + job_place + ",公司:" + job_company + ",薪资:" + job_salary + ',学历:'+ job_education +",标签:" + job_label,end="\n")

#关闭无头浏览器,减少内存损耗
driver.quit()

注:此处py文件需与chromedriver.exe同目录下,boss直聘网不得处于登录状态

运行完毕后,会在同目录下出现job.csv文件,此时可查询并分析(若有编码问题请自寻解决)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python selenium Boss直聘数据爬取(仅供学习使用) 的相关文章

随机推荐

  • TypeError: __init__() got an unexpected keyword argument ‘autocompletion‘

    1 TypeError init got an unexpected keyword argument autocompletion 在使用mmclassification的时候会出现该错误 看起来是哪里的自动补全出了问题 在报错的文件里会
  • 如何快速下载Python解决在官网下载缓慢问题以及如何安装Python

    不知道你们碰到过这样的情况没有 在Python官网下载Python却很慢 刚开始我还以为是被限速了 后来才了解到这是因为Python官网的服务器是在外网 所以呢那我找到了一个Python的国内下载网址 CNPM Binaries Mirro
  • 史上最全SQL基础知识总结(理论+举例)

    div class markdown views div
  • 当了程序员才知道的事情

    坐在靠墙角的程序员王二狗 如果这哥们键盘敲的啪啪响 时不时面带笑容 很可能是在跟前台 测试 UI 美工 产品的小美眉聊今天又发现楼下新开的餐馆 如果嘴角带弧度 手不放在键盘上而是一直抓着鼠标擦滚轮且显示器角度靠内 那一定是摸鱼刷某乎 如果这
  • JDK 1.8中为什么HashMap使用红黑树而不是普通的AVL树

    概述 在JDK 1 8之前 HashMap使用的是数组和链表的组合来解决哈希冲突 然而 当链表过长时 查询性能会受到影响 为了解决这个问题 JDK 1 8引入了红黑树作为链表的替代结构 提高了HashMap的性能 为什么选择红黑树而不是其他
  • cesium地图

    cesium地图 开源基于js的3D地图框架 可视化框架 支持2D 3D 5D形式的地理数据 可以绘制几何图形 高亮区域 支持导入图片 使用webGL来进行硬件加速图形 使用是不需要任何插件来支持 但是浏览器必须支持webGl 1 配置视窗
  • 红蜘蛛 v6.2.1160解除键鼠屏蔽以及实现窗口化

    目录 声明 破解软件下载 环境 实现效果 简单使用方法 注意事项 1 还原 2 破解前已经被控制 3 调整窗口后窗口黑掉 4 自动替换补丁失败 5 基本原理 声明 自制 仅供学习交流 侵删 破解软件下载 https download csd
  • 关于Ubuntu ssh远程连接报错和无法root登录的解决方法

    一 使用远程工具连接Ubuntu提示报错 MobaXterm v22 0 版本直接可以远程连接上 前提是sshd服务是开启的状态 注意 须使用最新版本或较高版本的ssh远程连接工具 进行ssh连接 若使用较低版本的ssh远程连接工具 会报错
  • 安全编码规范-小羊的记录本

    目录 安全编码规范 安全目标 数据校验 SQL注入 OS注入 目录遍历攻击 XML注入 正则注入 日志注入 敏感数据保护 异常暴露敏感信息 线程同步 IO操作 反序列化 平台安全 线程同步 IO操作 反序列化 平台安全 安全编码规范 安全目
  • 网站弹窗公告一天弹窗一次源码简单好看

    介绍 简单好看到爆炸 上传到根目录使用即可 一天只弹一次 使用cookie记录 网盘下载地址 http kekewangLuo net T2ztQxJWt16 图片
  • kullback-leibler distance的计算(matlab)

    KL distance是用来计算两组离散数值的信息量 相对熵 的 一般针对的是离散数据 可以用来做特征筛选 但如果是连续数据 则先要离散化求每个bin内的frequency后再计算KL distance KL distance的解释 1 h
  • linux 文件测试运算符

    文件测试运算符用于检测 Unix 文件的各种属性 属性检测描述如下 b file 检测文件是否是块设备文件 如果是 则返回 true b file 返回 false c file 检测文件是否是字符设备文件 如果是 则返回 true c f
  • 板端电源硬件调试BUG

    项目场景 问题1 MC34063A负压电路调试 MC34063A是一款常用于产生负压的开关电源 但是去年我花PCB板子进行调试 负压产生的电压是0V 问题2 采用MP2359开关电源产生5V电压 问题3 这一步调试成功 但是AMS1117
  • Linux centos8 docker中安装postgresql12.4及远程访问设置

    centos 8 0 docker 安装postgresql 12 4 及远程连接设置 一 docker 安装 postgresql 12 4 1 拉取镜像 docker pull postgres 12 4 2 运行容器 docker r
  • VMware Workstation Pro 17 虚拟机安装Ubuntu18.4.06

    VMware Workstation Pro 17 虚拟机安装Ubuntu18 4 06 1 下载Ubuntu镜像文件 2 安装VMware Workstation Pro 17 3 使用VMware创建虚拟机 4 安装Ubuntu18 4
  • YC 带你快速入门区块链

    1 介 绍 如果你在这里 我们假设你是一个受区块链影响的开发者 黑客 你确信你了解它是如何工作的 现在你很想知道区块链对你和你所掌握的开发者技能的意义 如果你需要更多的底气 我们建议你先从比特币白皮书和以太坊白皮书开始 比特币白皮书学习资料
  • 权限系统控制到按钮级别开源推荐 Spring Boot-Shiro-Vue

    再搞权限系统的时候 权限控制到菜单很容易 但是很多情况要控制到按钮接口级别 这个时候设计就要研究下了 方案好几种 这里推荐一个不错的开源方案 大伙可以参考学习下 Spring Boot Shiro Vue实现 github开源地址及系统演示
  • JavaWeb-云日志

    前不久 我在哔哩哔哩上学了一个教写了云日志web项目 但讲的不全 我自己学习过程中 做个笔记 也分享给大家 源码链接在最后面 目录 1 数据库设计 2 登录模块 3 个人中心模块 4 类别模块 5 日志模块 6 数据报表模块 7 主页模块
  • Android SIM卡识别加载流程

    文章目录 总述 代码路径 UICC框架 SIM卡识别加载流程 日志分析举例 总述 本文基于Android N Android 7 首先要知道SIM卡一般是挂载在CP侧 MODEM侧 的 由MODEM给予真正的上电 识别 通信等 然后通过AP
  • Python selenium Boss直聘数据爬取(仅供学习使用)

    写在前面 因为最近刚好需要分析行业数据 又在查询时 发现了许多博主写了一些东西 但很多都已经失效了 所以写了那么一篇文章 希望能够帮到大家 注 BOSS直聘数据为js加载数据 故使用selenium 一 pip selenium bs4 下