用Scrapy精准爬取BOSS直聘特定行业职位

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 用Scrapy精准爬取BOSS直聘特定行业职位

BOSS直聘作为国内领先的招聘平台,拥有海量的职位信息,对于求职者、招聘者以及行业分析师来说,这些数据具有极高的价值。本文将详细介绍如何使用Scrapy框架精准爬取BOSS直聘上特定行业的职位信息,并在爬虫中集成代理服务器以提高爬取的稳定性和安全性。
一、项目背景与目标
BOSS直聘平台提供了丰富的职位信息,涵盖各个行业和领域。对于特定行业的深入分析,如互联网、金融、医疗等,精准获取该行业的职位数据至关重要。通过这些数据,可以分析行业人才需求趋势、薪资水平、技能要求等,为相关利益方提供决策支持。Scrapy作为一个高效、灵活的Python爬虫框架,非常适合用于此类数据爬取任务。本文的目标是构建一个Scrapy爬虫,能够精准爬取BOSS直聘上特定行业的职位信息,并通过代理服务器确保爬虫的稳定运行。
二、环境搭建与项目初始化

  1. 环境搭建
    确保你的开发环境中已安装Python。推荐使用Python 3.8及以上版本。接着,安装Scrapy框架:
    安装完成后,通过在终端输入 scrapy 命令来验证安装是否成功。
  2. 创建Scrapy项目
    在合适的目录下,执行以下命令创建一个新的Scrapy项目:
    这将生成一个名为 bosszhipin 的项目目录,包含多个预定义的文件和文件夹,如 items.py、middlewares.py、pipelines.py 和 settings.py 等。
    三、编写爬虫代码
  3. 定义数据项
    在 items.py 文件中定义一个数据项类,用于存储爬取到的职位信息:
    python

import scrapy

class JobItem(scrapy.Item):
job_name = scrapy.Field() # 职位名称
salary = scrapy.Field() # 薪资范围
company_name = scrapy.Field() # 公司名称
city = scrapy.Field() # 工作城市
experience = scrapy.Field() # 工作经验要求
education = scrapy.Field() # 学历要求
job_description = scrapy.Field() # 职位描述

  1. 编写爬虫
    在 spiders 目录下创建一个新的爬虫文件,例如 job_spider.py。编写爬虫代码,包括定义爬虫类、设置爬虫名称、起始URL、解析方法等:
    python

import scrapy
from bosszhipin.items import JobItem

class JobSpider(scrapy.Spider):
name = 'job_spider'
allowed_domains = ['www.zhipin.com']
start_urls = ['https://www.zhipin.com/c101010100/?query=互联网&page=1']

def parse(self, response):
    job_list = response.css('div.job-list ul li')
    for job in job_list:
        item = JobItem()
        item['job_name'] = job.css('div.job-primary div.info-primary h3 a::text').get()
        item['salary'] = job.css('div.job-primary div.info-primary h3 span::text').get()
        item['company_name'] = job.css('div.job-primary div.info-company div.company-text h3 a::text').get()
        item['city'] = job.css('div.job-primary div.info-primary p::text').get().split(' ')[0]
        item['experience'] = job.css('div.job-primary div.info-primary p::text').get().split(' ')[1]
        item['education'] = job.css('div.job-primary div.info-primary p::text').get().split(' ')[2]
        detail_url = job.css('div.job-primary div.info-primary h3 a::attr(href)').get()
        yield response.follow(detail_url, self.parse_detail, meta={'item': item})

    next_page = response.css('div.page a.next::attr(href)').get()
    if next_page:
        yield response.follow(next_page, self.parse)

def parse_detail(self, response):
    item = response.meta['item']
    item['job_description'] = response.css('div.job-sec div.text::text').get()
    yield item
  1. 集成代理服务器
    为了提高爬虫的稳定性和安全性,我们将在爬虫中集成代理服务器。在 middlewares.py 文件中添加代理中间件:
    python

import base64

class ProxyMiddleware(object):
def process_request(self, request, spider):
proxyHost = "www.16yun.cn"
proxyPort = "5445"
proxyUser = "16QMSOML"
proxyPass = "280651"
proxyAuth = "Basic " + base64.urlsafe_b64encode(bytes((proxyUser + ":" + proxyPass), "ascii")).decode("utf8")
request.meta['proxy'] = f"http://{proxyHost}:{proxyPort}"
request.headers['Proxy-Authorization'] = proxyAuth
在 settings.py 文件中启用该中间件:
python

DOWNLOADER_MIDDLEWARES = {
'bosszhipin.middlewares.ProxyMiddleware': 100,
}
四、数据处理与存储

  1. 数据清洗
    在爬取到的数据中,可能会存在一些不需要的信息或格式不规范的数据。可以在 parse 和 parse_detail 方法中,对数据进行简单的清洗。例如,去除薪资范围中的“元/月”字样,提取出具体的薪资数值;去除职位描述中的HTML标签等。
  2. 数据存储
    Scrapy提供了多种数据存储方式,如存储到JSON文件、CSV文件、数据库等。在 pipelines.py 文件中定义一个数据处理管道,用于将数据存储到指定的格式中。以下是一个将数据存储到JSON文件的示例:
    python

import json

class JsonPipeline(object):
def open_spider(self, spider):
self.file = open('jobs.json', 'w', encoding='utf-8')

def close_spider(self, spider):
    self.file.close()

def process_item(self, item, spider):
    line = json.dumps(dict(item), ensure_ascii=False) + '\n'
    self.file.write(line)
    return item

在 settings.py 文件中启用该管道:
python

ITEM_PIPELINES = {
'bosszhipin.pipelines.JsonPipeline': 300,
}
五、运行爬虫
在项目根目录下,通过以下命令运行爬虫:
bash

scrapy crawl job_spider
爬虫将开始爬取BOSS直聘上互联网行业的职位数据,并将数据存储到 jobs.json 文件中。
六、注意事项与优化建议

  1. 遵守网站协议
    在爬取数据时,应遵守BOSS直聘的网站协议和法律法规,不要对网站造成过大的负担或影响其正常运行。
  2. 处理反爬机制
    BOSS直聘可能会有一定的反爬机制,如IP限制、请求频率限制等。可以通过设置代理IP、随机请求头、调整下载延迟等方式来应对反爬机制。
  3. 优化性能
    在保证数据准确性和爬取效率的前提下,合理设置并发请求的数量、下载延迟等参数,以优化爬虫性能。
  4. 数据分析与应用
    爬取到的职位数据可以用于多种分析和应用,如行业薪资水平分析、人才需求趋势预测、企业招聘策略优化等。可以结合数据分析工具和可视化技术,深入挖掘数据的价值,为企业和求职者提供有价值的参考和建议。
相关文章
|
6天前
|
供应链 监控 安全
对话|企业如何构建更完善的容器供应链安全防护体系
随着云计算和DevOps的兴起,容器技术和自动化在软件开发中扮演着愈发重要的角色,但也带来了新的安全挑战。阿里云针对这些挑战,组织了一场关于云上安全的深度访谈,邀请了内部专家穆寰、匡大虎和黄竹刚,深入探讨了容器安全与软件供应链安全的关系,分析了当前的安全隐患及应对策略,并介绍了阿里云提供的安全解决方案,包括容器镜像服务ACR、容器服务ACK、网格服务ASM等,旨在帮助企业构建涵盖整个软件开发生命周期的安全防护体系。通过加强基础设施安全性、技术创新以及倡导协同安全理念,阿里云致力于与客户共同建设更加安全可靠的软件供应链环境。
133530 10
|
14天前
|
弹性计算 人工智能 安全
对话 | ECS如何构筑企业上云的第一道安全防线
随着中小企业加速上云,数据泄露、网络攻击等安全威胁日益严重。阿里云推出深度访谈栏目,汇聚产品技术专家,探讨云上安全问题及应对策略。首期节目聚焦ECS安全性,提出三道防线:数据安全、网络安全和身份认证与权限管理,确保用户在云端的数据主权和业务稳定。此外,阿里云还推出了“ECS 99套餐”,以高性价比提供全面的安全保障,帮助中小企业安全上云。
201925 14
对话 | ECS如何构筑企业上云的第一道安全防线
|
3天前
|
供应链 监控 安全
|
6天前
|
SQL 安全 前端开发
预编译为什么能防止SQL注入?
SQL注入是Web应用中常见的安全威胁,攻击者通过构造恶意输入执行未授权的SQL命令。预编译语句(Prepared Statements)是一种有效防御手段,它将SQL代码与数据分离,确保用户输入不会被解释为SQL代码的一部分。本文详细介绍了SQL注入的危害、预编译语句的工作机制,并结合实际案例和多语言代码示例,展示了如何使用预编译语句防止SQL注入,强调了其在提升安全性和性能方面的重要性。
|
9天前
|
搜索推荐 物联网 PyTorch
Qwen2.5-7B-Instruct Lora 微调
本教程介绍如何基于Transformers和PEFT框架对Qwen2.5-7B-Instruct模型进行LoRA微调。
417 34
Qwen2.5-7B-Instruct Lora 微调
|
1月前
|
人工智能 自然语言处理 前端开发
从0开始打造一款APP:前端+搭建本机服务,定制暖冬卫衣先到先得
通义灵码携手科技博主@玺哥超carry 打造全网第一个完整的、面向普通人的自然语言编程教程。完全使用 AI,再配合简单易懂的方法,只要你会打字,就能真正做出一个完整的应用。
9940 29
|
3天前
|
机器学习/深度学习 存储 人工智能
【科普向】我们所说的AI模型训练到底在训练什么?
人工智能(AI)模型训练类似于厨师通过反复实践来掌握烹饪技巧。它通过大量数据输入,自动优化内部参数(如神经网络中的权重和偏置),以最小化预测误差或损失函数,使模型在面对新数据时更加准确。训练过程包括前向传播、计算损失、反向传播和更新权重等步骤,最终生成权重文件保存模型参数,用于后续的应用和部署。理解生物神经网络的工作原理为人工神经网络的设计提供了灵感,后者广泛应用于图像识别、自然语言处理等领域。
|
2天前
|
人工智能 算法 搜索推荐
阿里云百炼xWaytoAGI共学课开课:手把手学AI,大咖带你从零搭建AI应用
阿里云百炼xWaytoAGI共学课开课啦。大咖带你从零搭建AI应用,玩转阿里云百炼大模型平台。3天课程,涵盖企业级文本知识库案例、多模态交互应用实操等,适合有开发经验的企业或独立开发者。直播时间:2025年1月7日-9日 20:00,地点:阿里云/WaytoAGI微信视频号。参与课程可赢取定制保温杯、雨伞及磁吸充电宝等奖品。欢迎加入钉钉共学群(群号:101765012406),与百万开发者共学、共享、共实践!
|
15天前
|
机器学习/深度学习 人工智能 安全
通义视觉推理大模型QVQ-72B-preview重磅上线
Qwen团队推出了新成员QVQ-72B-preview,这是一个专注于提升视觉推理能力的实验性研究模型。提升了视觉表示的效率和准确性。它在多模态评测集如MMMU、MathVista和MathVision上表现出色,尤其在数学推理任务中取得了显著进步。尽管如此,该模型仍存在一些局限性,仍在学习和完善中。