python爬虫——怎么抓取职位信息

news2024/10/7 20:37:04

目录

背景

为什么要抓取职位信息

怎么抓取职位信息

代码示例

被反爬怎么办

使用代理IP进行爬取

总结


背景

高考刚结束,马上又到了大学生毕业的时候了,各大厂也开始了一波招工潮了,想知道大厂或竞争对手都招些什么人,有什么需求,于是打算爬点职位信息参考下。

为什么要抓取职位信息

抓取职位信息有多种用途,其中一些常见的用途包括:

1. 潜在求职者分析:可以通过大数据技术分析人才流动趋势,在哪些城市或公司聚集了多少求职者,有助于企业了解市场竞争状况以及不同城市或行业的人才供需情况。

2. 薪资分析:通过职位信息可以获取不同职位的薪资水平,有助于了解行业薪资标准,提高员工福利和薪酬竞争力,吸引人才。

3. 行业趋势分析:通过职位信息可以了解当前所处行业或行业内的热门职位,将来行业的发展趋势和方向,有助于企业制定战略方案和拓展业务。

4. 竞争情报分析:可以了解竞争对手或其他企业的组织架构、员工数量、招聘需求等关键信息,有助于企业了解市场状况和竞争对手的战略规划,提高企业的竞争力。

怎么抓取职位信息

抓取职位信息可以通过网络爬虫技术实现。抓取流程如下:

1. 分析目标网站:首先需要确定目标网站,并观察网站构造和源码,确定需要抓取的职位信息类型和位置。

2. 发送HTTP请求:使用 Python requests 库构造 HTTP 请求,获取页面信息。

3. 解析页面:使用 Python 库 BeautifulSoup 或者正则表达式等工具解析网页。

4. 提取信息:从网页中提取所需职位信息、公司信息及它们的URL等相关信息。

5. 存储信息:将提取到的职位信息进行存储,可以存储在数据库或文件中。

6. 处理反爬:在抓取职位信息时,网站可能会进行反爬措施,需要分析网站反爬机制,采取一定的策略避免被反爬而导致无法获取数据。

需要注意的是,抓取职位信息需要遵守法律法规、网站规则和道德准则,避免抓取到敏感信息或侵犯他人隐私等问题。

代码示例

这里以爬取某勾网职位信息为例,示例代码如下:

import requests

from bs4 import BeautifulSoup

import json

import time



def get_positions(city, keyword=None, page_num=1):

    """获取指定城市和职位关键词的职位信息"""

    user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36 Edg/92.0.902.73'

    headers = {'User-Agent': user_agent}

    url = f'https://www.*****.com/jobs/positionAjax.json?needAddtionalResult=false&city={city}&kd={keyword}&pn={page_num}'

    response = requests.get(url, headers=headers)

    if response.status_code == 200:

        result = json.loads(response.text)



        # 解析职位信息

        positions = []

        for job in result['content']['positionResult']['result']:

            position = {}

            position['position_name'] = job['positionName']  # 职位名称

            position['salary'] = job['salary']  # 薪资

            position['company_name'] = job['companyFullName']  # 公司名称

            position['work_year'] = job['workYear']  # 工作年限

            position['education'] = job['education']  # 学历

            position['position_advantage'] = job['positionAdvantage']  # 职位优势



            positions.append(position)



        return positions

    else:

        print(f'请求错误,状态码:{response.status_code}')



if __name__ == '__main__':

    city = '广州'

    keyword = 'Python'

    for page_num in range(1, 6):

        positions = get_positions(city=city, keyword=keyword, page_num=page_num)

        if positions:

            for position in positions:

                print(position)

            

            # 每爬完一页,就休眠一段时间,避免被反爬

            time.sleep(3)

此代码通过分析拉勾网的接口来获取职位信息。可以传入城市名和职位关键词来筛选职位,同时支持分页获取信息。如果想要将职位信息存储在数据库或者文件中,可以将获取到的 positions 写入数据库或文件。相应地,也可以通过增加访问间隔时间、使用代理 IP 等方式来支持反爬。

被反爬怎么办

在爬取职位信息的过程中,如果被目标网站检测到并且反爬,有一些常见的应对措施如下:

1. 降低访问频率:合理减少请求间隔时间,降低对目标网站的访问频率,以防被检测到。

2. 使用代理IP:通过使用代理IP来模拟多个访问来源,降低单个IP被检测到的概率。

3. 更换 User-Agent:可以在请求头中改变 User-Agent 的值,模拟不同的浏览器类型,来提高爬虫的隐匿性。

4. 登陆账号:有些网站对未登录用户的爬取有限制,可以使用网站提供的登陆功能,获取更多数据。

5.对抗反爬:一些情况下,网站的反爬手段比较强大,可以通过一些技术手段绕过反爬机制,例如使用图像识别技术识别验证码,模拟人工操作等。

使用代理IP进行爬取

使用代理IP是绕过反爬限制的有效手段之一。代理IP可以提供多个访问来源,避免对目标网站请求过于集中,同时可以提高访问隐匿性,减少被屏蔽的概率。下面是一个使用代理IP来爬取拉勾网职位信息的示例代码:

import requests

from bs4 import BeautifulSoup

import json

import time



# 设置代理IP列表

proxies = [

    {'http': 'http://123.123.123.168:16888', 'https': 'http://123.123.123.168:16888'},

    {'http': 'http://123.123.123.168:16888', 'https': 'http://123.123.123.168:16888'},

    {'http': 'http://123.123.123.168:16888', 'https': 'http://123.123.123.168:16888'},

    # 可以添加更多的代理IP,也可以通过站大爷的API接口源源不断的获取代理IP

]



def get_positions(city, keyword=None, page_num=1, use_proxy=True):

    """获取指定城市和职位关键词的职位信息"""

    user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36 Edg/92.0.902.73'

    headers = {'User-Agent': user_agent}

    url = f'https://www.*****.com/jobs/positionAjax.json?needAddtionalResult=false&city={city}&kd={keyword}&pn={page_num}'



    # 使用代理IP访问

    if use_proxy:

        proxy = random.choice(proxies)

        response = requests.get(url, headers=headers, proxies=proxy)

    else:

        response = requests.get(url, headers=headers)



    if response.status_code == 200:

        result = json.loads(response.text)



        # 解析职位信息

        positions = []

        for job in result['content']['positionResult']['result']:

            position = {}

            position['position_name'] = job['positionName']  # 职位名称

            position['salary'] = job['salary']  # 薪资

            position['company_name'] = job['companyFullName']  # 公司名称

            position['work_year'] = job['workYear']  # 工作年限

            position['education'] = job['education']  # 学历

            position['position_advantage'] = job['positionAdvantage']  # 职位优势



            positions.append(position)



        return positions

    else:

        print(f'请求错误,状态码:{response.status_code}')



if __name__ == '__main__':

    city = '广州'

    keyword = 'Python'

    for page_num in range(1, 6):

        positions = get_positions(city=city, keyword=keyword, page_num=page_num, use_proxy=True)

        if positions:

            for position in positions:

                print(position)

            

            # 每爬完一页,就休眠一段时间,避免被反爬

            time.sleep(3)

此代码通过定义了一个代理IP列表,并使用 `requests` 库的 `proxies` 参数来随机选择代理IP访问目标网站,进而避免单个IP访问过于频繁被目标网站封锁。

需要注意,代理IP的质量和稳定性会直接影响到爬取效果,因此在选择代理IP时需要注意选择稳定性较高的服务商、IP 质量较高的代理IP,比如站大爷代理IP。

总结

在进行职位信息爬取时,需要先确定目标网站,并通过分析页面结构和抓包等方式获取到页面 API 接口。接着,通过发送 HTTP 请求获取页面信息,并使用 BeautifulSoup 或正则表达式等工具解析页面获取所需信息。

在整个爬取过程中,应该注意遵守法律法规和道德准则,避免侵犯他人隐私和抓取敏感信息等问题。

同时,对于反爬机制的应对,可以采取一些策略,如降低访问频率、使用代理 IP、更换 User-Agent 、登陆账号、对抗反爬等方法。选择稳定性较高的代理IP服务商,是一个比较关键的选择,也决定了是否能够顺利进行爬取。

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

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

相关文章

来了解一下这几个网络设备日志级别分别都适用在何种场景?

在华为设备中,涉及到日志的,我们经常会在日志级别上迷糊,本文就给大家介绍8种日志级别以及每个级别适用的场景。 1. Emergency(紧急) 紧急级别的日志是指最高级别的日志,表示系统遇到了严重的错误或故障&…

JMeter+Ant+jenkins搭建接口自动化测试环境

目录 前言: 1.ant简介 2. 构建ant环境 3.JMeter与Ant集成 4. 报告优化 5.jenkins持续集成 前言: JMeter是一个开源的性能测试工具,可以用于测试Web应用程序或API接口的性能,支持多种通信协议和数据格式。Ant是一个构建工具&…

ui自动化 SeleniumBase

目录 前言: git克隆 校验邮件的案例: 注意事项: 前言: SeleniumBase是一个基于Selenium WebDriver的Python框架,用于UI自动化测试。它具有简单易用的API接口,可轻松编写测试脚本以及管理测试用例。SeleniumBase不仅提供了Web…

【LeetCode】HOT 100(10)

题单介绍: 精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。 目录 题单介绍&#…

5月总共面试31次,我人麻了....

3年测试经验原来什么都不是,只是给你的简历上画了一笔,一直觉得经验多,无论在哪都能找到满意的工作,但是现实却是给我打了一个大巴掌!事后也不会给糖的那种... 先说一下自己的个人情况,普通二本计算机专业…

华为OD机试真题 JavaScript 实现【寻找密码】【2023Q1 100分】,附详细解题思路

一、题目描述 小王在进行游戏大闯关,有一个关卡需要输入一个密码才能通过,密码获得的条件如下: 在一个密码本中,每一页都有一个由 26 个小写字母组成的若干位密码,从它的末尾开始依次去掉一位得到的新密码也在密码本…

母线保护(4)

4、母联死区保护 在各种母差保护中,存在一个共同的问题,就是死区问题。 如图,在母联合位时,当故障发生在母联断路器与母联CT之间时,故障电流由II母流向I母,I母小差有差流,判断为I母故障&#x…

yum安装nginx

Nginx介绍 Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上Nginx的并发能力确实在同类型的网页服务器中表现较好&…

电脑提示由于找不到vcomp140.dll无法继续执行代码怎么修复呢?这个三个方法可以帮到你

在我们打开游戏或者获取软件的时候,点击电脑提示由于找不到vcomp140.dll无法继续执行代码需要怎么办呢?vcomp140.dll是什么呢?相信困扰着不少小伙伴,vcomp140.dll是Microsoft Visual C Redistributable中的一个动态链接库文件&…

牛客网Java面试题及答案整理(2023年秋招最新版,持续更新)

学习如逆水行舟,尤其是 IT 行业有着日新月异的节奏,我们更要抓紧每一次可以学习和进步的机会。所以,没有撤退可言。 即使是面试跳槽,那也是一个学习的过程。只有全面的复习,才能让我们更好的充实自己,武装…

基于Java高校专业信息管理系统设计与实现(源码+lw+部署文档+讲解等)

博主介绍: ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精…

Spring Security--会话管理

就像登录qq一样,一个手机登录会将另外一个手机挤下线,这个就叫会话管理。 这个东西非常简单,在默认情况下可以登录n多次,一旦开启,就不允许登录多个。 什么是一个会话。 我们简单理解就是一个浏览器的同一个用户算一…

Redux 异步解决方案2. Redux-Saga中间件

利用Generator特性实现异步 因为Generator。结合yield yield操作符会获取右边表达示的值返回 可以用于异步变同步操作 中间件的特性: 以前的 action -> reducers -> store 现在的 action -> middleware -> reducers -> store 注意: reducer的type…

群晖云同步失败?一直卡在连接中怎么办?

群晖云同步是群晖NAS的一款基于网络的数据备份和同步服务,它可以帮助我们在不同设备之间轻松地同步文件、照片、文档等,并且支持自动化执行同步备份任务,让您的数据存储更加安全。 虽然群晖云同步能给我们带来很多便利,但是在…

yolov5 6.1 关于 tensorrt 加速的使用以及问题说明

文章目录 1. 参考连接2. 使用说明2.1 导出加速模型2.1 使用加速模型2.2 加速参数对比 3. 问题说明3.1 在 Tensorrt 8.4.1.5 版本上使用 export.py 导出失败的问题3.2 把模型文件由 best.pt 更换成加速后的 best.engine 后,执行推理时标注的类别名不正确的问题3.3 导…

面向教育机构的IT管理

多年来,高等教育见证了一些惊人的技术创新,包括远程学习、VR 和 AR 实验室、物联网等。随着技术席卷高等教育领域,机构有望高度依赖其技术基础设施,将学生的想法变为现实,以支持学习渠道并促进研究和合作。 另一方面&…

JMeter发送表单数据,响应体报错:参数校验异常

请求方式是post,请求参数就是表单形式。这个时候我们可以把请求参数写到参数里,也可以选择写到消息体数据里。 1、如果是写到参数中,那Content-Type默认就是表单格式,不需要格外添加HTTP信息头管理器。 2、如果是写到消息体数据中…

语音消息实现(聊天向)

语音消息实现记录下: SpringBootVue3客服项目,网页录制发送语音消息 Vue中使用js-audio-recorder插件实现录音功能并实现上传Blob数据到SpringBoot后台接口 2fps/recorder github地址 Recorder的API 语音测试地址 [Web] 4分钟搭建一个简洁好看的 We…

如何购买北京法拍房

1、对于有限购的法拍房来说,在没有购房者资格的前提下,请不要跟拍,就算是房子拍下来了,没办法过户的话,房子还不能算是你的,弃权则被罚保证金。2、对于没有限购的法拍房来说,在没有购房资格的前…

动态规划dp —— 24.最长湍流子数组

解释:数组中子数组中相邻数值一升一降称为湍流子数组 示例1: 1.状态表示 是什么?dp表中里的值所表示的含义就是状态表示 因为i位置是有两种情况:1.上升趋势 2.下降趋势 所以需要定义两种状态表示来把两种情况分开 f[i]表示&am…