python爬虫:从拉勾网爬取数据分析职位信息

在数据驱动的时代背景下,数据分析职位的需求日益增长。为了更好地理解市场上对数据分析人才的需求,我编写了一个Python爬虫程序,自动从招聘网站拉勾网抓取相关职位信息。

1、导入库:

import requests
import json
import csv
import time
  • requests:用于发送HTTP请求。
  • json:用于处理JSON格式的数据。
  • csv:用于写入CSV文件。
  • time:用于在请求之间添加延迟,避免过于频繁的请求。

2、定义爬取数据函数:

定义一个名为get_lagou_data的函数,接收一个URL作为参数:

def get_lagou_data(url):
    # 构建请求头
    headers = {
        'origin': 'https://www.lagou.com',
        'referer': 'https://www.lagou.com/jobs/list_%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E5%B8%88/p-city_0?',
        'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36',
        'cookie': 'you cookie'
    }

    # 用data进行分页爬取
    for i in range(1, 1001):
        data = {
            'first': 'true',
            'pn': i,
            'kd': '数据分析'
        }

        # 请求网页
        response = requests.post(url=url, headers=headers, data=data, timeout=3)
        print(response.text)
        time.sleep(3)  # 休息一下

        # json.loads 用于解码 JSON 数据。该函数返回 Python字段的数据类型
        response = json.loads(response.content)

        # 获取15条数据
        result = response['content']['positionResult']['result']

        # 获取每条招聘岗位里面的详细信息
        for i in result:
            position_name = i['positionName']  # 职位名称
            company_full_name = i['companyFullName']  # 公司名称
            industryField = i['industryField']  # 行业
            city = i['city']  # 城市
            salary = i['salary']  # 薪水
            work_year = i['workYear']  # 工作年限
            education = i['education']  # 教育背景
            position_advantage = i['positionAdvantage']  # 岗位优势
            skillLables = i['skillLables']

            # 存储数据, 先在当前文件下创建一个叫‘lagou_datas.csv’的文件
            # 'a' 追加写入,;encoding设置编码格式,防止乱码 ;newline是为了解决写入时新增行与行之间的一个空白行问题
            with open('D:/shuju/lagou_datas.csv', 'a', encoding='utf_8_sig', newline='') as f:
                # 写入数据
                csv_write = csv.writer(f)
                # csv_write.writerow(["职位名称", "公司名称", "行业", "城市", "薪资", "工作年限", "学历要求", "福利","技能要求"])
                # 按照以下行顺序写入,是一个列表
                csv_write.writerow([position_name, company_full_name, industryField,city, salary,
                                    work_year, education, position_advantage,skillLables])
        time.sleep(3)  # 休息一下

在函数内部,首先构建了一个headers字典,包含了一些HTTP请求头信息,如:

  • origin:请求发起的源地址。
    在这里插入图片描述

  • referer:从哪个页面链接过来的。
    在这里插入图片描述

  • user-agent:用户代理,即浏览器标识。
    使用快捷键 Ctrl+Shift+IF12 打开开发者工具
    在输入框中输入【职位 (这里的示例为数据分析)】进行搜索,抓包分析,可以看到 user-agent信息就包含在其中
    在这里插入图片描述

  • cookie:包含了用户会话信息的cookie字符串。
    使用快捷键 Ctrl+Shift+IF12 打开开发者工具
    在输入框中输入【职位 (这里的示例为数据分析)】进行搜索,抓包分析,可以看到cookie信息就包含在其中
    在这里插入图片描述
    分页爬取:使用一个循环来模拟分页爬取,从第1页到第1000页,循环中使用range(1, 1001)

提取职位信息:从响应中提取所需的职位信息,如职位名称、公司名称、行业、城市、薪水等

保存信息:把爬取下来的职位信息保存在D:/shuju/lagou_datas.csv

完整代码:

# 导入包
import requests
import json
import csv
import time


def get_lagou_data(url):
    # 构建请求头
    headers = {
        'origin': 'https://www.lagou.com',
        'referer': 'https://www.lagou.com/jobs/list_%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90%E5%B8%88/p-city_0?',
        'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.93 Safari/537.36',
        'cookie': 'you cookie'
    }

    # 用data进行分页爬取
    for i in range(1, 1001):
        data = {
            'first': 'true',
            'pn': i,
            'kd': '数据分析'
        }

        # 请求网页
        response = requests.post(url=url, headers=headers, data=data, timeout=3)
        print(response.text)
        time.sleep(3)  # 休息一下

        # json.loads 用于解码 JSON 数据。该函数返回 Python字段的数据类型
        response = json.loads(response.content)

        # 获取15条数据
        result = response['content']['positionResult']['result']

        # 获取每条招聘岗位里面的详细信息
        for i in result:
            position_name = i['positionName']  # 职位名称
            company_full_name = i['companyFullName']  # 公司名称
            industryField = i['industryField']  # 行业
            city = i['city']  # 城市
            salary = i['salary']  # 薪水
            work_year = i['workYear']  # 工作年限
            education = i['education']  # 教育背景
            position_advantage = i['positionAdvantage']  # 岗位优势
            skillLables = i['skillLables']

            # 存储数据, 先在当前文件下创建一个叫‘lagou_datas.csv’的文件
            # 'a' 追加写入,;encoding设置编码格式,防止乱码 ;newline是为了解决写入时新增行与行之间的一个空白行问题
            with open('D:/shuju/lagou_datas.csv', 'a', encoding='utf_8_sig', newline='') as f:
                # 写入数据
                csv_write = csv.writer(f)
                # csv_write.writerow(["职位名称", "公司名称", "行业", "城市", "薪资", "工作年限", "学历要求", "福利","技能要求"])
                # 按照以下行顺序写入,是一个列表
                csv_write.writerow([position_name, company_full_name, industryField,city, salary,
                                    work_year, education, position_advantage,skillLables])
        time.sleep(3)  # 休息一下


# 主程序
if __name__ == '__main__':
    # Ajax的URL
    url = "https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false"

    # 传入URL,调用函数
    get_lagou_data(url)

注意事项

  • 该爬虫程序可能受到拉勾网反爬虫机制的限制。
  • 网站的结构变化可能导致解析路径失效。
  • 使用的cookie需要是有效的用户会话信息。
  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值