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

如何用Python的BeautifulSoup获取指定位置td元素的文本

问题描述

我有如下HTML代码:

<tr>
  <td class="a">...</td>
  <td class="a">...</td>
  <td class="a">
    <p>
      <sup>
        Name Name Name
      </sup>
    </p>
  </td>
  <td class="a">...</td>
  <td class="a">...</td>
  <td class="a">
    <p>
      <sup>25.01.1980</sup>
    </p>
  </td>
  <td class="a">...</td>
  <td class="a">...</td>
</tr>
<tr>...</tr>
<tr>...</tr>

我需要获取每个<tr>下第3个和第5个<td>元素的文本,但以下代码无法正常运行:

from bs4 import BeautifulSoup
import index

soup = BeautifulSoup(index.index_doc, 'lxml')

for i in soup.find_all('tr')[2:]:
    print(i[2].text, i[4].text)
问题原因与解决方案

错误原因

BeautifulSoup返回的<tr>标签对象(即代码里的i)不能直接通过下标[n]访问子元素,这种写法不符合BeautifulSoup的API规范,会引发错误。

修正后的代码

要获取<tr>下的指定<td>,需要先通过find_all('td')获取当前行所有<td>的列表,再根据下标取值:

from bs4 import BeautifulSoup
import index

soup = BeautifulSoup(index.index_doc, 'lxml')

# 遍历从第3个<tr>开始的所有行(下标从0开始,[2:]对应第3个及以后)
for tr in soup.find_all('tr')[2:]:
    # 获取当前行所有<td>元素
    tds = tr.find_all('td')
    # 确保<td>数量足够,避免索引越界
    if len(tds) >= 5:
        # 第3个<td>对应下标2,第5个对应下标4,用.strip()去除多余空白
        third_td_text = tds[2].text.strip()
        fifth_td_text = tds[4].text.strip()
        print(third_td_text, fifth_td_text)

补充说明

  • 下标从0开始计数,所以第3个<td>对应tds[2],第5个对应tds[4],这部分原始逻辑是正确的。
  • 增加len(tds) >=5的判断,可以避免某些行<td>数量不足导致的索引越界错误。
  • 使用.strip()可以清除文本前后的换行、空格等空白字符,让输出更整洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:10:23