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

如何用BeautifulSoup4提取并格式化多行HTML中的地址文本?

嘿,我懂你这种困扰——跨多行的HTML地址文本提取后总是乱糟糟的,明明能拿到内容但就是不够规整。我之前处理类似需求时踩过不少坑,分享几个实用的方法给你:

1. 用BeautifulSoup自带参数直接搞定

其实get_text()方法本身就有处理空白的参数,完全不用手动去替换\n和\r,试试这个:

# 先定位到包含地址的元素(替换成你实际的选择器)
address_elem = soup.find('div', id='target-address')
# 一键生成规整单行地址
clean_address = address_elem.get_text(strip=True, separator=' ')

这里strip=True会自动去掉文本首尾的所有空白,separator=' '会把所有换行、制表符、连续空格这类冗余空白统一替换成单个空格,直接得到干净的单行地址。

2. 正则表达式兜底清理

如果上面的方法还没完全解决(比如有些极端情况下仍有多余空格),用正则来收尾绝对靠谱:

import re

raw_address = address_elem.get_text().strip()
# 把所有连续的空白字符(换行、空格、制表符全算)替换成单个空格
clean_address = re.sub(r'\s+', ' ', raw_address)

\s+能匹配任意连续的空白,替换后就能保证地址里只有单个空格分隔各个部分。

3. 逐行过滤再拼接(适合多空行场景)

如果你的地址HTML里夹杂了很多空行或者只有空格的无效行,可以先拆分每行,过滤掉没用的内容再拼接:

# 按行拆分文本
address_lines = address_elem.get_text().splitlines()
# 过滤掉空行和纯空格的行,同时去掉每行首尾的空白
valid_lines = [line.strip() for line in address_lines if line.strip()]
# 用空格把有效行拼接成单行
clean_address = ' '.join(valid_lines)

这种方式能精准筛选出地址的有效内容,避免把无关的空白行也带进来。

另外补充个小提示:如果地址是分散在多个子标签里(比如多个<span>或者<p>),别只用find,改用find_all把所有地址片段都捞出来再拼接:

address_parts = soup.find_all('span', class_='address-section')
clean_address = ' '.join([part.get_text(strip=True) for part in address_parts])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:23:22