【2024最新】快速爬取Boss直聘职位信息

1. 前言

在如今竞争激烈的就业市场,了解最新的职位信息是成功找到理想工作的关键。而Boss直聘作为国内领先的招聘平台,拥有海量的职位信息。本教程将带您一步步学习如何使用爬虫技术,快速、高效地爬取Boss直聘上的职位信息。

2. 准备工作

在开始之前,我们需要具备以下准备工作:

  • Python编程基础
  • 安装Python的相关库
  • 了解基本的HTML和CSS知识

3.爬取目标

4.爬取Boss直聘职位信息的步骤

本教程将分为以下几个步骤来实现对Boss直聘职位信息的爬取:

3.1. 分析目标网页结构

在开始编写爬虫代码之前,我们需要先了解Boss直聘的网页结构。本节将介绍如何使用开发者工具分析目标网页的HTML结构和CSS样式。

3.1.1查看目标数据网页结构

这里以python职位为例与大家分享一下爬取过程众的思路,在搜索框输入python回车查找后通过f12查看页面元素时间可以发现,所有的岗位都会用li这个标签包裹着,且ul对应的class的值为job-list-box

到这里我们点击页面右键选择查询查看页面源代码,在源代码 job-list-box 下面的结果表示页面上找不到搜索内容,这种情况就得去找数据接口了

由于我们需要的数据在页面源代码中找不到,这时就需要在异步请求中查找数据接口

刷新页面可以看到很多请求,这时候一个个查看,知道我们需要的数据出现

找到数据接口再查看接口需要传输的参数,这里面带有值的参数只有5个。scenc这个值应该是识别屏幕大小的,不需要理会;city这个值应该是某个城市的代号,position这个值应该某一类岗位的代号,page和pageside这两个个值分别是第几页和页面显示的数量。

接下来就要去找city和position的值在那个接口下保存的,同样的方法我们可以找到city和position的接口,通过请求这两个接口可以得到我们要的两个变量的值

3.2. 使用Python库进行数据抓取

了解目标网页结构后,我们将使用Python的相关库(如Requests和BeautifulSoup)来实现数据的抓取。本节将详细介绍如何发送HTTP请求、解析HTML文档并提取所需信息。

3.2.1.获取city的值
#!/usr/bin/env python3
# coding:utf-8
import bag


def main():
    url = r'https://www.zhipin.com/wapi/zpCommon/data/city.json'
    session = bag.session.create_session()
    resp = session.get(url)
    js_data = resp.json().get('zpData')
    result = {}
    for info in js_data.get('cityList'):
        for city in info.get('subLevelModelList'):
            mid = {}
            try:
                for value in city.get('subLevelModelList'):
                    mid[value.get('name')] = value.get('code')
            except TypeError:
                result[city.get('name')] = {city.get('code'): ''}
            result[city.get('name')] = {city.get('code'): mid}
    print(result)
    # bag.Bag.save_json(result, './city_id.json')


if __name__ == '__main__':
    main()
3.2.2. 获取position的值
#!/usr/bin/env python3
# coding:utf-8
import bag


def main():
    url = r'https://www.zhipin.com/wapi/zpCommon/data/getCityShowPosition?cityCode=100010000'
    session = bag.session.create_session()
    resp = session.get(url)
    js_data = resp.json()
    result = {}
    for info in js_data.get('zpData').get('position'):
        k = {}
        for key in info.get('subLevelModelList'):
            mid = {}
            for value in key.get('subLevelModelList'):
                mid[value.get('name')] = value.get('code')
            k[key.get('name')] = {key.get('code'): mid}
        result[info.get('name')] = {info.get('code'): k}

    bag.Bag.save_json(result, r'./job_name.json')


if __name__ == '__main__':
    main()
3.2.3.获取数据 
# city.json  下面是部分数据,展示这些数据主要是想让代码理解起来简单一点
{
  "广州": {
    "101280100": {
      "荔湾区": 440103,
      "越秀区": 440104,
      "海珠区": 440105,
      "天河区": 440106,
      "白云区": 440111,
      "黄埔区": 440112,
      "番禺区": 440113,
      "花都区": 440114,
      "南沙区": 440115,
      "从化区": 440117,
      "增城区": 440118
    }
  }
}

# job_name.json
{
  "互联网/AI": {
    "1010000": {
      "后端开发": {
        "1000020": {
          "Java": 100101,
          "C/C++": 100102,
          "PHP": 100103,
          "Python": 100109,
          "C#": 100106,
          ".NET": 100107,
          "Golang": 100116,
          "Node.js": 100114,
          "Hadoop": 100108,
          "语音/视频/图形开发": 100121,
          "数据采集": 100122,
          "GIS工程师": 100124,
          "全栈工程师": 100123,
          "其他后端开发": 100199
        }
      }
    }
  }
}
#!/usr/bin/env python3
# coding:utf-8
import bag
import json
import re
session = bag.session.create_session()
web = bag.Bag.web_debug()


def main():
    base_url = r'https://www.zhipin.com/wapi/zpgeek/search/joblist.json?scene=1&query=&city={}' \
          r'&experience=&payType=&partTime=&degree=&industry=&scale=&stage=&position={}' \
          r'&jobType=&salary=&multiBusinessDistrict=&multiSubway=&page=1&pageSize=30'
    city = bag.Bag.read_json('./city_id.json')
    position = bag.Bag.read_json('./job_name.json')

    city_input = input('输入查询岗位地区:')   # 广州
    position_input = input('输入查询岗位:')  # Python

    city_id = next(iter(city.get(city_input)))

    session.get(r'https://www.zhipin.com/guangzhou/?ka=city-sites-{}'.format(city_id))
    position_id = find_value(position, position_input)
    session.get(r'https://www.zhipin.com/web/geek/job?query=&city={}&position={}'.format(city_id, position_id))
    get_data(base_url.format(city_id, position_id))


def find_value(data, target_key):
    if isinstance(data, dict):  # 如果当前元素是字典
        for key, value in data.items():
            if key == target_key:  # 如果找到了目标键,返回对应的值
                return value
            result = find_value(value, target_key)  # 递归调用函数
            if result is not None:  # 如果找到了值,则返回结果
                return result
    return None  # 如果没有找到目标值,则返回None


def get_data(url):
    pattern = re.compile(r'<pre.*?>(.*?)</pre>', re.S)
    web.get(url)
    resp = web.page_source

    resp = re.findall(pattern, str(resp))
    print(resp)

    to_json = json.loads(resp[0])

    result = []
    for info in to_json.get('zpData').get('jobList'):
        result.append([
            info.get('jobName'),
            info.get('jobExperience'),
            info.get('jobDegree'),
            info.get('skills'),
            info.get('cityName'),
            info.get('areaDistrict'),
            info.get('businessDistrict'),
            info.get('brandName'),
            info.get('brandStageName'),
            info.get('brandIndustry'),
            info.get('brandScaleName'),
            info.get('welfareList')
        ])
    bag.Bag.save_excel(result, './boss直聘爬虫.xlsx')


if __name__ == '__main__':
    session.get('https://www.zhipin.com/')
    main()
3.3. 爬取结果

4. 总结

boss直聘在反爬这一块做得还是比较好的,练习的时候注意控制避免ip被拉黑

建议使用selenium的调试模式来爬取,这样可以避免被反爬

selenium爬取boss直聘广州站示例

  • 48
    点赞
  • 76
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 23
    评论
好的,您可以使用 Python 的 Requests 和 BeautifulSoup 库来爬取 BOSS 直聘职位描述页数据。具体步骤如下: 1. 使用 requests 库发送 GET 请求,并将返回的 HTML 内容存储到一个变量中。 ```python import requests url = 'https://www.zhipin.com/job_detail/xxxxx.html' response = requests.get(url) html = response.content ``` 2. 使用 BeautifulSoup 库解析 HTML 内容,并提取出需要的信息。 ```python from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'html.parser') # 提取职位名称 job_title = soup.find('div', class_='job-name').get_text() # 提取公司名称 company_name = soup.find('div', class_='job-header').find('a').get_text() # 提取工作地点、工作年限等信息 job_info = soup.find('div', class_='job-banner').find_all('p')[1].get_text() # 提取职位描述 job_description = soup.find('div', class_='job-detail').find('div', class_='detail-content').get_text() ``` 3. 将提取出的信息存储到一个数据结构中,或者直接输出到控制台。 ```python # 存储到一个字典中 job_data = { 'job_title': job_title, 'company_name': company_name, 'job_info': job_info, 'job_description': job_description } # 输出到控制台 print('职位名称:', job_title) print('公司名称:', company_name) print('工作地点、工作年限等信息:', job_info) print('职位描述:', job_description) ``` 这样就可以爬取 BOSS 直聘职位描述页数据了。注意,爬取网站数据需要遵守相关法律法规,不要进行非法爬取或者侵犯他人隐私等行为。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FLK_9090

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值