当HTML文本跨多行时,如何在beautifulsoup4中返回格式良好的文本

时间:2018-02-21 19:28:50

标签: html regex beautifulsoup python-3.6

我试图使用python的beautifulsoup4包提取地址。文本所在的HTML块如下所示:

<address>
        183 Main St<br>East Copper<br>Massachusetts<br>U S A<br>
        MA 01516-113
    </address>

我能够使用find和text.strip()方法获取地址,并且无需替换\ n和\ r \ n,但我会回来:

'183 Main StEast CopperMassachusettsU S A        MA 01516-113'

这对我的目的来说可能没问题,但好奇心让我想要了解如何清理它。

我已经做了大量的修补和研究,以弄清楚如何让它返回一个格式良好的地址。我的意思是所有这一切都在一条线上(因为它是当前的),没有额外的空间和空间应该在诸如&#34;铜&#34;之类的东西之间。和&#34;马萨诸塞州&#34;。

通过认为正则表达式/代码可以帮助我是否错误地考虑了这个问题?我应该反复遍历<br>标记并单独抓取每一行,然后将字符串与+和空格组合吗?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

在这种情况下,理想的方式如下:

<!-- Content of the <body> tag -->
<header class="header">
  <div class="head left">
    <img src="logos.png" alt="logo" height="20">
  </div>
  <div class="head right">
    <img src="logos.png" alt="logo" height="20">
  </div>
</header>

<main class="cent">
  <video id="tv-video" class="video-js vjs-fluid vjs-default-skin vjs-show-big-play-button-on-pause vjs-big-play-centered" controls autoplay preload="auto"></video>
</main>

<footer class="footer">
  <img src="firma.png" alt="logo" height="20">
</footer>

输出:

from bs4 import BeautifulSoup

content="""
<address>
        183 Main St<br>East Copper<br>Massachusetts<br>U S A<br>
        MA 01516-113
    </address>
"""
soup = BeautifulSoup(content,"lxml")
item = soup.find("address").get_text(" ",strip=True)
print(item)