从 div 中获取文本,不包括任何标签和特殊字符

2024-09-29 21:21:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个html文件,在div标记中有许多不同的文本结构。我唯一想做的就是在这些标记中获取文本,但是没有标记、换行符等

例如,这个html div:

<div class="textNahlad">
     <i>Informácie pre záujemcu:</i>
     <br>
    Výberový pohovor je potrebné vopred dojednať telefonicky
     <br>
</div>

但也可以是:

^{pr2}$

所以结果是:Informácie pre záujemcu: Výberový pohovor je potrebné vopred dojednať telefonicky

我很好奇Python/BS4中是否有一个函数可以只返回文本而不返回标记、换行符和其他混乱的内容。在

find.('div',class_="textNahlad")不工作

编辑:我试着用.contents和每个内容检查,不管是文本还是标记,如果是tag,则获取文本,但它不能正常工作。在


Tags: 标记文本brdivhtmlpreclassje
3条回答

您可以按如下方式访问stripped_strings属性:

from bs4 import BeautifulSoup

html1 = '''<div class="textNahlad">
     <i>Informácie pre záujemcu:</i>
     <br>
    Výberový pohovor je potrebné vopred dojednať telefonicky
     <br>
</div>'''

soup1 = BeautifulSoup(html1)

html2 = '''<div class="textNahlad">
         <b>Informácie pre záujemcu:</b>
         <br>
         <br>
         <br>
        <i>Výberový pohovor je potrebné vopred dojednať telefonicky</i>
         <br>
</div>'''

soup2 = BeautifulSoup(html2)

>>> print ' '.join(soup1.stripped_strings)
Informácie pre záujemcu: Výberový pohovor je potrebné vopred dojednať telefonicky

>>> print ' '.join(soup2.stripped_strings)
Informácie pre záujemcu: Výberový pohovor je potrebné vopred dojednať telefonicky

>>> ' '.join(soup1.stripped_strings) == ' '.join(soup2.stripped_strings)
True

最后一行显示,虽然输入中的空白(<br>)不同,但文本是相同的。在

我认为bs4的^{}方法应该可以正常工作。然后可以使用一些正则表达式来处理结果,以删除任何多余的空白。在

import re

div = soup.find('div', class_='textNahlad')

text = div.get_text()
# '\nInformácie pre záujemcu:\n\n\n\nVýberový pohovor je potrebné vopred dojednať telefonicky\n\n'

result = re.sub(r'\s+', ' ', text).strip()
# 'Informácie pre záujemcu: Výberový pohovor je potrebné vopred dojednať telefonicky'

这样做:

#! /usr/bin/env python
# -*- coding: utf-8 -*-

content = """
<div class="textNahlad">
         <b>Informácie pre záujemcu:</b>
         <br>
         <br>
         <br>
         <i>Výberový pohovor je potrebné vopred dojednať telefonicky</i>
         <br>
</div>
"""
from bs4 import BeautifulSoup
soup = BeautifulSoup(content)
for string in soup.strings:
    if string.strip():
        print string.strip(),

相关问题 更多 >

    热门问题