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

BeautifulSoup无法找到表格行求助:无法遍历HTML表格单元格

解决BeautifulSoup找不到表格<tr>行的问题

我来帮你排查下这个问题,从你的代码和描述来看,导致找不到表格行的原因主要有以下几种可能,对应解决方案如下:

1. 表格行被嵌套在<tbody>标签内

很多标准的HTML表格会把所有<tr>元素包裹在<tbody>标签里,你当前的table.findChildren('tr')可能因为层级问题没查到目标元素。你可以调整代码,改用find_all递归查找所有层级的<tr>(或者先定位<tbody>再找行):

from bs4 import BeautifulSoup
url = "D:\opus\lt-report-opus_lmes_jenkins-20180510-111740\index.html"
page = open(url)
soup = BeautifulSoup(page.read(), 'html.parser')
table = soup.find('table', attrs={'id': 'statisticsTable'})
if table != None:
    print ('Found the table ' + str(table))
    # 用find_all递归查找所有<tr>,不受层级限制
    rows = table.find_all('tr')
    for row in rows:
        print(row)
        for cell in row.find_all('td'):
            print(cell)
            print(cell.text)

你也可以先打印table.prettify(),查看表格内部的HTML结构,确认<tr>是否被<tbody>包裹,这样能快速定位问题。

2. 表格是JavaScript动态生成的

如果这个表格是页面加载后通过JavaScript动态渲染出来的(比如从后端接口拉取数据后生成),那么直接用open(url)读取的静态HTML里是没有这些<tr>元素的——BeautifulSoup只能解析静态HTML内容,无法执行JavaScript。

这种情况需要用浏览器自动化工具(比如Selenium)模拟浏览器加载页面,等待JavaScript执行完成后再获取完整的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

# 本地文件需要添加file:///前缀
url = "file:///D:/opus/lt-report-opus_lmes_jenkins-20180510-111740/index.html"
driver = webdriver.Chrome()  # 需提前安装ChromeDriver并配置环境变量
driver.get(url)

# 等待表格加载完成,最多等待10秒
wait = WebDriverWait(driver, 10)
wait.until(EC.presence_of_element_located((By.ID, "statisticsTable")))

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

table = soup.find('table', attrs={'id': 'statisticsTable'})
if table:
    rows = table.find_all('tr')
    for row in rows:
        print(row)
        for cell in row.find_all('td'):
            print(cell.text)

driver.quit()

3. 解析器兼容性问题

Python内置的html.parser对一些复杂HTML的解析支持有限,你可以尝试更换更强大的解析器,比如lxml或者html5lib:

首先安装解析器:

pip install lxml

然后修改BeautifulSoup的初始化代码:

soup = BeautifulSoup(page.read(), 'lxml')

内容的提问来源于stack exchange,提问作者D. Jay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:56:44