You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python requests爬取SEGA英国职位时AJAX内容加载不全求助

解决SEGA职位页面AJAX分页爬取问题

问题原因

这个页面的职位采用AJAX分页加载机制,默认只渲染第一页的25条数据,剩余内容需要通过滚动/加载更多操作触发POST请求获取后续分页数据,直接请求原页面只能拿到第一页内容。

解决步骤

  1. 抓包分析分页接口
    打开浏览器开发者工具(F12)→ 切换到Network标签,滚动页面到底部,观察加载更多时的请求:
  • 请求方式:POST
  • 请求地址:https://careers.sega.co.uk/vacancies/search
  • 核心参数:page(页码,从1开始)、per_page(每页条数,默认25)、f[0]=country:United Kingdom(英国地区筛选条件)
  1. 修改代码循环请求分页
    通过循环递增page参数,请求每一页的职位数据,直到返回结果为空,说明已获取全部职位。

完整代码示例

import requests
from lxml import html
import time

def SEGA():
    data = []
    base_api = "https://careers.sega.co.uk/vacancies/search"
    headers = {
        'Accept': 'application/json, text/javascript, */*; q=0.01',
        'X-Requested-With': 'XMLHttpRequest',
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
        'Referer': 'https://careers.sega.co.uk/vacancies?f%5B0%5D=country%3AUnited%20Kingdom',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36'
    }
    current_page = 1
    per_page = 25

    while True:
        payload = {
            'f[0]': 'country:United Kingdom',
            'page': str(current_page),
            'per_page': str(per_page),
            'sort': 'created_at:desc'
        }
        # 发送POST请求
        resp = requests.post(base_api, headers=headers, data=payload)
        # 解析返回的HTML片段
        tree = html.fromstring(resp.content)
        # 提取职位标题
        job_titles = tree.xpath('//div[@class="vacancy-item"]/div/h3/a/text()')
        
        if not job_titles:
            # 没有数据,终止循环
            break
        
        # 整理数据
        for title in job_titles:
            data.append([title.strip(), "Brentford", "SEGA"])
        
        # 递增页码,加短暂延迟避免反爬
        current_page += 1
        time.sleep(1)
    
    return data

# 测试调用
if __name__ == "__main__":
    all_vacancies = SEGA()
    print(f"共抓取到 {len(all_vacancies)} 个职位")
    for item in all_vacancies:
        print(item)

关键说明

  • 改用POST请求分页API,而非原页面的GET请求
  • 通过current_page递增实现分页遍历,空结果判断终止循环
  • 添加User-Agent和time.sleep()降低反爬风险
  • 解析返回的HTML片段提取数据,采用class定位的XPath更稳定

内容的提问来源于stack exchange,提问作者scotmanDavid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 20:27:13