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

如何用Python从React应用的script标签爬取数据(RateMyProfessor场景)

无需渲染页面提取RateMyProfessor的教师数据

直接用requests配合HTML解析和JSON处理就能提取window.__RELAY_STORE__里的教师数据,不用Selenium渲染,步骤如下:

  • 第一步:解析页面找到目标script标签
    使用BeautifulSoup解析请求到的页面内容,筛选出包含window.__RELAY_STORE__的script标签。先安装依赖:

    pip install requests beautifulsoup4
    
  • 第二步:提取并处理JSON数据
    从找到的script内容中,截取window.__RELAY_STORE__ = 之后的JSON字符串,去掉末尾的分号等无关字符,再用json模块解析成Python字典。

  • 第三步:提取目标教师信息
    遍历解析后的JSON对象,筛选出包含教师评分信息的条目,提取legacyId、avgRating、numRatings等字段。

完整代码示例

import requests
from bs4 import BeautifulSoup
import json

# 请求目标页面
url = "https://www.ratemyprofessors.com/search/teachers?query=Michael&sid=U2Nob29sLTM5OQ=="
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"
}
response = requests.get(url, headers=headers)
soup = BeautifulSoup(response.text, "html.parser")

# 查找包含window.__RELAY_STORE__的script标签
target_script = None
for script in soup.find_all("script"):
    if script.string and "window.__RELAY_STORE__" in script.string:
        target_script = script.string
        break

if target_script:
    # 提取JSON部分
    json_str = target_script.split("window.__RELAY_STORE__ = ")[1].rstrip(";\n")
    relay_store = json.loads(json_str)
    
    # 遍历提取教师信息
    teacher_data = []
    for key, value in relay_store.items():
        # 筛选包含目标字段的条目
        if all(k in value for k in ["legacyId", "avgRating", "numRatings"]):
            teacher_info = {
                "legacyId": value["legacyId"],
                "avgRating": value["avgRating"],
                "numRatings": value["numRatings"]
            }
            teacher_data.append(teacher_info)
    
    # 打印结果
    for teacher in teacher_data:
        print(teacher)
else:
    print("未找到包含window.__RELAY_STORE__的script标签")

注意事项

  • 务必添加User-Agent请求头,否则网站可能拒绝请求或返回不完整内容。
  • 若网站结构调整,window.__RELAY_STORE__的命名或script标签的位置可能变化,需要根据实际页面内容调整筛选逻辑。
  • 不要频繁发送请求,避免触发网站反爬机制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:41:26