Heim  >  Fragen und Antworten  >  Hauptteil

BeautifulSoup: Top-Level-Text mit klassischer Tag-Suchfunktion kombinieren?

Ich versuche, BeautifulSoup zu verwenden, um Informationen aus einem nicht einheitlich strukturierten HTML-Block zu extrahieren. Ich suche nach einer Möglichkeit, Textblöcke zwischen Tags in der Such-/Filterausgabe zu kombinieren. Zum Beispiel aus HTML:

<span>
    <strong>Description</strong>
    Section1
    <ul>
        <li>line1</li>
        <li>line2</li>
        <li>line3</li>
    </ul>
    <strong>Section2</strong>
    Content2    
</span>

Ich möchte eine Ausgabeliste erstellen, die bestimmte Tag-Typen ignoriert (ulli),但捕获顶级未标记文本。我发现的最接近的是 .select(':not(ul,li)').find_all(['strong']) im Beispiel oben, aber keiner von ihnen kann sowohl ungetaggten Text der obersten Ebene als auch verschiedene Ziel-Tags erfassen. Das ideale Verhalten wäre etwa so:

.find_all(['strong','UNTAGGED'])

erzeugt die folgende Ausgabe:

[
<strong>Description</strong>,
Section1,
<strong>Section2</strong>,
Content2
]

P粉471207302P粉471207302421 Tage vor505

Antworte allen(1)Ich werde antworten

  • P粉905144514

    P粉9051445142023-09-16 00:38:21

    要获得输出,您可以先选择,然后选择它的next_sibling

    示例
    from bs4 import BeautifulSoup
    html = '''
    <span>
        <strong>Description</strong>
        Section1
        <ul>
            <li>line1</li>
            <li>line2</li>
            <li>line3</li>
        </ul>
        <strong>Section2</strong>
        Content2    
    </span>
    '''
    soup = BeautifulSoup(html)
    
    data = []
    
    for e in soup.select('strong'):
        data.extend([e,e.next_sibling.strip()])
    
    data
    输出
    [<strong>Description</strong>,
     'Section1',
     <strong>Section2</strong>,
     'Content2']

    Antwort
    0
  • StornierenAntwort