使用Playwright和curl_cffi爬取BOSS直聘职位信息详解

【技术干货】使用Playwright和curl_cffi爬取BOSS直聘职位信息详解(附完整代码与流程图)


在日常数据分析、招聘市场研究、薪资水平调查等场景中,招聘网站的数据非常有价值。本文将详细介绍如何使用Python结合Playwright与curl_cffi库,爬取BOSS直聘网站上的职位信息,助你快速掌握网页抓取与数据分析的技巧。


📌 一、环境准备

首先需要安装必要的Python库:

pip install playwright curl_cffi pandas lxml openpyxl
playwright install msedge

这里安装了:

  • playwright:无头浏览器自动化工具
  • curl_cffi:用于伪装请求,绕过网站的反爬虫策略
  • pandas:处理数据,保存至Excel
  • lxml:解析HTML页面内容
  • openpyxl:支持pandas保存Excel文件

📌 二、整体爬虫设计流程

下图是本爬虫程序的设计流程图,帮助你直观理解程序结构:

初始化环境与浏览器
打开职位搜索页面
自动更新cookie
发送职位列表请求
获取职位ID与详情链接
访问职位详情页面抓取数据
数据清洗并存储到列表
保存数据到Excel

📌 三、代码功能分解与分析

🛠️ 1. 初始化环境与浏览器设置

class BossZPCrawler:
    def __init__(self):
        self.headers = headers
        self.playwright = sync_playwright().start()
        self.browser = self.playwright.chromium.launch(
            channel="msedge",
            headless=False,
            args=["--no-sandbox", "--disable-blink-features=AutomationControlled"]
        )
        self.context = self.browser.new_context()
        self.page = self.context.new_page()

说明

  • 使用微软Edge浏览器,开启可视化(headless=False)便于观察抓取过程。
  • 参数--disable-blink-features=AutomationControlled用来降低被网站反爬的风险。

🛠️ 2. 自动更新Cookies突破反爬机制

BOSS直聘有较强的反爬虫机制,需要频繁更新cookie。

def update_cookies(self):
    while True:
        try:
            self.page.goto("https://www.zhipin.com/web/geek/job?query=%E5%B0%8F%E7%A8%8B%E5%BA%8F&city=101280600", timeout=15000)
            cookies = self.context.cookies()
            cookie_str = '; '.join([f"{c['name']}={c['value']}" for c in cookies])
            self.headers['cookie'] = cookie_str
            print("Cookie更新成功:", cookie_str)
            break
        except Exception as e:
            print("Cookie更新失败:", e)
            time.sleep(60)

说明
该方法会自动打开指定页面,从页面中提取cookie更新到headers中。


🛠️ 3. 抓取职位列表数据

使用curl_cffi库伪装真实浏览器请求:

def crawling_list(self, keyword, citycode, page):
    params = {
        'scene': '1',
        'query': keyword,
        'city': citycode,
        'page': page,
        'pageSize': '30'
    }
    while True:
        try:
            self.update_cookies()
            response = requests.get('https://www.zhipin.com/wapi/zpgeek/search/joblist.json', params=params, headers=self.headers, impersonate="chrome124")
            html = response.json()
            if '异常' not in response.text:
                break
            time.sleep(3)
        except Exception as e:
            time.sleep(3)

说明

  • 每次请求前调用update_cookies更新Cookie。
  • 设置了impersonate="chrome124"伪装请求,避免被拦截。

🛠️ 4. 抓取职位详情页面数据

def get_introduce(self, url):
    retry_count = 0
    while retry_count < 3:
        try:
            self.page.goto(url, timeout=15000, wait_until='domcontentloaded')
            html_content = self.page.content()
            html = etree.HTML(html_content)
            if '异常' not in html_content:
                break
            raise Exception("异常访问")
        except Exception as e:
            print(f"请求失败: {str(e)},重试...")
            time.sleep(10)
            retry_count += 1

    job_text = ''.join(html.xpath('//div[@class="job-detail-section"]//text()')).strip()
    return job_text

说明

  • 使用Playwright访问详情页,能很好地模拟用户访问,避免被反爬机制识别。

🛠️ 5. 数据存储到Excel

@staticmethod
def save_to_excel(data, filename="jobs.xlsx"):
    df = pd.DataFrame(data)
    df.to_excel(filename, index=False)

说明

  • 数据利用Pandas快速存储成Excel,便于后续数据分析。

📌 四、运行程序与数据结果示例

🚀 执行爬虫程序:

if __name__ == '__main__':
    crawler = BossZPCrawler()
    all_job_data = []
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")

    filename = f"jobs_{timestamp}.xlsx"
    for i in range(1, 5):
        job_data = crawler.crawling_list(keyword="小程序开发", citycode="101280600", page=i)
        all_job_data.extend(job_data)
        print(f"第{i}页爬取完成,获取{len(job_data)}条记录")
        time.sleep(random.uniform(1, 3))

    crawler.save_to_excel(all_job_data, filename)
    print(f"数据已保存到 {filename},共爬取到 {len(all_job_data)} 条记录")

🗃️ 生成的Excel示例:

jobIdjobNamesalarycityNameurlbrandNamejobtext
xxx小程序开发10-15K深圳-南山区XX科技岗位职责:…

📌 五、注意事项与反爬技巧总结

  • 频繁更新Cookie:避免请求被拦截。
  • Playwright模拟真实浏览器:有效规避大部分反爬机制。
  • 合理的请求频率:防止被服务器检测为异常访问。

📌 六、思维导图总结:

  • BOSS直聘职位爬虫
    • 环境准备
      • Python依赖安装
      • 浏览器环境配置(Playwright)
    • 反爬处理
      • 自动更新Cookie
      • Playwright模拟浏览器
      • curl_cffi伪装请求
    • 数据抓取流程
      • 职位列表接口请求
      • 职位详情页面解析
    • 数据清洗与存储
      • Pandas处理数据
      • 存储为Excel文件

🎯 总结

本文完整展示了如何使用Python和现代化的自动化技术(Playwright和curl_cffi)抓取BOSS直聘职位数据,并详细讲解了每一步的作用与原理,希望对你的网络爬虫开发和数据分析工作有所帮助。

实践出真知,动手尝试吧!

代码:https://github.com/chengguo1/boss/tree/main

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值