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

目录

背景

为什么要抓取职位信息

怎么抓取职位信息

代码示例

被反爬怎么办

使用代理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服务商,是一个比较关键的选择,也决定了是否能够顺利进行爬取。

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值