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

使用Python requests.get()无法抓取MIT页面排名标准区域的问题

问题原因与解决办法

无法抓取排名参数区域的原因

目标页面中包含10个排名参数的区域是JavaScript动态加载的:requests.get()只能获取页面初始的静态HTML代码,而该区域的数据是页面加载完成后,通过异步请求后端接口获取并由JS渲染到页面上的,所以静态请求无法拿到这部分内容。

解决方案

方案1:直接抓取数据接口(高效推荐)

打开浏览器开发者工具(F12),切换到「Network」标签页,刷新页面后筛选「XHR/Fetch」类型的请求,找到返回排名参数数据的接口(通常是JSON格式),直接请求该接口即可获取数据,无需解析HTML。

示例代码:

import requests

# 需自行通过抓包确认实际接口URL
api_url = "https://www.topuniversities.com/sites/default/files/qs-rankings-data/374055.txt"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36"}

response = requests.get(api_url, headers=headers)
data = response.json()

parameters_list = []
value_list = []
# 根据接口返回的实际数据结构调整字段名
for indicator in data["indicators"]:
    parameters_list.append(indicator["name"])
    value_list.append(str(indicator["score"]))

print("参数列表:", parameters_list)
print("分数列表:", value_list)

方案2:用Selenium模拟浏览器渲染

如果找不到接口或接口有反爬限制,可以用Selenium模拟浏览器加载页面,等待JS渲染完成后再获取完整HTML,进而解析目标内容。

示例代码:

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup

url = 'https://www.topuniversities.com/universities/massachusetts-institute-technology-mit'
# 配置无头浏览器(可选,不显示窗口)
chrome_options = Options()
chrome_options.add_argument("--headless=new")
chrome_options.add_argument("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.81 Safari/537.36")

driver = webdriver.Chrome(options=chrome_options)
driver.get(url)
# 等待页面动态内容加载完成(可根据实际情况调整等待时间)
driver.implicitly_wait(10)

# 获取渲染后的完整页面源码
soup = BeautifulSoup(driver.page_source, 'lxml')
driver.quit()

# 定位目标元素(需根据页面实际HTML结构调整选择器)
parameters_list = []
value_list = []
for item in soup.find_all('div', class_='indicator-item'):
    param_name = item.find('div', class_='indicator-name').text.strip()
    param_score = item.find('div', class_='indicator-score').text.strip()
    parameters_list.append(param_name)
    value_list.append(param_score)

print("参数列表:", parameters_list)
print("分数列表:", value_list)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 22:33:39