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

使用Beautiful Soup解析HTML时部分子标签无法获取的问题求助

解决Beautiful Soup提取<tr class="odd">标签不全的问题

可能的原因及对应方案

1. 目标<tr>不在当前查找的table层级下

你当前用child.div.table.find_all('tr', class_='odd')限定了查找范围为child下第一个div内的第一个table,但黄色框的<tr>可能位于其他table或不同层级中。可以扩大查找范围:

# 全局查找所有class为odd的<tr>标签
all_odd_trs = soup.find_all('tr', class_='odd')

如果需要限定在child范围内但不确定具体table,可遍历所有table收集目标标签:

target_trs = []
for table in child.find_all('table'):
    target_trs.extend(table.find_all('tr', class_='odd'))

2. 部分<tr>的class属性包含多个值

若黄色框的<tr>class是odd item这类多类名结构,改用CSS选择器匹配更稳妥:

# 使用CSS选择器匹配所有含odd类的<tr>
all_odd_trs = soup.select('tr.odd')
# 限定在child下的所有table中查找
target_trs = child.select('table tr.odd')

3. 第一个<tr>内容丢失的问题

这种情况多是原始HTML存在语法错误(如标签未闭合、嵌套混乱),导致BeautifulSoup解析时修正结构引发内容移位。可以更换解析器尝试:

# 使用lxml解析器(需先安装lxml库)
soup = BeautifulSoup(html_content, 'lxml')
# 或用html5lib解析器,兼容不规范HTML效果更好
soup = BeautifulSoup(html_content, 'html5lib')

提取Name和Value字段的示例代码

假设每个目标<tr>包含两个<td>分别对应Name和Value,可按如下方式提取:

for tr in target_trs:
    tds = tr.find_all('td')
    if len(tds) >= 2:
        name = tds[0].get_text(strip=True)
        value = tds[1].get_text(strip=True)
        print(f"Name: {name}, Value: {value}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 05:06:00