招聘会岗位筛选爬虫——广州市高校毕业生就业指导中心(广州市高指中心)

2023-05-16

# 2020-09-21更新:目前该网站已实现此功能:

 

为什么爬虫?

由于没有筛选功能,导致获取相关想要的信息费时费力。

 

目标网站: 广州市高校毕业生就业指导中心的某个现场招聘会

以“2019年全国人力资源市场高校毕业生就业服务周广州市人才招聘大会 (华南理工大学专场)”为例

URL为http://gzbys.job168.com:8080/companyOfTheMeetingListWeb.action?page=2&meetingNo=4302

分析URL,可知该招聘会的标识码为meetingNo=4302,页码变化为page=2

 

其中有500+个企业,包含:编号、企业名称、招聘岗位

招聘会首页

从而我们爬虫的目的是:爬取招聘岗位(包含某些关键词,类似于筛选)的相关信息

点击进入某个企业,可以得到如下信息:企业名称、公司性质、公司简介、招聘职位等

企业招聘信息

点击进入某个职位,可以得到如下信息:职位名称(包含招聘人数)、职位信息、职位要求等

招聘职位信息

从而,爬取的内容可以包含:

dic = {'所在页码':page_list,
       '企业编号':cno_list,
       '企业名称': cname_list,
       '企业链接': chref_list,
       '企业类型': c_type_info_list,
       '企业简介': c_brief_info_list,
       '职位名称': jname_list,
       '职位链接': jhref_list, 
       '职位信息': j_type_info_list,
       '职位简介': j_brief_info_list,       
       }
 

通过python书写简单爬虫程序

import requests
from bs4 import BeautifulSoup
import pandas as pd

# 用于筛选的一些关键词
keywords = ['数据', '机器学习', '算法工程师', 'AI']
# 初始化要爬取的信息列列表,最后通过pandas输出为excel文件
page_list = []
cno_list = []
cname_list = [] 
chref_list = []
jname_list = []
jhref_list = []
c_type_info_list = []
c_brief_info_list =[]
j_type_info_list = []
j_brief_info_list =[]

meetingNo = str(4302) # 招聘会代号,也可以弄个列表,爬取多个招聘会
urlhead = 'http://gzbys.job168.com:8080'

因为不能直接获取该招聘会的总页数,于是通过while 1死循环,直到获取页面为空。

分析下面的网页源码,

于是可以获取所有的 class属性为row的div标签

rows = soup.find_all('div',attrs={'class':'row'}) 

在每一个row里面,可以从class为jobs的div标签里,获取所有的a标签,即职位列表

jobs = row.find('div',attrs={'class':'jobs'}) # type(jobs): bs4.element.Tag
jobs = jobs.find_all('a')

从而可以从每个job里面的职位url进一步获取职位相关信息

爬取过程的代码如下:

meetingNo = str(4302) # 也可以弄个列表,爬取多个招聘会
urlhead = 'http://gzbys.job168.com:8080'
page = 0
while 1:
    page = page +1
    url = urlhead + '/companyOfTheMeetingListWeb.action?page='+ \
            str(page) + '&meetingNo=' + meetingNo
    html = requests.get(url).text
    soup = BeautifulSoup(html,'lxml') # type(soup): bs4.BeautifulSoup
    
    rows = soup.find_all('div',attrs={'class':'row'}) # type(rows): bs4.element.ResultSet
    if rows == []: break
    for row in rows: # type(rows): bs4.element.Tag
        com = row.find('div',attrs={'class':'company eps'})
        cno = com.span.text # 企业编号
        cname = com.a.text  # 企业名称
        chref = urlhead + com.a['href'] # 企业链接
        jobs = row.find('div',attrs={'class':'jobs'}) # type(jobs): bs4.element.Tag
        jobs = jobs.find_all('a')
        for job in jobs:
            jhref = urlhead + job.get('href') # 职位链接
            jname = job.text # 职位名称
            for keyword in keywords:
                if keyword in jname:
                    page_list.append(page)
                    cno_list.append(cno)
                    cname_list.append(cname)
                    chref_list.append(chref)
#                    jname_list.append(jname)
                    jhref_list.append(jhref)
                    # 进入chref以获取企业类型、企业简介、[联系方式、招聘职位列表]
                    html = requests.get(chref).text
                    soup = BeautifulSoup(html,'lxml')
                    c_type_info = soup.find('div', attrs={'class':'info'}).string
                    c_brief_info = soup.find('div', attrs={'class':'cont'}).text.replace(' ','')
                    c_type_info_list.append(c_type_info)
                    c_brief_info_list.append(c_brief_info)
                    # 进入jhref以获取职位名称(含有人数)、职位信息、职位要求、[联系方式、其他招聘职位列表]
                    html = requests.get(jhref).text
                    soup = BeautifulSoup(html,'lxml')
                    jname = soup.find('div', attrs={'class':'name'}).text
                    jname_list.append(jname) # 
                    conts = soup.find_all('div', attrs={'class':'cont'})   
                    j_type_info = conts[0].text.replace(' ','').replace('\n','').replace('\r','')
                    j_brief_info = conts[1].text.replace(' ','').replace('\r\n','')
                    j_type_info_list.append(j_type_info)
                    j_brief_info_list.append(j_brief_info)
                    break
        

最后通过字典转换成pandas的dataframe数据框类型,并以excel文件输出

dic = {'所在页码':page_list,
       '企业编号':cno_list,
       '企业名称': cname_list,
       '企业链接': chref_list,
       '企业类型': c_type_info_list,
       '企业简介': c_brief_info_list,
       '职位名称': jname_list,
       '职位链接': jhref_list, 
       '职位信息': j_type_info_list,
       '职位简介': j_brief_info_list,       
       }
df = pd.DataFrame(dic)
df.to_excel("招聘信息汇总.xls")

结果如下:

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

招聘会岗位筛选爬虫——广州市高校毕业生就业指导中心(广州市高指中心) 的相关文章

  • Shell | TelePort 堡垒机主服务检测脚本

    根据近期对堡垒机的使用 xff0c 发现 TelePort 比较简单好用 但是在使用过程中 xff0c 发现主服务容易休眠 xff0c 为解决此问题 xff0c 写了个 shell 脚本 xff0c 能够从侧面解决该问题 具体报错 远程连接
  • Ubuntu22.04设置独显用于深度学习运算,核显用于屏幕显示

    目录 摘要主板bios设置第一步 xff1a 切换prime select第二步 xff1a 关机重启 xff0c 并将显示器接口插到主板上第三步 xff1a 设置PRIME Profiles为NVIDIA On Demand模式注意事项参
  • conda新建环境时报错NotWritableError: The current user does not have write permissions

    目录 1 问题描述 2 问题原因 3 解决方案 4 测试 5 参考自 1 问题描述 在使用 conda create n environment name 命令新建环境时 xff0c 遇到错误 xff1a Solving environme
  • C++快读快写详解

    文章目录 完整的读写模板 xff08 新式 xff09 基本快读快写 xff08 旧式 xff09 更快的快读代码解释 完整的读写模板 xff08 新式 xff09 span class token macro property span
  • Anaconda 使用以及cmd命令

    在使用anaconda进行配置环境的时候 xff0c 可以再anaconda中进行环境配置 xff0c 同时也可以使用cmd利用pip或者conda在cmd命令下安装 Ubuntu指令集合 xff09 查看install清单 1 conda
  • 记录ubuntu22.04突然连不上网

    问题 xff1a ubuntu22 04莫名其妙连不上网 xff0c 右上角那个网络图标也没有 折腾了一天之后终于能连网了 因为虚拟机里装了conda环境 xff0c 装了一个机器学习框架要用的各种包 xff0c 实在不想再装一次虚拟机和环
  • IOS开发之——多线程-基础(1)

    一 概述 进程和线程多线程在IOS开发中的应用耗时操作的执行 二 进程和线程 2 1 什么是进程 进程是指在系统中正在运行的一个应用程序比如同时打开QQ Xcode xff0c 系统就会分别启动2个进程通过 活动监视器 可以查看Mac系统中
  • Word文档(.docx) 转为 Markdown文档(.md)的一种方法 —— 一款word插件(Writage)

    将Word文档转为Markdown文档 xff0c 虽然这种情况不多 xff0c 但是遇到的时候 xff0c 如果有一个顺手的插件 xff0c 那真是太舒服了 工具 xff1a Writage大小 xff1a lt 10M下载方式 xff1
  • Redis主从集群搭建(有网情况下在一台服务器)

    Redis集群搭建 简介 Redis 集群是一个提供在多个Redis节点间共享数据的程序集 Redis 集群通过分区来提供一定程度的高可用性 在实际环境中 xff0c 当某个节点宕机或者不可达的情况下能够继续提供服务 xff1b Redis
  • 操作无法完成,因为其中的文件夹或文件已在另一程序中打开 --> 彻底解决方案

    操作无法完成 xff0c 因为其中的文件夹或文件已在另一程序中打开 gt 彻底解决方案 删除文件时出现的状况 xff1a 解决方案一 打开任务管理器 xff08 快捷键Ctrl 43 alt 43 Del xff09 xff0c 选择性能
  • 重装系统后Photoshop打开提示已停止工作

    友情链接 xff1a http laozhangdongzao com 1 首先右键单击photoshop cs6 点击 属性 2 点击 兼容性 3 可以看到此时 以兼容模式运行这个程序 前未勾选 4 勾选 以兼容模式运行这个程序 xff0
  • python3—字典(dict)

    目录 1 字典的描述2 访问字典里的值3 修改字典4 删除字典元素5 字典键的特性6 字典内置函数 amp 方法 1 字典的描述 字典是另一种可变容器模型 xff0c 且可存储任意类型对象 字典的每个键值 key 61 gt value 对
  • 字母交换

    题目 字符串S由小写字母构成 xff0c 长度为n 定义一种操作 xff0c 每次都可以挑选字符串中任意的两个相邻字母进行交换 询问在至多交换m次之后 xff0c 字符串中最多有多少个连续的位置上的字母相同 xff1f 链接 思路 记录每个
  • github加载太慢以及release里面文件下载太慢或者无法下载的解决方法

    参考链接 xff1a github下载与加载慢怎么解决 1 FastGithub 项目 解决github加载太慢 xff0c 解决releases无法上传下载失败等问题 2 dev sidecar 项目 解决github加载太慢 xff0c
  • Git常用命令符

    1 强制推送 xff08 慎用 xff0c 除非你认为其他冲突等可以丢弃 或者不是很重要 xff09 git push force 2 创建文件等小命令 touch a 创建一个a文件 echo 1234 gt gt a 把1234这个内容
  • ffmpeg--libswscale(图像缩放、颜色空间和像素格式转换操作)

    libswscale介绍 span class token number 1 span span class token number 2 span 种初始化方法 xff1a span class token keyword struct
  • vmware Ubuntu22.04共享文件夹找不到问题

    1 在VMware上先配置Windows上需要共享的文件名称路径 xff0c 选择 总是开启 2 在终端执行命令 xff1a vmware hgfsclient 当前面一步配置正确会显示 xff0c windows下共享的文件夹名称 但是我
  • Ubuntu Server 22.04修改静态ip及配置网关

    1 查看本机获取的IP地址 xff1a 输入命令 ip addr xff1a 2 修改配置文件 跳转到配置文件目录 xff1a cd etc netplan 使用ls查看配置文件名称 xff1a ls 使用nano修改配置文件 xff1a
  • 【二】卷积神经网络CNN

    为什么设计神经网络的架构能让结果表现更好 xff1f 总结 本课从影像识别切入 xff0c 从全连接网络讲起 xff0c 通过2种观察得出2种简化得到了CNN xff0c 一是有些pattern仅出现在图片的一小部分提出了感受野 xff0c
  • Docker Error :Invalid or corrupt jarfile .jar

    他提示的是你的jar包有问题 xff0c 无效 那么有很多种情况 xff0c 我遇到的是两种 dockerfile有问题 xff0c 我的dockerfile一开始是直接网上复制的 xff0c 其中有一句是将jar包copy进到容器 xff

随机推荐