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

如何提取<tr>下首个<td>中<a>标签及裸文本,排除其他标签文本

提取HTML表格指定文本的修正方案

需求说明

需要提取HTML表格中每个<tr>元素的第一个<td>内的两类文本:

  • <a>标签中的文本
  • 未被任何其他标签包裹的裸文本(示例中标记为"yyy"/"y"的内容为需要提取的,"zzz"为无需提取的)

示例HTML结构

<table>
  <tbody>
    <tr>
      <td>
        <b>zzz</b>
        <a href="#">yyy</a>
        "y"
        <a href="#">yyy</a>
        <sup>zzz</sup>
        <a href="#">yyy</a>
        <a href="#">yyy</a>
        "y"
      </td>
      <td>
        zzzzz
      </td>
    </tr>
  </tbody>
</table>

现有Python代码

words = []
for tableRows in soup.select("table > tbody > tr"):
  tableData = tableRows.find("td").text
  text = [word.strip() for word in tableData.split(' ')]
  words.append(text)
print(words)

问题

当前代码会提取<td>内的所有文本(包括示例中的"zzz"),不符合需求。

修正方案

直接定位目标元素和文本节点,精准筛选需要的内容:

from bs4 import BeautifulSoup, NavigableString

# 示例HTML(实际使用时可替换为你的HTML内容)
html = """
<table>
  <tbody>
    <tr>
      <td>
        <b>zzz</b>
        <a href="#">yyy</a>
        "y"
        <a href="#">yyy</a>
        <sup>zzz</sup>
        <a href="#">yyy</a>
        <a href="#">yyy</a>
        "y"
      </td>
      <td>
        zzzzz
      </td>
    </tr>
  </tbody>
</table>
"""

soup = BeautifulSoup(html, 'html.parser')
words = []

for tr in soup.select("table > tbody > tr"):
    first_td = tr.find("td")
    current_content = []
    
    # 提取所有<a>标签的文本
    for a in first_td.find_all("a"):
        a_text = a.get_text(strip=True)
        if a_text:
            current_content.append(a_text)
    
    # 提取<td>下的裸文本节点
    for child in first_td.children:
        if isinstance(child, NavigableString):
            raw_text = child.strip()
            if raw_text:
                current_content.append(raw_text)
    
    words.append(current_content)

print(words)

说明

  • 先通过find_all("a")获取<td>内所有<a>标签的文本,清理空白后加入结果
  • 遍历<td>的直接子节点,筛选出NavigableString类型的节点(即裸文本),清理空白后加入结果
  • 最终结果仅包含需求中的"yyy"和"y"类内容,排除了其他标签包裹的"zzz"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 16:25:21