爬取Boss直聘网站,获取岗位信息

 目录

一、分析网站

二、源码

一、分析网站

这是Boss直聘网站的首页

比如说我们需要一个市场营销的工作岗位信息(如下图):

 

我们发现有很多的岗位,接下来分析网页,右击网页,点击检查或者按F12,选择network或者是网络,找到下图所示位置

我们继续看每个岗位的url就会发现其中的参数就在上面体现

其中只有encryptJobId、lid、securityId在变化,所以在此页面只需要获取到这几个值,就可以得到该页面的所以岗位的url

接下来分析岗位页面,同样右击网页,点击检查或者按F12

我们需要的岗位名称、岗位薪资、岗位描述、以及岗位职责

分析页面源代码

 

我们可以通过 BeautifulSoup和正则表达式来获取到页面信息

二、源码

import requests
import re
from bs4 import BeautifulSoup
import pandas as pd

# 需要更换Cookie
headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36',
        'Cookie': ''
}

def get_urls():
    url = r'https://www.zhipin.com/wapi/zpgeek/search/joblist.json?scene=1&query=%E5%B8%82%E5%9C%BA%E8%90%A5%E9%94%80&city=100010000&experience=&payType=&partTime=&degree=&industry=&scale=&stage=&position=&jobType=&salary=&multiBusinessDistrict=&multiSubway=&page=1&pageSize=30'
    global headers

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

    urls = []
    if response.json()['message'] == 'Success':
        zpData = response.json()['zpData']
        joblist = zpData['jobList']
        for job in joblist:
            joburl = 'https://www.zhipin.com/job_detail/' + job['encryptJobId'] + '.html?' +\
                     'lid=' + job['lid'] + '&securityId=' + job['securityId'] + '&sessionId='
            urls.append(joburl)
        print(urls)
        return urls

def get_data():
    urls = get_urls()
    global headers
    
    
    for url in urls:
        response = requests.get(url=url, headers=headers)
        # print(response.text)
        data_list = BeautifulSoup(response.text, 'lxml')
        # 岗位关键词
        keyword_list = data_list.find(class_='job-keyword-list').find_all('li')
        job_keyword_list = []
        for job_keyword in keyword_list:
            job_keyword = str(job_keyword).replace("<li>", "").replace("</li>", "")
            job_keyword_list.append(job_keyword)
        # 岗位职责
        job_sec_text = str(data_list.find(class_='job-sec-text'))
        job_sec_text_list = re.findall('\d、+(.*?);', job_sec_text)
        # 岗位薪资
        salary_str = str(data_list.find(class_='salary'))
        salary = re.findall('<span class="salary">(.*?)<\/span>', salary_str)[0]


if __name__ == '__main__':
    get_urls()

注意:当短时间内爬取次数太多,会访问不了,这时需要更换Cookie, 你也可以使用time.sleep()来降低爬虫时间,来保证不会认为是爬重

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值