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

从UFC过往赛事页面爬取数据遇Ajax 404,如何获取全部赛事数据?

解决UFC过往赛事数据爬取的404问题

问题根源

你用的接口URL和请求方式不对,原接口需要POST请求并携带正确的视图参数,而且Accept头设置错误,导致服务器返回404。

修正方案

  1. 调整请求方式与Headers

    • 把请求从GET改为POST,UFC的加载更多接口需要提交表单数据;
    • 将Accept头改为application/json, text/javascript, */*; q=0.01,匹配接口返回的数据格式;
    • 保留User-Agent模拟浏览器请求,避免被拦截。
  2. 添加必要的表单参数
    接口需要以下核心参数(以第一页为例):

    • view_name: event_list(指定视图名称)
    • view_display_id: past_events(指定过往赛事视图)
    • page: 0(分页页码,从0开始递增)
    • _drupal_ajax: 1(标识Ajax请求)

完整代码示例

import requests

headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/112.0',
    'Accept': 'application/json, text/javascript, */*; q=0.01',
    'X-Requested-With': 'XMLHttpRequest'
}

base_url = 'https://www.ufc.com/views/ajax'
page_num = 0
all_events = []

while True:
    form_data = {
        'view_name': 'event_list',
        'view_display_id': 'past_events',
        'page': str(page_num),
        '_drupal_ajax': '1'
    }
    
    response = requests.post(base_url, headers=headers, data=form_data)
    
    if response.status_code != 200:
        print(f"请求失败,状态码: {response.status_code}")
        break
    
    data = response.json()
    # 提取赛事HTML片段(返回结构中data字段为赛事列表的HTML)
    event_html = data[1]['data'] if len(data) > 1 else ''
    
    if not event_html.strip():
        print("没有更多赛事数据")
        break
    
    # 可添加BeautifulSoup解析HTML提取具体赛事信息
    # from bs4 import BeautifulSoup
    # soup = BeautifulSoup(event_html, 'html.parser')
    # 例如提取赛事标题:soup.find_all('h3', class_='c-card-event--result__headline')
    
    all_events.append(event_html)
    page_num += 1
    print(f"已加载第 {page_num} 页数据")

print(f"共加载 {len(all_events)} 页赛事数据")

额外注意

  • 解析数据时用BeautifulSoup处理返回的HTML片段,可提取赛事名称、日期、地点等核心信息;
  • 控制请求频率,每请求一次暂停1-2秒,避免触发反爬机制;
  • 若后续接口参数变化,可通过浏览器F12「网络」面板查看真实请求的参数和Headers。

内容的提问来源于stack exchange,提问作者Артём Курилко

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 02:15:10