基于Jsoup爬虫的BOSS直聘信息爬取
2023-06-15张鹏
张鹏
摘要:当前,就业成为人们生产生活的重要主题,随着互联网的飞速发展,招聘网站成为求职者就业的主要通道,网站中的招聘职位虽然丰富,但较难迅速获取岗位中的重要信息。文章采取Jsoup网络爬虫技术,爬取了BOSS直聘网站中天津市的Java岗位信息,并使用POI技术将岗位中的重要信息经过数据处理保存为本地Excel文件,便于求职者直观地对所搜索的岗位进行筛选判断,具有良好的实用价值。
关键词:Jsoup;网络爬虫;Boss直聘
中图分类号: TP392 文献标志码:A
0 引言
随着互联网的迅猛发展,就业方式已由传统的线下招聘逐步转变为高效快捷的网络求职,通过各类招聘网站寻找岗位成为人们求职的主要方式,其中,BOSS直聘凭借其独创的“找工作,与老板谈”模式成为求职网站,特别是互联网行业求职的主流网站之一。虽然通过网站可以便捷地查询到岗位的需求信息,但是,人们在这些冗余的岗位需求信息中很难找到贴合自身的岗位信息,且不容易掌握某个岗位的薪资平均水平、分布地域等重要数据。
为了快速获取某类型岗位的全部招聘信息,便于用户快速筛选薪资、地域等实用数据,本文采用Jsoup的爬虫技术,以java作为岗位关键字,将BOSS直聘网站上的主要招聘信息逐页爬取并保存到本地Excel文件中,同时进行数据预处理,方便求职者直观地对所搜索的岗位进行研究与选择。
1 招聘信息爬取研究现状
国内已存在较多学者使用爬虫技术爬取招聘网站的案例。例如,孙暖等[1]采用Scrapy框架,基于Python语言设计爬虫采集方案并实现了面向猎聘、拉钩等招聘类网站的数据采集,最终成功获取50 000余条数据。梅杰[2]采用网络爬虫技术获取智联招聘网站中的互联网行业数据,并对获取的数据集进行删除、转换。毛遂等[3]采取Python爬虫对51Job招聘网站上的Python相关岗位进行爬取,并对爬取的本地数据进行可视化分析。
为解决招聘网站信息不直观的问题,本文将对所用技术进行分析,设计爬虫模型并完成代码实现,以便呈现出清晰直观的招聘岗位现状,为相关岗位的人才提供良好的职业决策判断。
2 相关技术分析
2.1 网络爬虫的原理
随着互联网的飞速发展,网络成为数据与信息的载体中心,挖掘这些数据背后的意义尤为重要。网络爬虫是一种程序代码或者脚本文件[4],可以遵循一定的规则自动获取网站上的数据。
2.2 Jsoup技术简介
Jsoup是一款HTML解析器,拥有十分方便的API处理HTML文档,比如,参考了DOM对象的文档遍历方法,参考了CSS选择器的用法等等,因此,可以使用Jsoup快速地爬取页面数据。
2.3 POI技术简介
Apache POI是用Java编写的免费开源的跨平台的Java API,提供对Microsoft Office格式档案读和写的功能。POI也用于操作Excel,其中,Excel中的工作簿、sheet、行和单元格都可以在POI中找到相應的对象进行操作[7]。
3 爬取招聘信息模型设计与实现
招聘信息爬取功能的核心是首先通过携带请求对目标网页发出请求并取得服务器响应,接着将获得的响应内容(Document)通过Jsoup进行解析,封装为实体类对象的集合,其中,翻页功能使用递归调用方法实现。在获取到所有的招聘数据后,对数据进行预处理,并将其保存为本地Excel文件。爬取流程如图1所示。
3.1 分析网页URL,确定访问路径
BOSS直聘是一个动态网页,需要分析其URL来实现岗位关键字、城市、页码等参数的填充。该网站岗位搜索首页URL为https://www.zhipin.com/web/geek/job,是不变部分,其后需要添加3个参数,分别为岗位关键字query、城市关键字city和页码page。
将query设置为java,city设置为天津,城市代码为101030100,访问第一页时,page参数可省略,因此可以得到天津市java岗位的招聘信息URL为:
https://www.zhipin.com/web/geek/job?query=java&city=101030100
使用Jsoup.connect(url)获取连接,携带header发起请求,将网页保存在Document对象中。
3.2 分析网页结构
访问招聘信息URL,得到天津市java岗位的第一页,页面内有30个招聘信息。利用谷歌浏览器的F12开发者工具查看所要的爬取内容在网页上对应的标签,可以得到它的属性、HTML代码等。对网页进行分析发现,每一个招聘信息都是以
List
3.3 将网页内容封装为对象集合
本文定义了一个核心方法getBossTJList(String url, String area),用于将网页内容封装为招聘信息List。其中url参数为招聘信息URL,area参数为要搜索的岗位关键字,设置该参数旨在方便求职者随时切换求职岗位。
依据网页元素集合List
//岗位名称
String job_title = e.getElementsByClass("job-title").text();
//薪资
String salary = e.getElementsByClass("salary").text();
//地理位置
String job_address = e.getElementsByClass("job-area").text();
本文使用Job实体类对象存储招聘信息,每获取一个Element中的主要招聘数据,就将它们封装为一个Job对象。设置全局静态变量集合job_list,将Job对象依次添加进集合中。
3.4 递归实现翻页功能
BOSS直聘网站的页码部分位于