一、简介
随着互联网的普及,越来越多的招聘信息来源于各大招聘网站。然而,这些招聘信息往往以文本形式存在,使得人工阅读和分析变得耗时且低效。为了提高招聘数据的处理效率,本文将介绍如何使用Selenium进行BOSS招聘数据的自动化爬取。
而且BOOS的反爬机制很厉害,cookie经常发生变化,使用selenium通过自动化操作浏览器来获取页面上的数据会更简单一点
二、技术栈
本文将介绍使用的技术栈,Python、Selenium、Pandas、Random
三、难点
在通过使用Selenium自动操作浏览器访问BOOS招聘时,BOOS会通过各种手段包括浏览器指纹识别技术或者访问行为来判定操作对象是否是机器人,判断成立之后会返回一些错误的页面信息或者验证码之类的,所以在获取招聘数据之前,应该先学会伪装自己,让浏览器无法识别到是机器人在操作,
具体细节可以参考该文章selenium实战指南:如何防止被浏览器检测?
四、代码实现
1、打开谷歌浏览器
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from time import sleep
import pandas as pd
import undetected_chromedriver as uc
import random
#BOOS招聘网站
url = "https://www.zhipin.com/shanghai/"
#创建谷歌浏览器
browser = uc.Chrome()
#打开网页
browser.get(url=url)
#等待10秒钟,最好别访问太快
sleep(10)
这里可以选择等待十秒,也可以不等待,为了防止访问过快,采用其他等待方法也可以,也可以不等待
页面:
2、定位搜索框
先通过xpath定位到搜索框,然后搜索想要的内容,这里以搜索“金融”相关的职位公司为例,这里输入内容之后通过模拟键盘操作点击回车,也可以确认搜索按钮后直接点击搜索,不过也是尽量模仿真实人类操作的操作方式
然后还是等待10秒,防止操作过快,不过也可以通过
# 选择搜索框
searching = browser.find_element(By.XPATH,
'//input[@type="text" and @name="query" and @class="ipt-search" and @placeholder="搜索职位、公司"]')
# 输入金融,搜素金融相关的公司
searching.send_keys("金融")
# 点击搜索,通过回车点击
searching.send_keys(Keys.ENTER)
# 等待10秒
sleep(10)
3、确认获取页面的信息
现在已经进入到了招聘信息页面,先确认一下需要获取到那些信息,确认好信息之后就需要通过xpath定位每个信息的位置
- 招聘职位名称
- 公司所属地区
- 公司名称
- 薪资区间
- 工作经验要求
- 招聘人名称及岗位
- 公司名称
- 公司类型/融资情况/公司人员规模
- 岗位要求
- 公司福利
4、循环获取页面的全部数据
首先确认了一共有10页的数据,每页30条内容,一共300条,那么就通过循环开始获取每一条数据
通过循环获取全部数据,每循环30条数据(一页)之后点击下一页,当循环次数达到300次的时候就说明查找完了,通过random随机等待1-15秒,目的是为了模仿真实人的操作,也可以不进行等待,然后关闭浏览器
#获取表格数据
#定义一个变量来判断循环的次数
num = 1
#定义一个空数组,后面用来存储数据
pd_lis = []
while True :
if num % 30 == 0:
if num == 300:
#关闭浏览器
browser.close()
browser.quit()
else :
#获取a标签下最后一个a标签,那个就是点击下一页
page = browser.find_elements(By.XPATH,'//div[@class="options-pages"]/a')
last_page = page[-1]
#点击下一页
last_page.click()
#每循环一次num变量+1
num += 1
sleep(random.randint(1,15))
5、获取信息
通过开发者模式看到,每一个岗位信息都在一个<li>标签中,其中的ka属性会从1开始累加,我们要获取300条数据,那么一共就会累加到"search_list_300",在循环中通过上一步定义的num参数来进行不断累加,达到获取每一个岗位的要求
#定位到岗位信息所在的li标签,通过num变量来确认获取哪一行的岗位信息
mes