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

如何解析<a>标签外的文本?HTML标点提取技术求助

问题描述

解析一段文本时,每个单词被封装为<a>标签链接,但标点符号不包含在<a>标签内容中,而是位于标签外部。现有解析代码仅能提取<a>标签内的单词,无法获取这些标点符号,求解决方法。

示例HTML结构

<table>
  <tbody>
    <tr>
      <td>
        <a href="#">Lorem</a>
        ", "
        <a href="#">Ipsum</a>
        ": "
        <a href="#">dolor</a>
        "."
      </td>
      <td>...</td>
    </tr>
    <tr>
      <td>
        <a href="#">sit</a>
        "? '"
        <a href="#">amet</a>
        "' "
        <a href="#">consectetur</a>
        "..."
      </td>
      <td>...</td>
    </tr>
    <tr>
      <td>
        <a href="#">adipisicing</a>
        "-"
        <a href="#">elit</a>
        "; "
        <a href="#">Molestias</a>
        "!"
      </td>
      <td>...</td>
    </tr>
  </tbody>
</table>

当前使用的解析代码

from bs4 import BeautifulSoup
from selenium import webdriver

driver = webdriver.Chrome(executable_path="...")
driver.get(url=...)
soup = BeautifulSoup(driver.page_source, 'html.parser')

words = []
for tableRows in soup.select("table > tbody > tr"):
  for word in tableRows.find("td").select("a"):
    words.append(word.text)

print(words)

解决方案

方法1:遍历TD的所有子节点(精准控制)

这种方法可以逐个处理<td>下的每个节点,区分<a>标签和文本节点,完整保留单词与标点的顺序:

from bs4 import BeautifulSoup
from selenium import webdriver

driver = webdriver.Chrome(executable_path="...")
driver.get(url=...)
soup = BeautifulSoup(driver.page_source, 'html.parser')

content_parts = []
for table_row in soup.select("table > tbody > tr"):
    td = table_row.find("td")
    # 遍历TD下的所有子节点
    for node in td.contents:
        if node.name:
            # 处理<a>标签节点,提取文本
            content_parts.append(node.get_text())
        else:
            # 处理文本节点,清理多余引号和空白
            cleaned_text = node.strip().strip('"')
            if cleaned_text:
                content_parts.append(cleaned_text)

# 拼接成完整文本
full_content = ''.join(content_parts)
print(full_content)
# 若需要保留拆分后的列表形式,直接输出content_parts
# print(content_parts)

方法2:直接提取TD的全部文本(简化版)

如果只需要最终的完整文本,无需拆分节点,可以直接获取<td>的所有文本后清理格式:

from bs4 import BeautifulSoup
from selenium import webdriver

driver = webdriver.Chrome(executable_path="...")
driver.get(url=...)
soup = BeautifulSoup(driver.page_source, 'html.parser')

full_contents = []
for table_row in soup.select("table > tbody > tr"):
    td_text = table_row.find("td").get_text(strip=False)
    # 清理多余的引号、换行和空白
    cleaned_text = td_text.replace('"', '').replace('\n', '').strip()
    full_contents.append(cleaned_text)

print(full_contents)

内容的提问来源于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 15:51:42