完整代码关注公众号 :
爬取网站:BOSS直聘:https://www.zhipin.com/
难点
1. boss直聘不论什么岗位都只会展示10页数据,就算在网页里加到了11,内容也会和10一样。
2.多次访问会有验证码需要登录,这部分需要手动解除
3. 网站源码被加密了,没法通过request直接链接网站获取源码
解决办法:
采用selenium控制浏览器的方式,成功获取源码,并且获取页面元素
防止页面需要验证来中断爬取,采用企业微信(或者钉钉机器人)的方式来提醒需要验证了(这部分没法代码通过,除非后续采用图像识别跳过验证码)
既然每个岗位只能爬取10页,我们可以采取一个岗位分10个地区,比如我需要爬取长沙市的xx岗位,直接爬取只能出现10页总共300个岗位,但是可以拆分成8个区的爬取,每个区假设都有10页,就可能爬取到80页数据。
爬取系统介绍
功能介绍:
1. 首先在配置文件config中更改爬取要求,
jobs = ['数据分析师']
citys = {
# '101280600':'深圳'
'101250100': "长沙",
# '101280100': '广州',
# '101230200':'厦门'
}
# areaBusiness = '330113,'.split(',')
experience = (",".join
([ # 不需要的可以注释掉
# '108', # 在校生
# '102', # 应届生
'101', # 经验不限
'103', # 1年以内
'104', # 1-3年
# '105', # 3-5年
# '106', # 5-10年
# '107', # 10年以上
]))
degree = ",".join([ # 学历要求
'209', # 初中及以下
'208', # 中专/中技
'206', # 高中
'202', # 大专
'203', # 本科
# '204', # 硕士
# '205', # 博士
])
# 获取该城市的各一级区域区号
确定好爬取需求之后,会在当前目下创建一个根据岗位和城市名的文件,后续爬取好的岗位信息都会保存在该文件内。
2. 开始爬取
这是整体系统框架,包含五个函数,最下面是系统的入口
首先需要知道每个地区总共有多个页面可以爬取,首先完成
if __name__ == "__main__":
boss = webdriver.Edge(service=Service(EdgeChromiumDriverManager().install()), options=edge_options)
存放文件夹位置=f'D:\Marshal1\Anacada__\工作项目\爬虫\\boss_project\\'+f'{文件名}'
对应页码表=查看每个区存在多少页岗位(存放文件夹位置)
这里需要更改文件存放位置,选择想要将文件保存的地址
执行完函数“查看每个区存在多少页岗位(存放文件夹位置)”之后,在存放文件夹位置下会生成一个文件“对应页码表”,后续需要根据这个文件来确定不同区需要爬取的页码数,防止爬取重复数据。
if __name__ == "__main__":
boss = webdriver.Edge(service=Service(EdgeChromiumDriverManager().install()), options=edge_options)
存放文件夹位置=f'D:\Marshal1\Anacada__\工作项目\爬虫\\boss_project\\'+f'{文件名}' 对应页码表=查看每个区存在多少页岗位(存放文件夹位置)对应页码表=pd.read_csv(f"{存放文件夹位置}\对应页码表.csv") 获取对应岗位信息(对应页码表,存放文件夹位置)
然后执行“获取对应岗位信息(对应页码表,存放文件夹位置)”,之后在本地生成一个csv文件,不包含岗位的职位描述的文件,如果还需要职位的描述字段需要继续执行最后一行代码
获取岗位职责(存放文件夹位置)