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

如何使用pandas pd.read_html()将HTML转Dataframe时保留多余空格?

解决pd.read_html丢失连续空格的问题

pd.read_html默认会合并文本中的连续空格,这是因为它遵循HTML的默认渲染规则(连续空白字符会被合并为一个)。要保留这些空格,有两种可行的方案:

方案一:预处理HTML,替换连续空格为非换行空格实体

利用正则表达式把HTML中的连续空格替换成HTML非换行空格实体 (等价于 ),这样解析时会保留空格的数量:

import pandas as pd
import re

# 你的原始HTML内容
html = """<table>
<tr>
   <td>35</td>
   <td>Juan  Cruz</td>
</tr>
<tr>
   <td>23</td>
   <td>Philip   Philips</td>
</tr>
</table>"""

# 正则替换:把2个及以上的连续空格替换为对应数量的&#160;
processed_html = re.sub(r'(\s{2,})', lambda match: '&#160;' * len(match.group(1)), html)

# 解析处理后的HTML
df = pd.read_html(processed_html)[0]
print(df)

方案二:用BeautifulSoup手动解析表格,精准控制文本提取

绕过pd.read_html的默认解析逻辑,直接用BeautifulSoup提取表格内容,手动保留连续空格:

import pandas as pd
from bs4 import BeautifulSoup

html = """<table>
<tr>
   <td>35</td>
   <td>Juan  Cruz</td>
</tr>
<tr>
   <td>23</td>
   <td>Philip   Philips</td>
</tr>
</table>"""

# 初始化BeautifulSoup解析器
soup = BeautifulSoup(html, 'lxml')
table = soup.find('table')

# 逐行逐单元格提取内容,保留中间连续空格
table_data = []
for row in table.find_all('tr'):
    cells = row.find_all('td')
    # 提取每个单元格的文本,仅去除首尾的缩进/换行,保留中间连续空格
    row_content = [cell.get_text(strip=False).strip('\n\t ') for cell in cells]
    table_data.append(row_content)

# 转换为DataFrame
df = pd.DataFrame(table_data)
print(df)

两种方案都能实现保留文本中的连续空格,方案二更灵活,适合复杂HTML结构的场景;方案一操作简单,适合结构简单的表格。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 00:32:32