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

AJAX动态加载页面爬取问题:FIVB女子沙排排名页无法获取表格内容

解决FIVB女子沙滩排球排名页面AJAX动态内容爬取问题

嘿,我之前也碰到过这类动态页面爬取的坑!你用requests直接请求页面拿不到BTechPlayM里的内容,核心原因是这个表格数据是页面加载完成后,通过AJAX异步请求获取并渲染的——requests只能抓取到页面初始的静态HTML,根本没法获取后续动态加载的内容。

给你两个实用的解决方案:

方案一:直接调用AJAX数据接口

打开浏览器开发者工具(按F12),切换到Network标签页,刷新页面后筛选XHR类型的请求,就能找到页面获取排名数据的真实接口。直接请求这个接口,就能拿到原始的结构化数据(一般是JSON或HTML片段),比解析静态页面高效得多。

举个示例(实际接口需要你自己抓包确认):

import requests

# 替换为你抓包得到的真实AJAX接口地址
ajax_api_url = "http://www.fivb.org/对应AJAX接口路径"
# 带上必要请求头,模拟浏览器行为,避免被拦截
request_headers = {
    "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",
    "Referer": "http://www.fivb.org/EN/BeachVolleyball/PlayersRanking_W.asp"
}

response = requests.get(ajax_api_url, headers=request_headers)
# 如果接口返回JSON格式数据
rank_data = response.json()
# 直接处理数据即可
print(rank_data)

方案二:用Selenium模拟浏览器加载

要是找不到AJAX接口,或者接口有复杂的验证逻辑,那就用Selenium模拟真实浏览器的加载过程,等页面完全渲染后再抓取内容:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from bs4 import BeautifulSoup

target_url = 'http://www.fivb.org/EN/BeachVolleyball/PlayersRanking_W.asp'

# 初始化Chrome浏览器驱动(需提前下载与浏览器版本匹配的chromedriver)
driver = webdriver.Chrome()
driver.get(target_url)

# 等待目标div加载完成,最长等待10秒
wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_element_located((By.ID, 'BTechPlayM')))

# 获取完全渲染后的页面源码
full_page_html = driver.page_source
soup = BeautifulSoup(full_page_html, 'html.parser')

# 现在就能拿到BTechPlayM里的完整内容了
target_content = soup.find('div', id='BTechPlayM')
print(target_content)

# 记得关闭浏览器
driver.quit()

小提示

  • 不管用哪种方法,都要设置合理的请求头,避免被网站的反爬机制拦截
  • 使用Selenium时,一定要确保驱动程序和浏览器版本匹配,不然会报错
  • 爬取前请务必遵守网站的robots.txt协议和使用条款

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:11:34