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

使用Python与BeautifulSoup爬取时,指定class查询返回空结果?

问题排查与解决办法

嘿,作为编程新手遇到这种问题太正常了!我来帮你拆解一下可能的原因和对应的解决办法:

第一个可能:多Class的写法错误

你用了 soup.findAll('table', class_='playerTable rtable'),这里的问题在于:HTML里的 class="playerTable rtable" 其实表示这个表格同时拥有两个独立的Class——playerTable 和 rtable,而不是一个叫 playerTable rtable 的单一Class。

BeautifulSoup的 class_ 参数如果接收空格分隔的字符串,会把它当作一个完整的Class名称去匹配,自然找不到对应的元素。你可以改成两种写法:

  • 用列表传递多个Class:
    tables = soup.findAll('table', class_=['playerTable', 'rtable'])
    
  • 用CSS选择器(更简洁,推荐):
    tables = soup.select('table.playerTable.rtable')
    

第二个可能:页面内容是动态加载的

如果上面的写法还是返回空列表,那大概率是这个表格是通过JavaScript动态渲染出来的——你用 requests 获取到的只是网站的初始HTML框架,实际的表格数据是浏览器加载页面后,通过JS请求接口再渲染出来的,所以静态HTML里根本没有这个表格。

这时候你需要用浏览器自动化工具(比如Selenium)来模拟浏览器加载页面,等内容渲染完成后再获取HTML:

from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup

url = "http://www.spotrac.com/nfl/denver-broncos/peyton-manning-5028/"

# 初始化Chrome浏览器(需要提前安装对应版本的chromedriver)
driver = webdriver.Chrome()
driver.get(url)

# 等待表格加载完成(最多等10秒)
wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, 'table.playerTable.rtable')))

# 获取渲染后的完整HTML
html = driver.page_source
soup = BeautifulSoup(html, 'html.parser')

# 现在再查找表格
tables = soup.select('table.playerTable.rtable')
print(len(tables))  # 应该能看到正确的数量了

driver.quit()

额外小提示

你可以先把 requests.get 获取到的HTML保存到本地文件,打开看看里面有没有 playerTable rtable 这个Class的表格——如果没有,那肯定是动态加载的问题,直接用Selenium就行;如果有,那就是第一个写法的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:30:57