网页爬取返回None值?如何获取Valorant玩家MMR评分
解决tracker.gg Valorant玩家MMR抓取返回None的问题
你的代码返回None主要有两个核心原因:
1. 页面是动态渲染的
tracker.gg的玩家数据是通过JavaScript动态加载的,直接用requests.get()获取的是未渲染的静态HTML,里面根本没有你要找的stat__value元素,自然返回None。
2. 未模拟浏览器请求头(次要但可能影响)
网站可能会识别非浏览器的请求,返回简化或拦截的内容,导致元素无法被找到。
解决方法一:用Selenium模拟浏览器加载
通过模拟真实浏览器加载页面,等待动态内容渲染完成后再抓取元素:
- 先安装依赖:
pip install selenium
下载对应浏览器的驱动(比如ChromeDriver,版本要和你的浏览器匹配)
示例代码:
from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.options import Options import time # 配置无头模式(可选,不弹出浏览器窗口) chrome_options = Options() chrome_options.add_argument("--headless=new") driver = webdriver.Chrome(options=chrome_options) driver.get("https://tracker.gg/valorant/profile/riot/curry%2366666/overview") # 等待页面加载完成,时间可根据网络情况调整 time.sleep(3) # 定位MMR元素(注意:网站的class可能会更新,需确认当前页面的元素结构) mmr_element = driver.find_element(By.CSS_SELECTOR, "span.stat__value") if mmr_element: print(f"玩家MMR:{mmr_element.text}") else: print("未找到MMR元素,请检查元素选择器是否正确") driver.quit()
解决方法二:直接调用网站API(更高效)
打开浏览器开发者工具(F12),切换到Network标签,刷新页面后找到加载玩家数据的XHR请求,直接请求对应的API接口,解析JSON数据即可:
示例代码:
import requests # 模拟浏览器请求头 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", "Accept": "application/json" } # 替换为实际找到的API地址 api_url = "https://api.tracker.gg/api/v2/valorant/standard/profile/riot/curry%2366666" response = requests.get(api_url, headers=headers) response.raise_for_status() # 抛出请求错误 data = response.json() # 从JSON结构中提取MMR(路径需根据实际返回数据调整) mmr_value = data["data"]["segments"][0]["stats"]["mmr"]["displayValue"] print(f"玩家MMR:{mmr_value}")
注意事项
- 网站可能会更新元素结构或API接口,若代码失效,需重新检查页面元素或API请求
- 频繁请求可能触发反爬机制,建议添加请求间隔,遵守网站的使用条款
内容的提问来源于stack exchange,提问作者Alex is funny
相关产品推荐
相关产品推荐

