B站校招职位爬虫(DrissionPage版)使用指南

107 阅读4分钟

B站校招职位爬虫(DrissionPage版)使用指南

项目简介

本文档详细介绍B站职位爬虫工具test_drission.py的使用方法和运行流程。该工具基于DrissionPage框架开发,用于抓取B站校招和社招职位信息并保存为JSON格式数据。

drission_bilibili_job.png

技术栈

  • 核心框架: DrissionPage (网页自动化与数据提取)
  • 编程语言: Python 3.6+
  • 主要依赖: json, time, random, argparse

项目地址

安装配置

环境要求

  • Python 3.6或更高版本
  • Chrome浏览器 (需与DrissionPage兼容)

安装步骤

  1. 克隆或下载项目代码到本地
  2. 安装依赖包:
pip install DrissionPage

运行方式

命令行参数说明

该工具支持以下命令行参数:

参数名类型可选值默认值描述
--type字符串social/campuscampus招聘类型,social表示社招,campus表示校招
--sleep浮点数任意正数1.0页面抓取间隔时间(秒)
--max-page整数0或正整数2最大抓取页数,0表示不限制

运行示例

1. 爬取校招职位(默认)
python test_drission.py
2. 爬取社招职位
python test_drission.py --type social
3. 自定义抓取参数
python test_drission.py --type social --max-page 5 --sleep 2.5

上述命令表示:抓取社招职位,最多抓取5页,每页抓取间隔2.5秒。

运行流程

程序运行流程主要分为以下几个阶段:

1. 参数解析与初始化

  • 解析命令行参数
  • 根据招聘类型确定目标URL
  • 初始化浏览器配置

2. 浏览器初始化(init_browser)

  • 根据操作系统配置浏览器参数
  • Linux系统默认启用无头模式,Windows系统默认显示浏览器窗口
  • 配置用户代理、图片加载策略等
  • 支持代理设置(默认未启用)

3. 页面获取与解析

  • 获取列表页(get_job_list_html): 请求目标URL并返回页面HTML
  • 获取最大页码(get_max_page): 从分页控件提取总页数
  • 获取职位卡片(get_job_list_card): 定位页面中的职位卡片元素

4. 职位信息提取

  • 列表信息提取(get_job_list_info): 从职位卡片提取标题、地点、类别等基本信息
  • 详情页获取: 模拟点击职位标题打开新窗口
  • 详情信息提取(get_position_detail): 从详情页提取职位描述、要求等详细信息

5. 数据处理与保存

  • 整合列表信息和详情信息
  • 保存为JSON格式文件(save_job_list_data)
  • 文件命名格式: bilibili_jobs_<type>.json

数据结构

抓取的职位数据包含以下字段:

{
  "position_id": "职位ID",
  "position_title": "职位标题",
  "location": "工作地点",
  "category": "职位类别",
  "job_type": "工作类型",
  "post_date": "发布日期",
  "position_url": "职位链接",
  "position_detail": {
    "position_id": "职位ID",
    "position_url": "职位链接",
    "title": "职位标题",
    "location": "工作地点",
    "category": "职位类别",
    "job_type": "工作类型",
    "post_date": "发布日期",
    "position_content": "职位描述与要求"
  }
}

防反爬策略

  1. 随机请求间隔: 通过--sleep参数控制请求频率
  2. 浏览器指纹伪装: 设置合理的User-Agent
  3. 模拟真实用户行为: 使用真实浏览器环境和点击操作
  4. 错误处理与重试机制: 关键步骤实现重试逻辑

常见问题解决方案

1. 浏览器启动失败

  • 确保Chrome浏览器已安装
  • 检查Chrome版本与DrissionPage兼容性
  • 尝试添加--no-sandbox参数

2. 页面加载超时

  • 增加--sleep参数值
  • 检查网络连接
  • 考虑使用代理服务器

3. 数据提取不完整

  • 检查页面结构是否变化
  • 查看page_html_debug.html调试文件
  • 调整元素定位选择器

代码优化建议

  1. 增加代理池支持: 提高大规模抓取稳定性
  2. 实现多线程并发: 提升抓取效率
  3. 添加数据库存储: 除JSON外支持直接存入数据库
  4. 完善日志系统: 增加详细的运行日志便于调试
  5. 添加异常捕获机制: 提高程序健壮性

注意事项

  • 频繁抓取可能导致IP被暂时封禁,请合理设置抓取间隔
  • 本工具仅供学习研究使用,请勿用于商业用途
  • 遵守网站robots协议,尊重网站数据版权