使用Python requests爬取SEGA英国职位时AJAX内容加载不全求助
解决SEGA职位页面AJAX分页爬取问题
问题原因
这个页面的职位采用AJAX分页加载机制,默认只渲染第一页的25条数据,剩余内容需要通过滚动/加载更多操作触发POST请求获取后续分页数据,直接请求原页面只能拿到第一页内容。
解决步骤
- 抓包分析分页接口
打开浏览器开发者工具(F12)→ 切换到Network标签,滚动页面到底部,观察加载更多时的请求:
- 请求方式:POST
- 请求地址:
https://careers.sega.co.uk/vacancies/search - 核心参数:
page(页码,从1开始)、per_page(每页条数,默认25)、f[0]=country:United Kingdom(英国地区筛选条件)
- 修改代码循环请求分页
通过循环递增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
相关产品推荐
相关产品推荐

