将<br/>转换为终点线

时间:2012-09-22 17:02:33

标签: beautifulsoup

我正在尝试使用BeautifulSoup提取一些文字。我正在使用get_text()函数来实现此目的。

我的问题是文本包含</br>标记,我需要将它们转换为结束行。我怎样才能做到这一点?

6 个答案:

答案 0 :(得分:57)

您可以使用BeautifulSoup对象本身或其中的任何元素来执行此操作:

for br in soup.find_all("br"):
    br.replace_with("\n")

答案 1 :(得分:29)

正如official doc所说:

  

您可以指定用于将文本位连接在一起的字符串:soup.get_text(“\ n”)

答案 2 :(得分:5)

正则表达式应该可以解决问题。

import re
s = re.sub('<br\s*?>', '\n', yourTextHere)

希望这有帮助!

答案 3 :(得分:0)

在Ian和除法零度的帖子/评论中,您可以执行以下操作以有效过滤/替换许多标签:

for elem in soup.find_all(["a", "p", "div", "h3", "br"]):
    elem.replace_with(elem.text + "\n\n")

答案 4 :(得分:0)

与其用\ n代替标签,不如将\ n添加到所有重要标签的末尾。

要从@petezurich窃取列表,请执行以下操作:

for elem in soup.find_all(["a", "p", "div", "h3", "br"]):
    elem.append('\n')

答案 5 :(得分:0)

如果您致电element.text,您将获得不带br标签的文本。 为此,您可能需要定义自己的自定义方法:

     def clean_text(elem):
        text = ''
        for e in elem.descendants:
            if isinstance(e, str):
                text += e.strip()
            elif e.name == 'br' or e.name == 'p':
                text += '\n'
        return text

    # get page content
    soup = BeautifulSoup(request_response.text, 'html.parser')
    # get your target element
    description_div = soup.select_one('.description-class')
    # clean the data
    print(clean_text(description_div))