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

使用requests爬取BAIR学生页面时无法获取姓名等关键信息

解决伯克利BAIR学生页面爬虫问题

问题原因

你遇到的两个问题本质是同一个原因:页面的学生姓名是通过JavaScript动态渲染的。requests.get()只能获取页面的静态HTML框架,那些学生信息是页面加载完成后,通过JS异步拉取数据再渲染到页面上的,所以静态HTML里的<span class="name">是空的,且只保留了第一条占位元素。


解决方案

方案1:用Playwright渲染动态页面(推荐)

Playwright可以模拟真实浏览器的行为,自动处理JS渲染,完整获取页面内容:

  1. 先安装依赖:
pip install playwright
playwright install chromium
  1. 编写爬虫代码:
from playwright.sync_api import sync_playwright

URL = "https://bair.berkeley.edu/students.html"

with sync_playwright() as p:
    # 启动无界面Chrome浏览器
    browser = p.chromium.launch(headless=True)
    page = browser.new_page()
    page.goto(URL)
    # 等待姓名元素加载完成,避免获取空内容
    page.wait_for_selector(".name")
    
    # 提取所有姓名文本
    student_names = page.locator(".name").all_text_contents()
    
    # 过滤空内容并打印
    for name in student_names:
        clean_name = name.strip()
        if clean_name:
            print(clean_name)
    
    browser.close()

方案2:直接请求后端API接口

打开浏览器开发者工具的「网络」面板,刷新页面后,找到加载学生数据的JSON接口(通常在XHR/fetch分类下),直接请求接口获取数据会更高效:

import requests

# 替换为你抓包得到的真实API地址
API_URL = "这里填实际的学生数据接口URL"
resp = requests.get(API_URL)
student_data = resp.json()

# 根据接口返回的JSON结构提取姓名,示例如下(需根据实际结构调整)
for item in student_data:
    print(item.get("name"))

注意:抓包时要注意接口的请求头和参数,确保请求符合网站的规则。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:15:33