3.4 爬虫实战-爬去智联招聘职位信息

news2024/9/24 17:19:06

课程目标

爬去智联招聘

课程内容

import requests  # 导入requests库,用于发送网络请求
from bs4 import BeautifulSoup  # 导入BeautifulSoup库,用于解析HTML文档
from tqdm import tqdm  # 导入tqdm库,用于显示进度条
import pandas as pd  # 导入pandas库,用于数据处理和导出Excel文件

# 定义一个函数,用于将薪资字符串转换为数值
def tran_salary(ori_salary):
    if "万" in ori_salary:
        ori_salary = ori_salary.replace("万","")  # 去掉“万”字
        ori_salary = float(ori_salary)  # 转换为浮点数
        ori_salary *= 10000  # 转换为数值
    elif "千" in ori_salary:
        ori_salary = ori_salary.replace("千","")  # 去掉“千”字
        ori_salary = float(ori_salary)  # 转换为浮点数
        ori_salary *= 1000  # 转换为数值
    return ori_salary  # 返回转换后的薪资数值

# 设置请求头,模仿浏览器发送请求
headers = {
    "authority": "www.zhaopin.com",
    "cache-control": "max-age=0",
    "sec-ch-ua": "\"Chromium\";v=\"92\", \" Not A;Brand\";v=\"99\", \"Microsoft Edge\";v=\"92\"",
    "sec-ch-ua-mobile": "?0",
    "upgrade-insecure-requests": "1",
    "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36 Edg/92.0.902.67",
    "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
    "sec-fetch-site": "same-origin",
    "sec-fetch-mode": "navigate",
    "sec-fetch-user": "?1",
    "sec-fetch-dest": "document",
    "referer": "https://www.zhaopin.com/sou/jl801/kw01O00U80EG06G03F01N0/p1",
    "accept-language": "zh-CN,zh;q=0.9"
}

# 设置cookies,用于维持会话
cookies = {
    # 省略了具体的cookie值,这些值通常在登录后由浏览器保存
}

# 定义要爬取的URL
url = "https://www.zhaopin.com/sou/jl801/kw01O00U80EG06G03F01N0/p1"

# 使用requests.get发送请求,获取网页内容
response = requests.get(url, headers=headers, cookies=cookies)

# 使用BeautifulSoup解析网页内容
html_str = response.text
soup = BeautifulSoup(html_str,"html.parser")

# 找到所有职位信息的HTML元素
joblist = soup.find_all("div",class_="joblist-box__item")

# 初始化一个空列表,用于存储抓取的数据
infos = []

# 使用for循环遍历每个职位信息元素
for job_item in tqdm(joblist):  # tqdm用于显示进度条
    # 获取职位名称和公司名称
    jobinfo__name = job_item.find("a",class_="jobinfo__name").text.strip()
    company_name = job_item.find("a",class_="companyinfo__name").text.strip()
    
    # 获取薪资信息
    jobinfo__salary = job_item.find("p",class_="jobinfo__salary").text.strip()
    if jobinfo__salary == '面议':
        salary = 0
    else:
        if "·" in jobinfo__salary:
            jobinfo__salary = jobinfo__salary.split("·")[0]
        min_salary,max_salary = jobinfo__salary.split("-")
        min_salary = tran_salary(min_salary)
        max_salary = tran_salary(max_salary)
        salary = (min_salary + max_salary) / 2  # 计算平均薪资
    
    # 获取技能要求
    jobinfo__tag = job_item.find("div",class_="jobinfo__tag")
    skills = []  # 技能要求列表
    if jobinfo__tag is not None:
        joblist_box__item_tags = jobinfo__tag.findAll("div")
        for joblist_box__item_tag in joblist_box__item_tags:
            skills.append(joblist_box__item_tag.text)
    
    # 获取其他信息,如地区、经验要求、学历要求
    jobinfo__other_info = job_item.find("div",class_="jobinfo__other-info")
    jobinfo__other_infos = jobinfo__other_info.find_all("div")
    area = jobinfo__other_infos[0].text.strip()
    area_strs = area.split("·")
    
    region, classify, city = "","",""
    if len(area_strs) > 2:
        region = area_strs[2]
    if len(area_strs) > 1:
        classify = area_strs[1]
    if len(area_strs) > 0:
        city = area_strs[0]
    
    experience_requirement = jobinfo__other_infos[1].text.strip()
    if experience_requirement == "经验不限":
        experience_requirement = "0"
    experience_requirement = experience_requirement.replace("年","")
    if "-" in experience_requirement:
        experience_requirement_list = experience_requirement.split("-")
    experience_requirement = experience_requirement_list[0]
    experience_requirement = int(experience_requirement)
    
    education_background_requirement = jobinfo__other_infos[2].text.strip()
    
    # 获取公司信息,如融资信息、公司规模、公司类型
    companyinfo__tag = job_item.find("div",class_="companyinfo__tag")
    comany_info_items = companyinfo__tag.findAll("div")
    finance_info = comany_info_items[0].text.strip()
    scale = comany_info_items[1].text.strip()
    if len(comany_info_items) > 2:
        conany_type = comany_info_items[2].text.strip()
    else:
        conany_type = ""
    
    # 将抓取的信息以字典形式添加到infos列表中
    info = {
        "公司名字": company_name, 
        "薪资": salary, 
        "技能要求": skills, 
        "市": city, 
        "区": classify, 
        "区域": region, 
        "经验要求": experience_requirement, 
        "学历要求": education_background_requirement, 
        "融资信息": finance_info, 
        "规模": scale, 
        "公司类型": conany_type
    }
    infos.append(info)

# 使用pandas将infos列表转换为DataFrame
df = pd.DataFrame(infos)

# 将DataFrame保存为Excel文件
df.to_excel("智联职位信息.xlsx", index=False)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2160922.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot文档管理系统:架构与功能

第2章相关技术 2.1 Java技术介绍 Java语言擅长开发互联网类应用和企业级应用,现在已经相当的成熟,而且也是目前使用最多的编程语言之一。Java语言具有很好的面向对象性,可以符合人的思维模式进行设计,封装是将对象的属性和方法尽可…

FileLink:企业级跨网文件交换解决方案,效率与安全并存

在数字化转型的时代,企业面临着日益增长的文件交换需求。尤其是在跨网环境中,如何高效、安全地共享文件,成为企业运营的关键。FileLink 正是针对这一需求而生,为企业提供了一个高效、安全的文件交换解决方案。 一、FileLink的核心…

基本定时器的预分频器和技术周期的计算

从表中可见APB1和APB2他们的总线频率和时钟频率则是不一样的 APB1的总线频率是42MHZ 定时器的时钟频率则为84MHZ APB2的总线频率则为84MHZ 定时器则为168MHZ 如我们要使用某个寄存器则我们需要了解他们的定时器的频率则为多少 了解后则进行计算所需要的时间 列如:配置定时…

【CSS in Depth 2 精译_032】5.4 Grid 网格布局的显式网格与隐式网格(上)

当前内容所在位置(可进入专栏查看其他译好的章节内容) 第一章 层叠、优先级与继承(已完结) 1.1 层叠1.2 继承1.3 特殊值1.4 简写属性1.5 CSS 渐进式增强技术1.6 本章小结 第二章 相对单位(已完结) 2.1 相对…

揭秘隐世秘学与千门八将的智慧,为什么说是你人生必学?

引言 在浩瀚的人类文化长河中,隐藏着无数神秘的隐世秘学,它们或源于古老的传说,或深植于民间的智慧之中。这些秘学不仅承载着人类对未知世界的探索与想象,更蕴含着丰富的哲理与策略。其中,“千门八将”以其独特的智慧体…

ITU标准引领车内通讯新纪元

在现代汽车科技更迭的今天,车内通讯与免提通话系统的性能与稳定性成为了消费者购车时不可忽视的重要因素。随着国际电信联盟(ITU)一系列标准的推出,车内通讯体验正迈向新的高度。本文将深入探讨ITU-T P.1100、P.1110、P.1120、P.1…

3D建模:Agisoft Metashape Professional 详细安装教程分享 Mac/win

Agisoft Metashape中文版(以前称为 PhotoScan)是一款独立软件产品,可对数字图像进行摄影测量处理并生成 3D 空间数据,用于 GIS 应用程序、文化遗产文献和视觉效果制作以及各种比例的物体的间接测量。 明智地实施数字摄影测量技术…

Qt/C++ 多线程同步机制详解及应用

在多线程编程中,线程之间共享资源可能会导致数据竞争和不一致的问题。因此,采用同步机制确保线程安全至关重要。在Qt/C中,常见的同步机制有:互斥锁(QMutex、std::mutex)、信号量(QSemaphore&…

数据结构--单链表创建、增删改查功能以及与结构体合用

一、作业要求 单链表操作,要求节点是结构体类型,实现以下功能: 1.尾插学生 2.任意位置插入学生 3.任意位置删除学生 4.逆置单链表 5.学生按学号排序 6.销毁单链表 二、实现过程 1.代码如下: (1)头…

scanning folder for git repositories 当前没有源代码管理提供程序进行注册

这个问题困扰了我好几天。尝试了各种方法,虽然有了解决方法 。但是感觉根本原因还是没找到。解决方案是更改git的 openRepositoryInParentFolders 为always 。我之所以觉着没找到根本原因是因为 我远程另一个主机仍然使用prompt 确是正常的。 解决方案原文 https://…

数据防泄密系统有哪些|盘点2024年8款好用的防泄密系统!

“安全重于泰山,数据泄露如蚁穴溃堤。 ”在信息化高速发展的今天,数据已成为企业的核心资产,其安全性直接关系到企业的生存与发展。 因此,构建一套高效、全面的数据防泄密系统显得尤为重要。 本文将为您盘点2024年几款好用的数据…

FastDFS的docker部署及实现头像上传

FastDFS的使用并实现头像上传 一、FastDFS概述二、安装FastDFS1. 拉取镜像2. 安装tracker3. 安装storage4. NGINX服务启动三、配置和依赖配置依赖四、头像上传一、FastDFS概述 概述 上传交互过程 两个服务:Tracker Server 和Storage Server Tracker Server 跟踪服务,负责调…

②大缓存ModbusRTU485数据集中采集器寄存器线圈重映射从站并发采集Modbus 串口RS485 转 RS485

大缓存ModbusRTU485数据集中采集器寄存器线圈重映射从站并发采集https://item.taobao.com/item.htm?ftt&id811821574300 关于产品的布线图和配置说明 以一分4路(MS-A1-C041)为例 布线图 RS485 在点到多点通信时,为了防止信号的反射和干…

《线性代数》学渣笔记

文章目录 1 行列式1.1 克拉默法则1.2 基本性质1.3 余子式 M i j M_{ij} Mij​1.4 代数余子式 A i j ( − 1 ) i j ⋅ M i j A_{ij} (-1)^{ij} \cdot M_{ij} Aij​(−1)ij⋅Mij​1.5 具体型行列式计算(化为基本型)1.5.1 主对角线行列式:主…

MMD模型及动作一键完美导入UE5-IVP5U插件方案(二)

1、下载并启用IVP5U插件 1、下载IVP5U插件, IVP5U,点击Latest下载对应引擎版本,将插件放到Plugins目录,同时将.uplugin文件的EnableByDefault改为false 2、然后通过Edit->Plugins启用插件 2、导入pmx模型 1、直接在Content的某个目录拖入pmx模型,选择默认参数 2、…

13年408计算机考研-计算机网络

第一题: 解析:OSI体系结构 OSI参考模型,由下至上依次是:物理层-数据链路层-网络层-运输层-会话层-表示层-应用层。 A.对话管理显然属于会话层, B.数据格式转换,是表示层要解决的问题,很显然答案…

使用Python和OpenCV生成灰阶图像

代码如下: import cv2 import numpy as npimg np.zeros((256, 256), np.uint8)for i in range(0,16):for j in range(0,16):img[i*16:(i1)*16][j*16:(j1)*16]i*16jcv2.imwrite(result.jpg, img) 效果如下:

新能源汽车充电桩怎么选?

新能源汽车是我国七大战略性新兴产业之一,已成为汽车产业转型升级的重要推动力。毫无疑问。充电桩作为我国新能源汽车产业链下游的重要环节,在国家政策的大力支持和市场需求的带动下,有着非常广阔的前景。安科瑞叶西平187-06160015 新能源汽…

科研服务新高度:表观组学的一站式实验服务

生物信息实验室致力于分子育种技术的研发和在生物医学研究领域的应用,实验室以分子遗传学实验技术和高通量生物信息分析技术为核心,建立了基因组、表观组、互作组的全面科研服务体系。50余位教授、研究员智库专家,您身边的分子实验专家!

哈里斯表态:承诺支持加密货币投资!

KlipC报道:近日,在曼哈顿举办的一次筹款活动中,美国副总统哈里斯首次公开表态,如果当选,她将支持增加对人工智能和加密货币行业的投资。 哈里斯表示,“我将把劳工、小企业创始人、创新者和大公司团结在一起…