Python requests请求带playlist参数的URL仍返回默认1v1数据如何解决
问题原因
你请求的URL是服务端返回的静态初始页面,站点的对局模式切换逻辑是前端JavaScript异步实现的:
- 服务端返回的初始HTML默认嵌入1v1模式的表格数据
- playlist参数仅被前端JS识别,用来向数据接口拉取对应模式的新数据,再动态替换页面表格
- 你直接用requests请求带参数的URL,拿到的还是未执行JS的初始HTML,所以始终是1v1数据
解决方案1:直接请求真实数据接口(推荐)
打开浏览器F12开发者工具的「网络」面板,切换对局模式时抓取对应异步数据接口,直接请求该接口获取结构化JSON数据,处理效率远高于解析HTML。
示例实现逻辑:
import pandas as pd import requests # 替换为抓包拿到的真实数据接口地址,一般会自带playlist传参位 url = "https://rocketleague.tracker.network/api/rocket-league/distribution" params = { "playlist": 11 # 2v2模式对应参数 } header = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36", "X-Requested-With": "XMLHttpRequest" } r = requests.get(url, headers=header, params=params) # 解析JSON数据转为DataFrame,可根据接口实际返回结构调整解析逻辑 data = r.json() df = pd.DataFrame(data["data"]) # 后续清洗、导出逻辑保持不变 df = df.drop(df.index[22]) df = df.drop(columns=["Division II", "Division III"]) df.to_csv('2v2.csv')
解决方案2:用动态渲染工具加载页面
如果找不到公开数据接口,可以用Selenium模拟浏览器运行,等JS执行完成、表格更新后再获取页面源码解析:
import pandas as pd from selenium import webdriver from selenium.webdriver.chrome.options import Options import time chrome_options = Options() chrome_options.add_argument("--headless") # 无头模式不弹出浏览器 chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.106 Safari/537.36") driver = webdriver.Chrome(options=chrome_options) # 直接访问带参数的URL driver.get("https://rocketleague.tracker.network/rocket-league/distribution?playlist=11") time.sleep(3) # 等待页面加载完成,可根据实际情况调整时长或替换为显式等待逻辑 # 获取渲染后的页面源码 page_source = driver.page_source driver.quit() df = pd.read_html(page_source) df = pd.concat(df) df = df.drop(df.index[22]) df = df.drop(columns=["Division II", "Division III"]) df.to_csv('2v2.csv')
内容的提问来源于stack exchange,提问作者Jeremy Gorden
相关产品推荐
相关产品推荐

