Python 爬取拉勾招聘信息

本文讲述了如何使用Python爬取拉勾网的招聘信息。在分析页面和数据请求后,发现需要通过AJAX请求和携带特定cookie来获取数据。经过处理请求参数和城市编码,实现了动态爬取不同城市和职位的招聘信息,并将结果保存为txt文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Python 爬取拉勾招聘信息

故事背景

最近有个好哥们啊浪迫于家里工资太低,准备从北方老家那边来深圳这边找工作,啊浪是学平面设计的知道我在深圳这边于是向我打听深圳这边平面设计薪资水平,当时我有点懵逼这个行业不熟悉啊咋搞呢,准备打开招聘网站先看看再说打开网站输入招聘职位发先量还挺大,这样慢慢看不行啊效率太低啦,咋是程序员啊直接把数据拉下来不就行啦于是有啦这篇博客。

技术实现

用到的库

import os
import json
import urllib
import requests

页面分析

数据地址:https://www.lagou.com/

当我在 chrom 中输入拉勾网站查看页面源码时发现页面上的数据并没有直接显示在源码上。推断可能是使用 AJAX 异步加载数据,当我打开 chrom 开发者工具在 network 中查看 XHR 时发现一个 https://www.lagou.com/jobs/positionAjax.json?city=%E6%B7%B1%E5%9C%B3&needAddtionalResult=false 请求点开 response 果然数据都在这个请求中返回。

在这里插入图片描述

返回的数据格式如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NRpqsHcD-1605319503100)(/Users/wollens/Library/Application Support/typora-user-images/image-20201114094558145.png)]

可以发现我们需要的数据都存放在 result 中,于是准备直接获取数据但是使用 request 去模拟请求发现每次都会被拦截。因为拉勾在不登录的情况下浏览器也能获取数据应该不是用户级别的拦截,猜想可能是在 cookie 层面做的限制,发现请求没有携带网站的 cookie 直接拦截

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XG5ZUG2R-1605319503101)(/Users/wollens/Library/Application Support/typora-user-images/image-20201114095322932.png)]

获取请参数

def get_request_params(city, city_num):
    req_url = 'https://www.lagou.com/jobs/list_{}/p-city_{}?&cl=false&fromSearch=true&labelWords=&suginput='.format(urllib.parse.quote(city), city_num)
    ajax_url = 'https://www.lagou.com/jobs/positionAjax.json?px=default&city={}&needAddtionalResult=false'.format(urllib.parse.quote(city))
    headers = headers = {
   
        "Accept": "application/json, text/javascript, */*; q=0.01",
        "Referer": "https://www.lagou.com/jobs/list_{}/p-city_{}?px=default#filterBox".format(urllib.parse.quote(city), city_num),
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
                    "(KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36",
    }
    return req_url, ajax_url, headers

于是在 请求中加上 cookie, 代码如下:

def get_cookie(city):
    city_num = get_city_num_by_name(city)
    req_url, _, headers = get_request_params(city, city_num)
    s = requests.
要使用Python爬取拉勾网(Lagou.com)的招聘信息,可以使用一些常用的爬虫库,如`requests`和`BeautifulSoup`。以下是一个简单的示例,展示了如何爬取拉勾网上的招聘信息: 1. **安装必要的库**: 首先,确保安装了`requests`和`BeautifulSoup`库。如果未安装,可以使用以下命令进行安装: ```bash pip install requests pip install beautifulsoup4 ``` 2. **编写爬虫代码**: 下面是一个简单的爬虫代码示例,用于爬取拉勾网上的招聘信息: ```python import requests from bs4 import BeautifulSoup import json def get_lagou_jobs(keyword, city): headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36', 'Referer': 'https://www.lagou.com/', 'Cookie': 'your_cookie_here' # 需要替换为实际的Cookie } url = 'https://www.lagou.com/jobs/positionAjax.json' params = { 'city': city, 'needAddtionalResult': 'false', 'isSchoolJob': '0' } data = { 'first': 'false', 'pn': 1, 'kd': keyword } response = requests.post(url, headers=headers, params=params, data=data) if response.status_code == 200: json_data = response.json() results = json_data.get('content', {}).get('positionResult', {}).get('result', []) for job in results: print(f"职位名称: {job.get('positionName')}") print(f"公司名称: {job.get('companyFullName')}") print(f"薪资: {job.get('salary')}") print(f"工作地点: {job.get('city')}") print(f"经验要求: {job.get('workYear')}") print(f"学历要求: {job.get('education')}") print("-----------------------------------") else: print("请求失败") if __name__ == "__main__": keyword = "Python" city = "北京" get_lagou_jobs(keyword, city) ``` **注意事项**: - **Cookie**:拉勾网对爬虫有一定的反爬机制,可能需要提供有效的Cookie才能获取数据。你可以通过浏览器开发者工具获取Cookie。 - **反爬机制**:拉勾网可能会有更多的反爬机制,如验证码、IP限制等。实际使用中可能需要更复杂的处理,如使用代理、模拟浏览器等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值